From 5db89fd136b349fa83be69020459c6dd8709dc03 Mon Sep 17 00:00:00 2001 From: Rita Zerrizuela Date: Wed, 20 Jul 2022 11:40:03 -0300 Subject: [PATCH] Merge `fa` into `master` (#167) * Add migration guide [SDK-3393] (#127) Add migration guide * Remove license header from source files [SDK-3389] (#126) Remove license header * Update year in license file (#128) * Add `.swiftpm` directory to `.gitignore` (#131) Add `.swiftpm` to `.gitignore` * Add CONTRIBUTING.md (#130) * Drop old platform versions [SDK-3387] (#129) * Drop old platform versions * Remove preprocessor macros and compatibility code * Remove obsolete preprocessor macros * Use accesibility config when neither iOS nor macOS * Remove unnecessary preprocessor macros * Remove extra blank line at the end of the file * Restore Touch ID case * Remove leftover nested if * Update README [SDK-3416] (#135) * Remove deprecated method [SDK-3413] (#132) * Remove deprecated method * Add change to the migration guide * Remove usage of deprecated properties [SDK-3414] (#133) * Remove usage of deprecated APIs * Remove enum cases * Remove usage of enum cases * Update V1_MIGRATION_GUIDE.md Co-authored-by: Steve Hobbs Co-authored-by: Steve Hobbs * Add support policy [SDK-3420] (#138) * Fix typo in property name (#137) * Remove obsolete functionality [SDK-3419] (#136) * [SDK-3434] Update issues templates (#140) * [SDK-3434] Migrate GitHub issue templates * Update config.yml * Update config.yml * Add note about the Responsible Disclosure Program to bug reports template. * Remove "FAQ.md" reference, as there is no file * Update .github/ISSUE_TEMPLATE/Bug Report.yml * Update .github/ISSUE_TEMPLATE/Feature Request.yml * Update .github/ISSUE_TEMPLATE/Bug Report.yml * Update .github/ISSUE_TEMPLATE/Feature Request.yml * Update .github/ISSUE_TEMPLATE/config.yml * Update .github/ISSUE_TEMPLATE/config.yml * Update checkbox grouping * Update Pull Request template Co-authored-by: Rita Zerrizuela * Migrate to Swift [SDK-3428] (#139) * Migrate to Swift * Add test case * Integrate SwiftLint * Add .swiftlint.yml * Fix tests * Add API docs * Update migration guide * Remove leftover comments * Update library description * Add snippets to the API docs * Drop Xcode 12.x and its older simulators * Add item to the migration guide * Drop support for old Swift versions [SDK-3444] (#141) * Add missing unit tests (#142) * Add missing tests * Remove extra whitespace * Add missing import for SPM * Apply recommended Xcode 14 settings (#143) * [SDK-3450] API Documentation Generation (#144) * Add generated API documentation to repo (#145) * Add support for iCloud synchronization (#146) * Add support for iCould synchronization * Update API docs * Add unit tests for queries (#147) Test queries * Improve API docs generation (#148) * Fix typos in tests (#149) * Make `context` parameter optional (#151) * Re-generate API docs (#152) * Complete README and Migration Guide [SDK-3397] (#150) * Add support for custom attributes (#153) * Replace OSX with macOS in schemes and targets (#154) Replace OSX with macOS * Release 1.0.0-fa.0 (#155) * Add fa to Podspec version (#156) * Fix 'access group' capitalization (#158) * Update API docs (#159) * Use Codecov orb (#161) * Create .semgrepignore * Add placeholders to issue forms (#162) * Update README for GA [SDK-3500] (#163) Update the README for GA * Merge `master` into `fa` (#164) Co-authored-by: Steve Hobbs Co-authored-by: Evan Sims --- .circleci/config.yml | 17 +- .github/ISSUE_TEMPLATE/Bug Report.yml | 84 +++ .github/ISSUE_TEMPLATE/Feature Request.yml | 51 ++ .github/ISSUE_TEMPLATE/config.yml | 10 +- .github/ISSUE_TEMPLATE/feature_request.md | 27 - .github/ISSUE_TEMPLATE/report-a-bug.md | 44 -- .github/PULL_REQUEST_TEMPLATE.md | 50 +- .gitignore | 8 +- .semgrepignore | 2 + .shiprc | 12 +- .swiftlint.yml | 23 + .../contents.xcworkspacedata | 7 - CHANGELOG.md | 19 + CONTRIBUTING.md | 16 + Gemfile | 1 + Gemfile.lock | 57 +- LICENSE | 4 +- Package.swift | 25 +- README.md | 267 ++++++---- SimpleKeychain.podspec | 29 +- SimpleKeychain.xcodeproj/project.pbxproj | 349 +++++++----- .../xcschemes/SimpleKeychain-iOS.xcscheme | 2 +- ...xcscheme => SimpleKeychain-macOS.xcscheme} | 32 +- .../xcschemes/SimpleKeychain-tvOS.xcscheme | 24 +- .../xcschemes/SimpleKeychain-watchOS.xcscheme | 6 +- .../xcschemes/SimpleKeychainApp.xcscheme | 2 +- SimpleKeychain/A0SimpleKeychain+KeyPair.h | 105 ---- SimpleKeychain/A0SimpleKeychain+KeyPair.m | 133 ----- SimpleKeychain/A0SimpleKeychain.h | 366 ------------- SimpleKeychain/A0SimpleKeychain.m | 427 --------------- SimpleKeychain/Accessibility.swift | 48 ++ SimpleKeychain/Info.plist | 2 +- SimpleKeychain/SimpleKeychain.h | 34 -- SimpleKeychain/SimpleKeychain.swift | 320 +++++++++++ SimpleKeychain/SimpleKeychainError.swift | 169 ++++++ .../include/A0SimpleKeychain+KeyPair.h | 1 - SimpleKeychain/include/A0SimpleKeychain.h | 1 - SimpleKeychainApp/AppDelegate.swift | 8 - SimpleKeychainTests/AccessibilitySpec.swift | 74 +++ .../SimpleKeychainErrorSpec.swift | 234 +++++++++ SimpleKeychainTests/SimpleKeychainSpec.swift | 496 +++++++++++------- V1_MIGRATION_GUIDE.md | 198 +++++++ docs/css/documentation-topic.de084985.css | 9 + ...opic~topic~tutorials-overview.67b822e0.css | 9 + docs/css/index.47bc740e.css | 9 + docs/css/topic.2eb01958.css | 9 + docs/css/tutorials-overview.8754eb09.css | 9 + docs/data/documentation/simplekeychain.json | 1 + .../simplekeychain/accessibility.json | 1 + .../accessibility/!=(_:_:).json | 1 + .../accessibility/afterfirstunlock.json | 1 + .../afterfirstunlockthisdeviceonly.json | 1 + .../equatable-implementations.json | 1 + .../accessibility/hash(into:).json | 1 + .../accessibility/hashvalue.json | 1 + .../accessibility/init(rawvalue:).json | 1 + .../rawrepresentable-implementations.json | 1 + .../accessibility/rawvalue.json | 1 + .../whenpasscodesetthisdeviceonly.json | 1 + .../accessibility/whenunlocked.json | 1 + .../whenunlockedthisdeviceonly.json | 1 + .../simplekeychain/simplekeychain.json | 1 + .../simplekeychain/data(forkey:).json | 1 + .../simplekeychain/deleteall().json | 1 + .../simplekeychain/deleteitem(forkey:).json | 1 + .../simplekeychain/hasitem(forkey:).json | 1 + ...s:context:synchronizable:attributes:).json | 1 + .../simplekeychain/simplekeychain/keys().json | 1 + .../simplekeychain/set(_:forkey:)-618u7.json | 1 + .../simplekeychain/set(_:forkey:)-n98i.json | 1 + .../simplekeychain/string(forkey:).json | 1 + .../simplekeychain/simplekeychainerror.json | 1 + .../simplekeychainerror/!=(_:_:).json | 1 + .../simplekeychainerror/==(_:_:).json | 1 + .../simplekeychainerror/authfailed.json | 1 + .../simplekeychainerror/debugdescription.json | 1 + .../simplekeychainerror/decodefailed.json | 1 + .../simplekeychainerror/duplicateitem.json | 1 + .../equatable-implementations.json | 1 + .../error-implementations.json | 1 + .../errordescription-23ktd.json | 1 + .../errordescription-31jbz.json | 1 + .../simplekeychainerror/failurereason.json | 1 + .../simplekeychainerror/helpanchor.json | 1 + .../interactionnotallowed.json | 1 + .../invalidparameters.json | 1 + .../simplekeychainerror/itemnotavailable.json | 1 + .../simplekeychainerror/itemnotfound.json | 1 + .../localizeddescription-2xh78.json | 1 + .../localizeddescription-6p7yv.json | 1 + .../localizederror-implementations.json | 1 + .../operationnotimplemented.json | 1 + .../simplekeychainerror/other.json | 1 + .../recoverysuggestion.json | 1 + .../simplekeychainerror/status.json | 1 + .../simplekeychainerror/unknown.json | 1 + .../simplekeychainerror/usercanceled.json | 1 + .../simplekeychainerror/~=(_:_:)-41lv0.json | 1 + .../simplekeychainerror/~=(_:_:)-7uptb.json | 1 + .../accessibility/!=(_:_:)/index.html | 11 + .../accessibility/afterfirstunlock/index.html | 11 + .../afterfirstunlockthisdeviceonly/index.html | 11 + .../equatable-implementations/index.html | 11 + .../accessibility/hash(into:)/index.html | 11 + .../accessibility/hashvalue/index.html | 11 + .../simplekeychain/accessibility/index.html | 11 + .../accessibility/init(rawvalue:)/index.html | 11 + .../index.html | 11 + .../accessibility/rawvalue/index.html | 11 + .../whenpasscodesetthisdeviceonly/index.html | 11 + .../accessibility/whenunlocked/index.html | 11 + .../whenunlockedthisdeviceonly/index.html | 11 + docs/documentation/simplekeychain/index.html | 11 + .../simplekeychain/data(forkey:)/index.html | 11 + .../simplekeychain/deleteall()/index.html | 11 + .../deleteitem(forkey:)/index.html | 11 + .../hasitem(forkey:)/index.html | 11 + .../simplekeychain/simplekeychain/index.html | 11 + .../index.html | 11 + .../simplekeychain/keys()/index.html | 11 + .../set(_:forkey:)-618u7/index.html | 11 + .../set(_:forkey:)-n98i/index.html | 11 + .../simplekeychain/string(forkey:)/index.html | 11 + .../simplekeychainerror/!=(_:_:)/index.html | 11 + .../simplekeychainerror/==(_:_:)/index.html | 11 + .../simplekeychainerror/authfailed/index.html | 11 + .../debugdescription/index.html | 11 + .../decodefailed/index.html | 11 + .../duplicateitem/index.html | 11 + .../equatable-implementations/index.html | 11 + .../error-implementations/index.html | 11 + .../errordescription-23ktd/index.html | 11 + .../errordescription-31jbz/index.html | 11 + .../failurereason/index.html | 11 + .../simplekeychainerror/helpanchor/index.html | 11 + .../simplekeychainerror/index.html | 11 + .../interactionnotallowed/index.html | 11 + .../invalidparameters/index.html | 11 + .../itemnotavailable/index.html | 11 + .../itemnotfound/index.html | 11 + .../localizeddescription-2xh78/index.html | 11 + .../localizeddescription-6p7yv/index.html | 11 + .../localizederror-implementations/index.html | 11 + .../operationnotimplemented/index.html | 11 + .../simplekeychainerror/other/index.html | 11 + .../recoverysuggestion/index.html | 11 + .../simplekeychainerror/status/index.html | 11 + .../simplekeychainerror/unknown/index.html | 11 + .../usercanceled/index.html | 11 + .../~=(_:_:)-41lv0/index.html | 11 + .../~=(_:_:)-7uptb/index.html | 11 + docs/favicon.ico | Bin 0 -> 15406 bytes docs/favicon.svg | 11 + docs/img/added-icon.d6f7e47d.svg | 11 + docs/img/deprecated-icon.015b4f17.svg | 11 + docs/img/modified-icon.f496e73d.svg | 11 + docs/index.html | 10 + docs/index/availability.index | Bin 0 -> 201 bytes docs/index/data.mdb | Bin 0 -> 53248 bytes docs/index/navigator.index | Bin 0 -> 9885 bytes docs/js/chunk-2d0d3105.cd72cc8e.js | 10 + docs/js/chunk-vendors.00bf82af.js | 21 + docs/js/documentation-topic.f5df163e.js | 10 + ...topic~topic~tutorials-overview.06df3b46.js | 10 + docs/js/highlight-js-bash.1b52852f.js | 10 + docs/js/highlight-js-c.d1db3f17.js | 10 + docs/js/highlight-js-cpp.eaddddbe.js | 10 + docs/js/highlight-js-css.75eab1fe.js | 10 + .../highlight-js-custom-markdown.7cffc4b3.js | 10 + docs/js/highlight-js-custom-swift.52388c22.js | 10 + docs/js/highlight-js-diff.62d66733.js | 10 + docs/js/highlight-js-http.163e45b6.js | 10 + docs/js/highlight-js-java.8326d9d8.js | 10 + docs/js/highlight-js-javascript.acb8a8eb.js | 10 + docs/js/highlight-js-json.471128d2.js | 10 + docs/js/highlight-js-llvm.6100b125.js | 10 + docs/js/highlight-js-markdown.90077643.js | 10 + docs/js/highlight-js-objectivec.bcdf5156.js | 10 + docs/js/highlight-js-perl.757d7b6f.js | 10 + docs/js/highlight-js-php.cc8d6c27.js | 10 + docs/js/highlight-js-python.c214ed92.js | 10 + docs/js/highlight-js-ruby.f889d392.js | 10 + docs/js/highlight-js-scss.62ee18da.js | 10 + docs/js/highlight-js-shell.dd7f411f.js | 10 + docs/js/highlight-js-swift.84f3e88c.js | 10 + docs/js/highlight-js-xml.9c3688c7.js | 10 + docs/js/index.4dfda72c.js | 9 + docs/js/topic.d56fc284.js | 20 + docs/js/tutorials-overview.0dfedc70.js | 10 + docs/metadata.json | 1 + docs/theme-settings.json | 59 +++ fastlane/Fastfile | 39 +- fastlane/README.md | 54 +- tvOSTestHost/AppDelegate.swift | 8 - tvOSTestHost/ViewController.swift | 8 - 195 files changed, 3271 insertions(+), 1715 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/Bug Report.yml create mode 100644 .github/ISSUE_TEMPLATE/Feature Request.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 .github/ISSUE_TEMPLATE/report-a-bug.md create mode 100644 .semgrepignore create mode 100644 .swiftlint.yml delete mode 100644 .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata create mode 100644 CONTRIBUTING.md rename SimpleKeychain.xcodeproj/xcshareddata/xcschemes/{SimpleKeychain-OSX.xcscheme => SimpleKeychain-macOS.xcscheme} (89%) delete mode 100644 SimpleKeychain/A0SimpleKeychain+KeyPair.h delete mode 100644 SimpleKeychain/A0SimpleKeychain+KeyPair.m delete mode 100755 SimpleKeychain/A0SimpleKeychain.h delete mode 100755 SimpleKeychain/A0SimpleKeychain.m create mode 100644 SimpleKeychain/Accessibility.swift delete mode 100644 SimpleKeychain/SimpleKeychain.h create mode 100644 SimpleKeychain/SimpleKeychain.swift create mode 100644 SimpleKeychain/SimpleKeychainError.swift delete mode 120000 SimpleKeychain/include/A0SimpleKeychain+KeyPair.h delete mode 120000 SimpleKeychain/include/A0SimpleKeychain.h create mode 100644 SimpleKeychainTests/AccessibilitySpec.swift create mode 100644 SimpleKeychainTests/SimpleKeychainErrorSpec.swift create mode 100644 V1_MIGRATION_GUIDE.md create mode 100644 docs/css/documentation-topic.de084985.css create mode 100644 docs/css/documentation-topic~topic~tutorials-overview.67b822e0.css create mode 100644 docs/css/index.47bc740e.css create mode 100644 docs/css/topic.2eb01958.css create mode 100644 docs/css/tutorials-overview.8754eb09.css create mode 100644 docs/data/documentation/simplekeychain.json create mode 100644 docs/data/documentation/simplekeychain/accessibility.json create mode 100644 docs/data/documentation/simplekeychain/accessibility/!=(_:_:).json create mode 100644 docs/data/documentation/simplekeychain/accessibility/afterfirstunlock.json create mode 100644 docs/data/documentation/simplekeychain/accessibility/afterfirstunlockthisdeviceonly.json create mode 100644 docs/data/documentation/simplekeychain/accessibility/equatable-implementations.json create mode 100644 docs/data/documentation/simplekeychain/accessibility/hash(into:).json create mode 100644 docs/data/documentation/simplekeychain/accessibility/hashvalue.json create mode 100644 docs/data/documentation/simplekeychain/accessibility/init(rawvalue:).json create mode 100644 docs/data/documentation/simplekeychain/accessibility/rawrepresentable-implementations.json create mode 100644 docs/data/documentation/simplekeychain/accessibility/rawvalue.json create mode 100644 docs/data/documentation/simplekeychain/accessibility/whenpasscodesetthisdeviceonly.json create mode 100644 docs/data/documentation/simplekeychain/accessibility/whenunlocked.json create mode 100644 docs/data/documentation/simplekeychain/accessibility/whenunlockedthisdeviceonly.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychain.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychain/data(forkey:).json create mode 100644 docs/data/documentation/simplekeychain/simplekeychain/deleteall().json create mode 100644 docs/data/documentation/simplekeychain/simplekeychain/deleteitem(forkey:).json create mode 100644 docs/data/documentation/simplekeychain/simplekeychain/hasitem(forkey:).json create mode 100644 docs/data/documentation/simplekeychain/simplekeychain/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:).json create mode 100644 docs/data/documentation/simplekeychain/simplekeychain/keys().json create mode 100644 docs/data/documentation/simplekeychain/simplekeychain/set(_:forkey:)-618u7.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychain/set(_:forkey:)-n98i.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychain/string(forkey:).json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/!=(_:_:).json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/==(_:_:).json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/authfailed.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/debugdescription.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/decodefailed.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/duplicateitem.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/equatable-implementations.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/error-implementations.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/errordescription-23ktd.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/errordescription-31jbz.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/failurereason.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/helpanchor.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/interactionnotallowed.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/invalidparameters.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/itemnotavailable.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/itemnotfound.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/localizeddescription-2xh78.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/localizeddescription-6p7yv.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/localizederror-implementations.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/operationnotimplemented.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/other.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/recoverysuggestion.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/status.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/unknown.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/usercanceled.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-41lv0.json create mode 100644 docs/data/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-7uptb.json create mode 100644 docs/documentation/simplekeychain/accessibility/!=(_:_:)/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/afterfirstunlock/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/afterfirstunlockthisdeviceonly/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/equatable-implementations/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/hash(into:)/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/hashvalue/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/init(rawvalue:)/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/rawrepresentable-implementations/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/rawvalue/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/whenpasscodesetthisdeviceonly/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/whenunlocked/index.html create mode 100644 docs/documentation/simplekeychain/accessibility/whenunlockedthisdeviceonly/index.html create mode 100644 docs/documentation/simplekeychain/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychain/data(forkey:)/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychain/deleteall()/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychain/deleteitem(forkey:)/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychain/hasitem(forkey:)/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychain/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychain/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:)/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychain/keys()/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychain/set(_:forkey:)-618u7/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychain/set(_:forkey:)-n98i/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychain/string(forkey:)/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/!=(_:_:)/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/==(_:_:)/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/authfailed/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/debugdescription/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/decodefailed/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/duplicateitem/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/equatable-implementations/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/error-implementations/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/errordescription-23ktd/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/errordescription-31jbz/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/failurereason/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/helpanchor/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/interactionnotallowed/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/invalidparameters/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/itemnotavailable/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/itemnotfound/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/localizeddescription-2xh78/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/localizeddescription-6p7yv/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/localizederror-implementations/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/operationnotimplemented/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/other/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/recoverysuggestion/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/status/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/unknown/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/usercanceled/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-41lv0/index.html create mode 100644 docs/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-7uptb/index.html create mode 100644 docs/favicon.ico create mode 100644 docs/favicon.svg create mode 100644 docs/img/added-icon.d6f7e47d.svg create mode 100644 docs/img/deprecated-icon.015b4f17.svg create mode 100644 docs/img/modified-icon.f496e73d.svg create mode 100644 docs/index.html create mode 100644 docs/index/availability.index create mode 100755 docs/index/data.mdb create mode 100644 docs/index/navigator.index create mode 100644 docs/js/chunk-2d0d3105.cd72cc8e.js create mode 100644 docs/js/chunk-vendors.00bf82af.js create mode 100644 docs/js/documentation-topic.f5df163e.js create mode 100644 docs/js/documentation-topic~topic~tutorials-overview.06df3b46.js create mode 100644 docs/js/highlight-js-bash.1b52852f.js create mode 100644 docs/js/highlight-js-c.d1db3f17.js create mode 100644 docs/js/highlight-js-cpp.eaddddbe.js create mode 100644 docs/js/highlight-js-css.75eab1fe.js create mode 100644 docs/js/highlight-js-custom-markdown.7cffc4b3.js create mode 100644 docs/js/highlight-js-custom-swift.52388c22.js create mode 100644 docs/js/highlight-js-diff.62d66733.js create mode 100644 docs/js/highlight-js-http.163e45b6.js create mode 100644 docs/js/highlight-js-java.8326d9d8.js create mode 100644 docs/js/highlight-js-javascript.acb8a8eb.js create mode 100644 docs/js/highlight-js-json.471128d2.js create mode 100644 docs/js/highlight-js-llvm.6100b125.js create mode 100644 docs/js/highlight-js-markdown.90077643.js create mode 100644 docs/js/highlight-js-objectivec.bcdf5156.js create mode 100644 docs/js/highlight-js-perl.757d7b6f.js create mode 100644 docs/js/highlight-js-php.cc8d6c27.js create mode 100644 docs/js/highlight-js-python.c214ed92.js create mode 100644 docs/js/highlight-js-ruby.f889d392.js create mode 100644 docs/js/highlight-js-scss.62ee18da.js create mode 100644 docs/js/highlight-js-shell.dd7f411f.js create mode 100644 docs/js/highlight-js-swift.84f3e88c.js create mode 100644 docs/js/highlight-js-xml.9c3688c7.js create mode 100644 docs/js/index.4dfda72c.js create mode 100644 docs/js/topic.d56fc284.js create mode 100644 docs/js/tutorials-overview.0dfedc70.js create mode 100644 docs/metadata.json create mode 100644 docs/theme-settings.json diff --git a/.circleci/config.yml b/.circleci/config.yml index dd01dcf..37d7513 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,5 +1,8 @@ version: 2.1 +orbs: + codecov: codecov/codecov@3 + executors: macos-executor: parameters: @@ -59,8 +62,10 @@ commands: name: Run iOS tests command: bundle exec fastlane ios ci - run: - name: Upload coverage report - command: bash <(curl -s https://codecov.io/bash) -J '<< parameters.scheme >>' + name: Generate coverage report + command: bundle exec slather coverage -x --output-directory output --arch x86_64 --scheme << parameters.scheme >>-iOS << parameters.scheme >>.xcodeproj + - codecov/upload: + file: output/cobertura.xml - run: name: Run pod lib lint command: bundle exec fastlane ios pod_lint @@ -76,7 +81,7 @@ commands: - run: name: Run macOS tests command: | - xcodebuild test -scheme << parameters.scheme >>-OSX -destination 'platform=macOS,arch=x86_64' | xcpretty + xcodebuild test -scheme << parameters.scheme >>-macOS -destination 'platform=macOS,arch=x86_64' | xcpretty swift test test-tvos: parameters: @@ -126,8 +131,8 @@ workflows: build: jobs: - build-and-test: - scheme: "SimpleKeychain" + scheme: SimpleKeychain matrix: parameters: - platform: ["ios", "macos", "tvos"] - xcode: ["13.0.0", "12.5.1"] + platform: [ios, macos, tvos] + xcode: ["13.0.0"] diff --git a/.github/ISSUE_TEMPLATE/Bug Report.yml b/.github/ISSUE_TEMPLATE/Bug Report.yml new file mode 100644 index 0000000..598118c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/Bug Report.yml @@ -0,0 +1,84 @@ +name: 🐞 Report a bug +description: Have you found a bug or issue? Create a bug report for this library + +body: + - type: markdown + attributes: + value: | + **Please do not report security vulnerabilities here**. The [Responsible Disclosure Program](https://auth0.com/responsible-disclosure-policy) details the procedure for disclosing security issues. + + - type: checkboxes + id: checklist + attributes: + label: Checklist + options: + - label: I have looked into the [README](https://github.com/auth0/SimpleKeychain#readme) and have not found a suitable solution or answer. + required: true + - label: I have searched the [issues](https://github.com/auth0/SimpleKeychain/issues) and have not found a suitable solution or answer. + required: true + - label: I have searched the [Auth0 Community](https://community.auth0.com/tags/c/sdks/5/ios) forums and have not found a suitable solution or answer. + required: true + - label: I agree to the terms within the [Auth0 Code of Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md). + required: true + + - type: textarea + id: description + attributes: + label: Description + description: Provide a clear and concise description of the issue, including what you expected to happen. + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: Reproduction + description: Detail the steps taken to reproduce this error, and whether this issue can be reproduced consistently or if it is intermittent. + placeholder: | + 1. Step 1... + 2. Step 2... + 3. ... + validations: + required: true + + - type: input + id: environment-version + attributes: + label: SimpleKeychain version + validations: + required: true + + - type: dropdown + id: environment-platform + attributes: + label: Platform + multiple: true + options: + - iOS + - macOS + - tvOS + - watchOS + validations: + required: true + + - type: input + id: environment-platform-version + attributes: + label: Platform version(s) + validations: + required: true + + - type: input + id: environment-xcode-version + attributes: + label: Xcode version + validations: + required: true + + - type: input + id: environment-package-manager + attributes: + label: Package manager + placeholder: SPM, Cocoapods, Carthage, etc. + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/Feature Request.yml b/.github/ISSUE_TEMPLATE/Feature Request.yml new file mode 100644 index 0000000..4643796 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/Feature Request.yml @@ -0,0 +1,51 @@ +name: 🧩 Feature request +description: Suggest an idea or a feature for this library +labels: ["feature request"] + +body: + - type: checkboxes + id: checklist + attributes: + label: Checklist + options: + - label: I have looked into the [README](https://github.com/auth0/SimpleKeychain#readme) and have not found a suitable solution or answer. + required: true + - label: I have searched the [issues](https://github.com/auth0/SimpleKeychain/issues) and have not found a suitable solution or answer. + required: true + - label: I have searched the [Auth0 Community](https://community.auth0.com/tags/c/sdks/5/ios) forums and have not found a suitable solution or answer. + required: true + - label: I agree to the terms within the [Auth0 Code of Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md). + required: true + + - type: textarea + id: description + attributes: + label: Describe the problem you'd like to have solved + description: A clear and concise description of what the problem is. + placeholder: I'm always frustrated when... + validations: + required: true + + - type: textarea + id: ideal-solution + attributes: + label: Describe the ideal solution + description: A clear and concise description of what you want to happen. + validations: + required: true + + - type: textarea + id: alternatives-and-workarounds + attributes: + label: Alternatives and current workarounds + description: A clear and concise description of any alternatives you've considered or any workarounds that are currently in place. + validations: + required: false + + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 5441eee..d8058c9 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,11 @@ blank_issues_enabled: false contact_links: - - name: Auth0 Community + - name: 🤔 Help & Questions url: https://community.auth0.com/tags/c/sdks/5/ios - about: Discuss this library in the Auth0 Community forums + about: Ask general support or usage questions in the Auth0 Community forums + - name: 🚀 Usage + url: https://github.com/auth0/SimpleKeychain#usage + about: Check the Usage section of the README to get up to speed with SimpleKeychain + - name: 📖 API Documentation + url: https://auth0.github.io/SimpleKeychain/ + about: Check the public API documentation for in-depth overview of all the available features diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 06dceb2..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Feature request -about: Suggest an idea or a feature for this project -title: '' -labels: feature request -assignees: '' - ---- - -**Please do not report security vulnerabilities here**. The [Responsible Disclosure Program](https://auth0.com/responsible-disclosure-policy) details the procedure for disclosing security issues. - -**Thank you in advance for helping us to improve this library!** Your attention to detail here is greatly appreciated and will help us respond as quickly as possible. For general support or usage questions, use the [Auth0 Community](https://community.auth0.com/) or [Auth0 Support](https://support.auth0.com/). Finally, to avoid duplicates, please search existing Issues before submitting one here. - -By submitting an Issue to this repository, you agree to the terms within the [Auth0 Code of Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md). - -### Describe the problem you'd like to have solved - -> A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -### Describe the ideal solution - -> A clear and concise description of what you want to happen. -## Alternatives and current work-arounds - -> A clear and concise description of any alternatives you've considered or any work-arounds that are currently in place. -### Additional context - -> Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/report-a-bug.md b/.github/ISSUE_TEMPLATE/report-a-bug.md deleted file mode 100644 index 470a632..0000000 --- a/.github/ISSUE_TEMPLATE/report-a-bug.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -name: Report a bug -about: Have you found a bug or issue? Create a bug report for this SDK -title: '' -labels: bug report -assignees: '' ---- - -**Please do not report security vulnerabilities here**. The [Responsible Disclosure Program](https://auth0.com/responsible-disclosure-policy) details the procedure for disclosing security issues. - -**Thank you in advance for helping us to improve this library!** Please read through the template below and answer all relevant questions. Your additional work here is greatly appreciated and will help us respond as quickly as possible. For general support or usage questions, use the [Auth0 Community](https://community.auth0.com/) or [Auth0 Support](https://support.auth0.com/). Finally, to avoid duplicates, please search existing Issues before submitting one here. - -By submitting an Issue to this repository, you agree to the terms within the [Auth0 Code of Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md). - -### Describe the problem - -> Provide a clear and concise description of the issue - -### What was the expected behavior? - -> Tell us about the behavior you expected to see - -### Reproduction - -> Detail the steps taken to reproduce this error, and whether this issue can be reproduced consistently or if it is intermittent. -> **Note**: If clear, reproducible steps or the smallest sample app demonstrating misbehavior cannot be provided, we may not be able to follow up on this bug report. - -- Step 1.. -- Step 2.. -- ... - -> Where applicable, please include: -> -> - The smallest possible sample app that reproduces the undesirable behavior -> - Log information (redact/remove sensitive information) -> - Screenshots/GIFs - -### Environment - -> Please provide the following: - -- **Version of `SimpleKeychain` used:** -- **Version of iOS/macOS/tvOS/watchOS:** -- **Version of Xcode:** \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 57e9f7b..58fd21f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,34 +1,40 @@ -### Changes + -- Endpoints added, deleted, deprecated, or changed -- Classes and methods added, deleted, deprecated, or changed -- Screenshots of new or changed UI, if applicable -- A summary of usage if this is a new feature or change to a public API (this should also be added to relevant documentation once released) -- Any alternative designs or architectures considered +- [ ] All new/changed/fixed functionality is covered by tests (or N/A) +- [ ] I have added documentation for all new/changed functionality (or N/A) -### References + -Please include relevant links supporting this change such as a: +### 📋 Changes -- support ticket -- community post -- StackOverflow post -- support forum thread + -Please describe how this can be tested by reviewers. Be specific about anything not tested and reasons why. If helpful, please include manual testing steps as well. +### 📎 References -[ ] This change adds unit test coverage (or why not) + -[ ] I have read the [Auth0 general contribution guidelines](https://github.com/auth0/open-source-template/blob/master/GENERAL-CONTRIBUTING.md) +### 🎯 Testing -[ ] I have read the [Auth0 Code of Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md) - -[ ] All existing and new tests complete without errors + diff --git a/.gitignore b/.gitignore index 6030e25..20b373c 100644 --- a/.gitignore +++ b/.gitignore @@ -38,5 +38,9 @@ fastlane/report.xml fastlane/screenshots/ #SwiftPM -.build -Package.resolved \ No newline at end of file +.swiftpm/ +.build/ +Package.resolved + +# DocC +docs.archive/ diff --git a/.semgrepignore b/.semgrepignore new file mode 100644 index 0000000..29f6a3e --- /dev/null +++ b/.semgrepignore @@ -0,0 +1,2 @@ +docs/ +SimpleKeychainTests/ diff --git a/.shiprc b/.shiprc index df68324..5357528 100644 --- a/.shiprc +++ b/.shiprc @@ -1,8 +1,8 @@ { - "files": { - "SimpleKeychain/Info.plist": [], - "SimpleKeychain.podspec": [] - }, - "postbump": "bundle update", - "prefixVersion": false + "files": { + "SimpleKeychain/Info.plist": [], + "SimpleKeychain.podspec": [] + }, + "postbump": "bundle update && bundle exec fastlane ios build_docs", + "prefixVersion": false } diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 0000000..6a3d5ad --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,23 @@ +opt_in_rules: # some rules are only opt-in + - empty_count + # Find all the available rules by running: + # swiftlint rules +included: # paths to include during linting. `--path` is ignored if present. + - SimpleKeychain +excluded: # paths to ignore during linting. Takes precedence over `included`. + - Carthage + - Pods +# configurable rules can be customized from this configuration file +# rules that have both warning and error levels, can set just the warning level +# implicitly +line_length: 500 +# they can set both implicitly with an array +type_body_length: + - 300 # warning + - 400 # error +type_name: + min_length: 3 # only warning +identifier_name: + min_length: # only min_length + warning: 3 # only error +reporter: "xcode" # reporter type (xcode, json, csv, checkstyle, junit) diff --git a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/CHANGELOG.md b/CHANGELOG.md index dabd3d0..0a52eef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Change Log +## [1.0.0-fa.0](https://github.com/auth0/SimpleKeychain/tree/1.0.0-fa.0) (2022-06-24) +[Full Changelog](https://github.com/auth0/SimpleKeychain/compare/0.12.5...1.0.0-fa.0) + +**⚠️ BREAKING CHANGES** +- Drop support for old Swift versions [SDK-3444] [\#141](https://github.com/auth0/SimpleKeychain/pull/141) ([Widcket](https://github.com/Widcket)) +- Migrate to Swift [SDK-3428] [\#139](https://github.com/auth0/SimpleKeychain/pull/139) ([Widcket](https://github.com/Widcket)) +- Remove obsolete functionality [SDK-3419] [\#136](https://github.com/auth0/SimpleKeychain/pull/136) ([Widcket](https://github.com/Widcket)) +- Remove usage of deprecated properties [SDK-3414] [\#133](https://github.com/auth0/SimpleKeychain/pull/133) ([Widcket](https://github.com/Widcket)) +- Remove deprecated method [SDK-3413] [\#132](https://github.com/auth0/SimpleKeychain/pull/132) ([Widcket](https://github.com/Widcket)) +- Drop old platform versions [SDK-3387] [\#129](https://github.com/auth0/SimpleKeychain/pull/129) ([Widcket](https://github.com/Widcket)) + +**Added** +- Add support for custom attributes [\#153](https://github.com/auth0/SimpleKeychain/pull/153) ([Widcket](https://github.com/Widcket)) +- Add support for iCloud synchronization [SDK-3453] [\#146](https://github.com/auth0/SimpleKeychain/pull/146) ([Widcket](https://github.com/Widcket)) + +**Changed** +- Replace OSX with macOS in schemes and targets [\#154](https://github.com/auth0/SimpleKeychain/pull/154) ([Widcket](https://github.com/Widcket)) +- Apply recommended Xcode 14 settings [\#143](https://github.com/auth0/SimpleKeychain/pull/143) ([Widcket](https://github.com/Widcket)) + ## [0.12.5](https://github.com/auth0/SimpleKeychain/tree/0.12.5) (2021-09-30) [Full Changelog](https://github.com/auth0/SimpleKeychain/compare/0.12.4...0.12.5) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..86d17f3 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,16 @@ +# Contributing + +We appreciate feedback and contribution to SimpleKeychain! Before you get started, please read the following: + +- [Auth0's general contribution guidelines](https://github.com/auth0/open-source-template/blob/master/GENERAL-CONTRIBUTING.md) +- [Auth0's code of conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md) + +> ⚠️ Tests must be added for all new functionality. Existing tests must be updated for all changed/fixed functionality, where applicable. All tests must complete without errors. All new functionality must be documented as well. + +## Environment setup + +We use [Carthage](https://github.com/Carthage/Carthage) to manage SimpleKeychain's dependencies. + +1. Clone this repository and enter its root directory. +2. Run `carthage bootstrap --use-xcframeworks` to fetch and build the dependencies. +3. Open `SimpleKeychain.xcodeproj` in Xcode. diff --git a/Gemfile b/Gemfile index 32ad48b..3fb3ea3 100644 --- a/Gemfile +++ b/Gemfile @@ -2,6 +2,7 @@ source 'https://rubygems.org' gem 'fastlane' gem 'cocoapods' +gem 'slather' plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/Gemfile.lock b/Gemfile.lock index 415a7a4..2f025a7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,7 +3,7 @@ GEM specs: CFPropertyList (3.0.5) rexml - activesupport (6.1.5) + activesupport (6.1.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -17,8 +17,8 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.2.0) - aws-partitions (1.597.0) - aws-sdk-core (3.131.1) + aws-partitions (1.601.0) + aws-sdk-core (3.131.2) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.525.0) aws-sigv4 (~> 1.1) @@ -34,6 +34,7 @@ GEM aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) claide (1.1.0) + clamp (1.3.2) cocoapods (1.11.3) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) @@ -155,13 +156,15 @@ GEM xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) + fastlane-plugin-auth0_shipper (0.4.1) + semantic (~> 1.5) ffi (1.15.5) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.21.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-core (0.5.0) + google-apis-androidpublisher_v3 (0.22.0) + google-apis-core (>= 0.5, < 2.a) + google-apis-core (0.6.0) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) httpclient (>= 2.8.1, < 3.a) @@ -170,12 +173,12 @@ GEM retriable (>= 2.0, < 4.a) rexml webrick - google-apis-iamcredentials_v1 (0.10.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-playcustomapp_v1 (0.7.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-storage_v1 (0.14.0) - google-apis-core (>= 0.4, < 2.a) + google-apis-iamcredentials_v1 (0.12.0) + google-apis-core (>= 0.6, < 2.a) + google-apis-playcustomapp_v1 (0.9.0) + google-apis-core (>= 0.6, < 2.a) + google-apis-storage_v1 (0.15.0) + google-apis-core (>= 0.5, < 2.a) google-cloud-core (1.6.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) @@ -190,7 +193,7 @@ GEM google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - googleauth (1.1.3) + googleauth (1.2.0) faraday (>= 0.17.3, < 3.a) jwt (>= 1.4, < 3.0) memoist (~> 0.16) @@ -205,11 +208,12 @@ GEM concurrent-ruby (~> 1.0) jmespath (1.6.1) json (2.6.2) - jwt (2.4.0) + jwt (2.4.1) memoist (0.16.2) mini_magick (4.11.0) mini_mime (1.1.2) - minitest (5.15.0) + mini_portile2 (2.8.0) + minitest (5.16.1) molinillo (0.8.0) multi_json (1.15.0) multipart-post (2.0.0) @@ -217,10 +221,14 @@ GEM nap (1.1.0) naturally (2.2.1) netrc (0.11.0) + nokogiri (1.13.6) + mini_portile2 (~> 2.8.0) + racc (~> 1.4) optparse (0.1.1) os (1.1.4) plist (3.6.0) public_suffix (4.0.7) + racc (1.6.0) rake (13.0.6) representable (3.2.0) declarative (< 0.1.0) @@ -233,14 +241,21 @@ GEM ruby2_keywords (0.0.5) rubyzip (2.3.2) security (0.1.3) - signet (0.16.1) + semantic (1.6.1) + signet (0.17.0) addressable (~> 2.8) - faraday (>= 0.17.5, < 3.0) + faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) simctl (1.6.8) CFPropertyList naturally + slather (2.7.2) + CFPropertyList (>= 2.2, < 4) + activesupport + clamp (~> 1.3) + nokogiri (~> 1.12) + xcodeproj (~> 1.21) terminal-notifier (2.0.0) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) @@ -260,7 +275,7 @@ GEM unicode-display_width (1.8.0) webrick (1.7.0) word_wrap (1.0.0) - xcodeproj (1.21.0) + xcodeproj (1.22.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) @@ -271,7 +286,7 @@ GEM rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) - zeitwerk (2.5.4) + zeitwerk (2.6.0) PLATFORMS ruby @@ -279,6 +294,8 @@ PLATFORMS DEPENDENCIES cocoapods fastlane + fastlane-plugin-auth0_shipper + slather BUNDLED WITH - 2.1.4 + 2.2.28 diff --git a/LICENSE b/LICENSE index b511cd4..a77a330 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014 Auth0 LLC +Copyright (c) 2022 Auth0, Inc. (http://auth0.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/Package.swift b/Package.swift index e078a33..14bf5b9 100644 --- a/Package.swift +++ b/Package.swift @@ -1,22 +1,11 @@ -// swift-tools-version:5.2 -// The swift-tools-version declares the minimum version of Swift required to build this package. +// swift-tools-version:5.5 import PackageDescription let package = Package( name: "SimpleKeychain", - platforms: [ - .iOS(.v9), - .macOS(.v10_11), - .watchOS(.v2), - .tvOS(.v9) - ], - products: [ - .library( - name: "SimpleKeychain", - targets: ["SimpleKeychain"] - ) - ], + platforms: [.iOS(.v12), .macOS(.v10_15), .tvOS(.v12), .watchOS("6.2")], + products: [.library(name: "SimpleKeychain", targets: ["SimpleKeychain"])], dependencies: [ .package(name: "Quick", url: "https://github.com/Quick/Quick.git", .upToNextMajor(from: "5.0.0")), .package(name: "Nimble", url: "https://github.com/Quick/Nimble.git", .upToNextMajor(from: "10.0.0")) @@ -25,12 +14,12 @@ let package = Package( .target( name: "SimpleKeychain", dependencies: [], - path: "SimpleKeychain" - ), + path: "SimpleKeychain", + exclude: ["Info.plist"]), .testTarget( name: "SimpleKeychainTests", dependencies: ["SimpleKeychain", "Quick", "Nimble"], - path: "SimpleKeychainTests" - ) + path: "SimpleKeychainTests", + exclude: ["Info.plist"]) ] ) diff --git a/README.md b/README.md index b9ae984..9f1bbf8 100644 --- a/README.md +++ b/README.md @@ -1,171 +1,262 @@ # SimpleKeychain -[![CircleCI](https://img.shields.io/circleci/project/github/auth0/SimpleKeychain.svg?style=flat-square)](https://circleci.com/gh/auth0/SimpleKeychain/tree/master) -[![Coverage Status](https://img.shields.io/codecov/c/github/auth0/SimpleKeychain/master.svg?style=flat-square)](https://codecov.io/github/auth0/SimpleKeychain) -[![Version](https://img.shields.io/cocoapods/v/SimpleKeychain.svg?style=flat-square)](https://cocoapods.org/pods/SimpleKeychain) -[![License](https://img.shields.io/cocoapods/l/SimpleKeychain.svg?style=flat-square)](https://cocoapods.org/pods/SimpleKeychain) -[![Platform](https://img.shields.io/cocoapods/p/SimpleKeychain.svg?style=flat-square)](https://cocoapods.org/pods/SimpleKeychain) +![CircleCI](https://img.shields.io/circleci/project/github/auth0/SimpleKeychain.svg?style=flat) +![Version](https://img.shields.io/cocoapods/v/SimpleKeychain.svg?style=flat) +![Coverage Status](https://img.shields.io/codecov/c/github/auth0/SimpleKeychain/master.svg?style=flat) +![License](https://img.shields.io/github/license/Auth0/SimpleKeychain.svg?style=flat) -A wrapper to make it really easy to deal with iOS Keychain and store your user's credentials securely. +Easily store your user's credentials in the Keychain. Supports sharing credentials with an **access group** or through **iCloud**, and integrating **Touch ID / Face ID**. -> 📣 **The [First Availability](https://auth0.com/docs/troubleshoot/product-lifecycle/product-release-stages) release of SimpleKeychain 1.0.0 is out** -
It includes support for custom properties, synchronization of items through iCloud, and improved error handling. The GA release is planned for the third week of July. -
See [#157](https://github.com/auth0/SimpleKeychain/issues/157) for more information. +**Migrating from 0.x? Check the [Migration Guide](V1_MIGRATION_GUIDE.md).** -## Key Features - -- **Simple interface** to store user's credentials (e.g. JWT) in the Keychain. -- Store credentials under an **Access Group to enable Keychain Sharing**. -- **TouchID/FaceID integration** with a reusable `LAContext` instance. +--- ## Table of Contents -- [Requirements](#requirements) -- [Installation](#installation) -- [Usage](#usage) -- [Contributing](#contributing) -- [What is Auth0?](#what-is-auth0) -- [Create a Free Auth0 Account](#create-a-free-auth0-account) -- [Issue Reporting](#issue-reporting) -- [Author](#author) -- [License](#license) +- [**Requirements**](#requirements) +- [**Installation**](#installation) + + [Swift Package Manager](#swift-package-manager) + + [Cocoapods](#cocoapods) + + [Carthage](#carthage) +- [**Usage**](#usage) + + [Store a string or data item](#store-a-string-or-data-item) + + [Check if an item is stored](#check-if-an-item-is-stored) + + [Retrieve a string item](#retrieve-a-string-item) + + [Retrieve a data item](#retrieve-a-data-item) + + [Retrieve the keys of all stored items](#retrieve-the-keys-of-all-stored-items) + + [Remove an item](#remove-an-item) + + [Remove all items](#remove-all-items) + + [Error handling](#error-handling) +- [**Configuration**](#configuration) + + [Include additional attributes](#include-additional-attributes) + + [Share items with other apps and extensions using an access group](#share-items-with-other-apps-and-extensions-using-an-access-group) + + [Share items with other devices through iCloud synchronization](#share-items-with-other-devices-through-icloud-synchronization) + + [Restrict item accessibility based on device state](#restrict-item-accessibility-based-on-device-state) + + [Require Touch ID / Face ID to retrieve an item](#require-touch-id--face-id-to-retrieve-an-item) +- [**Support Policy**](#support-policy) +- [**Issue Reporting**](#issue-reporting) +- [**What is Auth0?**](#what-is-auth0) +- [**License**](#license) ## Requirements -- iOS 9.0+ / macOS 10.11+ / tvOS 9.0+ / watchOS 2.0+ -- Xcode 12.x / 13.x -- Swift 4.x / 5.x +- iOS 12.0+ / macOS 10.15+ / tvOS 12.0+ / watchOS 6.2+ +- Xcode 13.x / 14.x +- Swift 5.x + +> ⚠️ Check the [Support Policy](#support-policy) to learn when dropping Xcode, Swift, and platform versions will not be considered a **breaking change**. ## Installation -#### CocoaPods +### Swift Package Manager -If you are using [Cocoapods](https://cocoapods.org), add this line to your `Podfile`: +Open the following menu item in Xcode: -```ruby -pod "SimpleKeychain" +**File > Add Packages...** + +In the **Search or Enter Package URL** search box enter this URL: + +```text +https://github.com/auth0/SimpleKeychain ``` -Then run `pod install`. +Then, select the dependency rule and press **Add Package**. -> For more information on Cocoapods, check [their official documentation](https://guides.cocoapods.org/using/getting-started.html). +> 💡 For further reference on SPM, check its [official documentation](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app). -#### Carthage +### Cocoapods -If you are using [Carthage](https://github.com/Carthage/Carthage), add the following line to your `Cartfile`: +Add the following line to your `Podfile`: ```ruby -github "auth0/SimpleKeychain" +pod 'SimpleKeychain', '~> 1.0' ``` -Then run `carthage bootstrap --use-xcframeworks`. +Then, run `pod install`. -> For more information about Carthage usage, check [their official documentation](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). +> 💡 For further reference on Cocoapods, check their [official documentation](https://guides.cocoapods.org/using/getting-started.html). -#### SPM +### Carthage -If you are using the Swift Package Manager, open the following menu item in Xcode: +Add the following line to your `Cartfile`: -**File > Add Packages...** +```text +github "auth0/SimpleKeychain" ~> 1.0 +``` -In the **Search or Enter Package URL** search box enter this url: +Then, run `carthage bootstrap --use-xcframeworks`. +> 💡 For further reference on Carthage, check their [official documentation](https://github.com/Carthage/Carthage#getting-started). + +## Usage + +**See all the available features in the [API documentation ↗](https://auth0.github.io/SimpleKeychain/documentation/simplekeychain/)** + +```swift +let simpleKeychain = SimpleKeychain() ``` -https://github.com/auth0/SimpleKeychain.git + +You can specify a service name under which to save items. By default the bundle identifier of your app is used. + +```swift +let simpleKeychain = SimpleKeychain(service: "Auth0") ``` -Then select the dependency rule and press **Add Package**. +### Store a string or data item -> For further reference on SPM, check [its official documentation](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app). +```swift +try simpleKeychain.set(accessToken, forKey: "auth0-access-token") +``` -## Usage +### Check if an item is stored -### Save a JWT token or password +```swift +let isStored = try simpleKeychain.hasItem(forKey: "auth0-access-token") +``` + +### Retrieve a string item ```swift -let jwt = // user's JWT token obtained after login -A0SimpleKeychain().setString(jwt, forKey: "auth0-user-jwt") +let accessToken = try simpleKeychain.string(forKey: "auth0-access-token") ``` -### Obtain a JWT token or password +### Retrieve a data item ```swift -let jwt = A0SimpleKeychain().string(forKey: "auth0-user-jwt") +let accessToken = try simpleKeychain.data(forKey: "auth0-credentials") ``` -### Share a JWT Token with other apps using iOS Access Group +### Retrieve the keys of all stored items ```swift -let jwt = // user's JWT token obtained after login -let keychain = A0SimpleKeychain(service: "Auth0", accessGroup: "ABCDEFGH.com.mydomain.myaccessgroup") -keychain.setString(jwt, forKey: "auth0-user-jwt") +let keys = try simpleKeychain.keys() ``` -### Store and retrieve a JWT token using TouchID/FaceID +### Remove an item -Let's save the JWT first: +```swift +try simpleKeychain.deleteItem(forKey: "auth0-access-token") +``` + +### Remove all items ```swift -let jwt = // user's JWT token obtained after login -let keychain = A0SimpleKeychain() -keychain.useAccessControl = true -keychain.defaultAccessiblity = .whenPasscodeSetThisDeviceOnly -keychain.setTouchIDAuthenticationAllowableReuseDuration(5.0) -keychain.setString(jwt, forKey: "auth0-user-jwt") +try simpleKeychain.deleteAll() ``` -> If there is an existent value under the key `auth0-user-jwt` saved with AccessControl and `A0SimpleKeychainItemAccessibleWhenPasscodeSetThisDeviceOnly`, iOS will prompt the user to enter their passcode or fingerprint before updating the value. +### Error handling -Then let's obtain the value: +All methods will throw a `SimpleKeychainError` upon failure. ```swift -let message = NSLocalizedString("Please enter your passcode/fingerprint to login with awesome App!.", comment: "Prompt TouchID message") -let keychain = A0SimpleKeychain() -let jwt = keychain.string(forKey: "auth0-user-jwt", promptMessage: message) +catch let error as SimpleKeychainError { + print(error) +} ``` -### Remove a JWT token or password +## Configuration + +### Include additional attributes + +When creating the SimpleKeychain instance, specify additional attributes to be included in every query. ```swift -A0SimpleKeychain().deleteEntry(forKey: "auth0-user-jwt") +let attributes = [kSecUseDataProtectionKeychain as String: true] +let simpleKeychain = SimpleKeychain(attributes: attributes) ``` -### Remove all entries +### Share items with other apps and extensions using an access group -Useful for testing. +When creating the SimpleKeychain instance, specify the access group that the app may share entries with. ```swift -A0SimpleKeychain().clearAll() +let simpleKeychain = SimpleKeychain(accessGroup: "ABCDEFGH.com.example.myaccessgroup") ``` -## Contributing +> 💡 For more information on access group sharing, see [Sharing Access to Keychain Items Among a Collection of Apps](https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps). -Just clone the repo, run `carthage bootstrap` and you're ready to contribute! +### Share items with other devices through iCloud synchronization -## What is Auth0? +When creating the SimpleKeychain instance, set `synchronizable` to `true` to enable iCloud synchronization. -Auth0 helps you to: +```swift +let simpleKeychain = SimpleKeychain(sychronizable: true) +``` + +> 💡 For more information on iCloud synchronization, check the [kSecAttrSynchronizable documentation](https://developer.apple.com/documentation/security/ksecattrsynchronizable). + +### Restrict item accessibility based on device state + +When creating the SimpleKeychain instance, specify a custom accesibility value to be used. The default value is `.afterFirstUnlock`. + +```swift +let simpleKeychain = SimpleKeychain(accessibility: .whenUnlocked) +``` + +> 💡 For more information on accessibility, see [Restricting Keychain Item Accessibility](https://developer.apple.com/documentation/security/keychain_services/keychain_items/restricting_keychain_item_accessibility). + +### Require Touch ID / Face ID to retrieve an item + +When creating the SimpleKeychain instance, specify the access control flags to be used. You can also include an `LAContext` instance with your Touch ID / Face ID configuration. + +```swift +let context = LAContext() +context.touchIDAuthenticationAllowableReuseDuration = 10 +let simpleKeychain = SimpleKeychain(accessControlFlags: .biometryCurrentSet, + context: context) +``` + +> 💡 For more information on access control, see [Restricting Keychain Item Accessibility](https://developer.apple.com/documentation/security/keychain_services/keychain_items/restricting_keychain_item_accessibility). + +## Support Policy -* Add authentication with [multiple sources](https://auth0.com/docs/identityproviders), either social identity providers such as **Google, Facebook, Microsoft Account, LinkedIn, GitHub, Twitter, Box, Salesforce** (amongst others), or enterprise identity systems like **Windows Azure AD, Google Apps, Active Directory, ADFS, or any SAML Identity Provider**. -* Add authentication through more traditional **[username/password databases](https://auth0.com/docs/connections/database/custom-db)**. -* Add support for **[linking different user accounts](https://auth0.com/docs/link-accounts)** with the same user. -* Support for generating signed [JSON Web Tokens](https://auth0.com/docs/tokens/concepts/jwts) to call your APIs and **flow the user identity** securely. -* Analytics of how, when, and where users are logging in. -* Pull data from other sources and add it to the user profile through [JavaScript rules](https://auth0.com/docs/rules). +This Policy defines the extent of the support for Xcode, Swift, and platform (iOS, macOS, tvOS, and watchOS) versions in SimpleKeychain. -## Create a Free Auth0 Account +### Xcode -1. Go to [Auth0](https://auth0.com) and click **Sign Up**. -2. Use Google, GitHub, or Microsoft Account to login. +The only supported versions of Xcode are those that can be currently used to submit apps to the App Store. Once a Xcode version becomes unsupported, dropping it from SimpleKeychain **will not be considered a breaking change**, and will be done in a **minor** release. + +### Swift + +The minimum supported Swift minor version is the one released with the oldest-supported Xcode version. Once a Swift minor becomes unsupported, dropping it from SimpleKeychain **will not be considered a breaking change**, and will be done in a **minor** release. + +### Platforms + +Only the last 4 major platform versions are supported, starting from: + +- iOS **12** +- macOS **10.15** +- Catalyst **13** +- tvOS **12** +- watchOS **6.2** + +Once a platform version becomes unsupported, dropping it from SimpleKeychain **will not be considered a breaking change**, and will be done in a **minor** release. For example, iOS 12 will cease to be supported when iOS 16 gets released, and SimpleKeychain will be able to drop it in a minor release. + +In the case of macOS, the yearly named releases are considered a major platform version for the purposes of this Policy, regardless of the actual version numbers. ## Issue Reporting -If you have found a bug or to request a feature, please [raise an issue](https://github.com/auth0/simplekeychain/issues). Please do not report security vulnerabilities on the public GitHub issue tracker. The [Responsible Disclosure Program](https://auth0.com/responsible-disclosure-policy) details the procedure for disclosing security issues. +For general support or usage questions, use the [Auth0 Community](https://community.auth0.com/c/sdks/5) forums or raise a [support ticket](https://support.auth0.com/). Only [raise an issue](https://github.com/auth0/SimpleKeychain/issues) if you have found a bug or want to request a feature. -## Author +**Do not report security vulnerabilities on the public GitHub issue tracker.** The [Responsible Disclosure Program](https://auth0.com/responsible-disclosure-policy) details the procedure for disclosing security issues. -[Auth0](https://auth0.com) +## What is Auth0? + +Auth0 helps you to: + +- Add authentication with [multiple sources](https://auth0.com/docs/authenticate/identity-providers), either social identity providers such as **Google, Facebook, Microsoft Account, LinkedIn, GitHub, Twitter, Box, Salesforce** (amongst others), or enterprise identity systems like **Windows Azure AD, Google Apps, Active Directory, ADFS, or any SAML Identity Provider**. +- Add authentication through more traditional **[username/password databases](https://auth0.com/docs/authenticate/database-connections/custom-db)**. +- Add support for **[linking different user accounts](https://auth0.com/docs/manage-users/user-accounts/user-account-linking)** with the same user. +- Support for generating signed [JSON Web Tokens](https://auth0.com/docs/secure/tokens/json-web-tokens) to call your APIs and **flow the user identity** securely. +- Analytics of how, when, and where users are logging in. +- Pull data from other sources and add it to the user profile through [JavaScript Actions](https://auth0.com/docs/customize/actions). + +**Why Auth0?** Because you should save time, be happy, and focus on what really matters: building your product. ## License This project is licensed under the MIT license. See the [LICENSE](LICENSE) file for more info. + +--- + +[Go up ⤴](#table-of-contents) diff --git a/SimpleKeychain.podspec b/SimpleKeychain.podspec index 3eeea3f..9f99ea7 100644 --- a/SimpleKeychain.podspec +++ b/SimpleKeychain.podspec @@ -1,23 +1,22 @@ Pod::Spec.new do |s| - s.name = "SimpleKeychain" - s.version = '0.12.5' - s.summary = "A wrapper to make it really easy to deal with iOS Keychain and store your user's credentials securely." + s.name = 'SimpleKeychain' + s.version = '1.0.0-fa' + s.summary = 'A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS' s.description = <<-DESC - A simple way to store items in iOS Keychain, without the hassle of dealing with iOS Keychain API directly. - It has support for the new AccessControl for Keychain items added in iOS 8. + Easily store your user's credentials in the Keychain. + Supports sharing credentials with an access group or through iCloud, and integrating Touch ID / Face ID. DESC - s.homepage = "https://github.com/auth0/SimpleKeychain" + s.homepage = 'https://github.com/auth0/SimpleKeychain' s.license = 'MIT' - s.author = { "Auth0" => "support@auth0.com", "Hernan Zalazar" => "hernan@auth0.com" } - s.source = { :git => "https://github.com/auth0/SimpleKeychain.git", :tag => s.version.to_s } + s.author = { 'Auth0' => 'support@auth0.com', 'Rita Zerrizuela' => 'rita.zerrizuela@auth0.com' } + s.source = { :git => 'https://github.com/auth0/SimpleKeychain.git', :tag => s.version.to_s } s.social_media_url = 'https://twitter.com/auth0' - s.ios.deployment_target = '9.0' - s.osx.deployment_target = '10.11' - s.watchos.deployment_target = '2.0' - s.tvos.deployment_target = '9.0' - s.requires_arc = true - s.source_files = 'SimpleKeychain/*.{h,m}' - s.exclude_files = 'SimpleKeychain/include/*' + s.ios.deployment_target = '12.0' + s.osx.deployment_target = '10.15' + s.tvos.deployment_target = '12.0' + s.watchos.deployment_target = '6.2' + s.source_files = 'SimpleKeychain/*.swift' + s.swift_versions = ['5.5', '5.6'] end diff --git a/SimpleKeychain.xcodeproj/project.pbxproj b/SimpleKeychain.xcodeproj/project.pbxproj index b7ce396..4db238d 100644 --- a/SimpleKeychain.xcodeproj/project.pbxproj +++ b/SimpleKeychain.xcodeproj/project.pbxproj @@ -3,32 +3,37 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 5B0D47641EA63CD1009FF1BF /* SimpleKeychainSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F4D27651BCE995C003C27B3 /* SimpleKeychainSpec.swift */; }; - 5B108A9E1EA62F6100ED4DD2 /* A0SimpleKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEEB9DE1B7BF72C00501415 /* A0SimpleKeychain.m */; }; - 5B108A9F1EA62F6100ED4DD2 /* A0SimpleKeychain+KeyPair.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEEB9D81B7BF71800501415 /* A0SimpleKeychain+KeyPair.m */; }; - 5B108AA21EA62F6100ED4DD2 /* A0SimpleKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9DD1B7BF72C00501415 /* A0SimpleKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B108AA31EA62F6100ED4DD2 /* SimpleKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9A11B7BD70A00501415 /* SimpleKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B108AA41EA62F6100ED4DD2 /* A0SimpleKeychain+KeyPair.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9D71B7BF71800501415 /* A0SimpleKeychain+KeyPair.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B108AAD1EA637B100ED4DD2 /* A0SimpleKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEEB9DE1B7BF72C00501415 /* A0SimpleKeychain.m */; }; - 5B108AAE1EA637B100ED4DD2 /* A0SimpleKeychain+KeyPair.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEEB9D81B7BF71800501415 /* A0SimpleKeychain+KeyPair.m */; }; - 5B108AB11EA637B100ED4DD2 /* A0SimpleKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9DD1B7BF72C00501415 /* A0SimpleKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B108AB21EA637B100ED4DD2 /* SimpleKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9A11B7BD70A00501415 /* SimpleKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B108AB31EA637B100ED4DD2 /* A0SimpleKeychain+KeyPair.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9D71B7BF71800501415 /* A0SimpleKeychain+KeyPair.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5C29744623FF457A00BC18FA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C29744523FF457A00BC18FA /* AppDelegate.swift */; }; 5C29744823FF457A00BC18FA /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C29744723FF457A00BC18FA /* ViewController.swift */; }; 5C29744B23FF457A00BC18FA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5C29744923FF457A00BC18FA /* Main.storyboard */; }; 5C29744D23FF457E00BC18FA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5C29744C23FF457E00BC18FA /* Assets.xcassets */; }; 5C29745023FF457E00BC18FA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5C29744E23FF457E00BC18FA /* LaunchScreen.storyboard */; }; + 5C737B2B285A7C0200B4BB25 /* SimpleKeychainError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C737B2A285A7C0200B4BB25 /* SimpleKeychainError.swift */; }; + 5C737B2C285A7C0200B4BB25 /* SimpleKeychainError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C737B2A285A7C0200B4BB25 /* SimpleKeychainError.swift */; }; + 5C737B2D285A7C0200B4BB25 /* SimpleKeychainError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C737B2A285A7C0200B4BB25 /* SimpleKeychainError.swift */; }; + 5C737B2E285A7C0200B4BB25 /* SimpleKeychainError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C737B2A285A7C0200B4BB25 /* SimpleKeychainError.swift */; }; + 5C737B34285AB9B100B4BB25 /* SimpleKeychainErrorSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C737B2F285AB57A00B4BB25 /* SimpleKeychainErrorSpec.swift */; }; + 5C737B35285AB9B100B4BB25 /* SimpleKeychainErrorSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C737B2F285AB57A00B4BB25 /* SimpleKeychainErrorSpec.swift */; }; + 5C737B36285AB9B100B4BB25 /* SimpleKeychainErrorSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C737B2F285AB57A00B4BB25 /* SimpleKeychainErrorSpec.swift */; }; + 5C737B4F285ACC9F00B4BB25 /* Nimble.xcframework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5CE9CA1126FD42B0005A75FA /* Nimble.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5C737B50285ACC9F00B4BB25 /* Quick.xcframework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5CE9CA1026FD42B0005A75FA /* Quick.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5C840112285AFF7B00689C01 /* Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C840111285AFF7B00689C01 /* Accessibility.swift */; }; + 5C840113285AFF7B00689C01 /* Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C840111285AFF7B00689C01 /* Accessibility.swift */; }; + 5C840114285AFF7B00689C01 /* Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C840111285AFF7B00689C01 /* Accessibility.swift */; }; + 5C840115285AFF7B00689C01 /* Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C840111285AFF7B00689C01 /* Accessibility.swift */; }; 5CAF69A626FE57A90045266B /* SimpleKeychain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FEEB99C1B7BD70A00501415 /* SimpleKeychain.framework */; }; 5CAF69A726FE57A90045266B /* SimpleKeychain.framework in Copy Files */ = {isa = PBXBuildFile; fileRef = 5FEEB99C1B7BD70A00501415 /* SimpleKeychain.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5CDF405A2852D88C003840E6 /* SimpleKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDF40592852D88C003840E6 /* SimpleKeychain.swift */; }; + 5CDF405B2852D88C003840E6 /* SimpleKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDF40592852D88C003840E6 /* SimpleKeychain.swift */; }; + 5CDF405C2852D88C003840E6 /* SimpleKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDF40592852D88C003840E6 /* SimpleKeychain.swift */; }; + 5CDF405D2852D88C003840E6 /* SimpleKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDF40592852D88C003840E6 /* SimpleKeychain.swift */; }; 5CE9CA1226FD42B0005A75FA /* Quick.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE9CA1026FD42B0005A75FA /* Quick.xcframework */; }; 5CE9CA1326FD42B0005A75FA /* Nimble.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE9CA1126FD42B0005A75FA /* Nimble.xcframework */; }; - 5CE9CA1426FD42C0005A75FA /* Nimble.xcframework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5CE9CA1126FD42B0005A75FA /* Nimble.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 5CE9CA1526FD42C0005A75FA /* Quick.xcframework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5CE9CA1026FD42B0005A75FA /* Quick.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5CE9CA1626FD42F4005A75FA /* Nimble.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE9CA1126FD42B0005A75FA /* Nimble.xcframework */; }; 5CE9CA1726FD42F4005A75FA /* Quick.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE9CA1026FD42B0005A75FA /* Quick.xcframework */; }; 5CE9CA1826FD42FA005A75FA /* Nimble.xcframework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5CE9CA1126FD42B0005A75FA /* Nimble.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; @@ -38,21 +43,14 @@ 5CE9CA1C26FD4316005A75FA /* Nimble.xcframework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5CE9CA1126FD42B0005A75FA /* Nimble.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5CE9CA1D26FD4316005A75FA /* Quick.xcframework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5CE9CA1026FD42B0005A75FA /* Quick.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5CE9CA2126FD43F5005A75FA /* SimpleKeychain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B108AB81EA637B100ED4DD2 /* SimpleKeychain.framework */; }; + 5CEB577B285BCE7E00A32A80 /* AccessibilitySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CEB577A285BCE7E00A32A80 /* AccessibilitySpec.swift */; }; + 5CEB577C285BCE7E00A32A80 /* AccessibilitySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CEB577A285BCE7E00A32A80 /* AccessibilitySpec.swift */; }; + 5CEB577D285BCE7E00A32A80 /* AccessibilitySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CEB577A285BCE7E00A32A80 /* AccessibilitySpec.swift */; }; 5F4D27851BCE99E7003C27B3 /* SimpleKeychainSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F4D27651BCE995C003C27B3 /* SimpleKeychainSpec.swift */; }; 5F4D279F1BCEA6CE003C27B3 /* SimpleKeychainSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F4D27651BCE995C003C27B3 /* SimpleKeychainSpec.swift */; }; 5F7B45B11B7D0CE700D5AC89 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F7B45B01B7D0CE700D5AC89 /* AppDelegate.swift */; }; 5F7B45B81B7D0CE700D5AC89 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F7B45B71B7D0CE700D5AC89 /* Images.xcassets */; }; 5F7B45BB1B7D0CE700D5AC89 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F7B45B91B7D0CE700D5AC89 /* LaunchScreen.xib */; }; - 5FEEB9A21B7BD70A00501415 /* SimpleKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9A11B7BD70A00501415 /* SimpleKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FEEB9D61B7BD8E800501415 /* SimpleKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9A11B7BD70A00501415 /* SimpleKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FEEB9D91B7BF71800501415 /* A0SimpleKeychain+KeyPair.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9D71B7BF71800501415 /* A0SimpleKeychain+KeyPair.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FEEB9DA1B7BF71800501415 /* A0SimpleKeychain+KeyPair.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9D71B7BF71800501415 /* A0SimpleKeychain+KeyPair.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FEEB9DB1B7BF71800501415 /* A0SimpleKeychain+KeyPair.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEEB9D81B7BF71800501415 /* A0SimpleKeychain+KeyPair.m */; }; - 5FEEB9DC1B7BF71800501415 /* A0SimpleKeychain+KeyPair.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEEB9D81B7BF71800501415 /* A0SimpleKeychain+KeyPair.m */; }; - 5FEEB9DF1B7BF72C00501415 /* A0SimpleKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9DD1B7BF72C00501415 /* A0SimpleKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FEEB9E01B7BF72C00501415 /* A0SimpleKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEEB9DD1B7BF72C00501415 /* A0SimpleKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FEEB9E11B7BF72C00501415 /* A0SimpleKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEEB9DE1B7BF72C00501415 /* A0SimpleKeychain.m */; }; - 5FEEB9E21B7BF72C00501415 /* A0SimpleKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEEB9DE1B7BF72C00501415 /* A0SimpleKeychain.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -63,19 +61,19 @@ remoteGlobalIDString = 5B108AAB1EA637B100ED4DD2; remoteInfo = "SimpleKeychain-tvOS"; }; - 5B0D47691EA63D36009FF1BF /* PBXContainerItemProxy */ = { + 5C70AB9C24074300006E2EB2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 5FEEB9931B7BD70A00501415 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5F7B45AB1B7D0CE700D5AC89; - remoteInfo = SimpleKeychainApp; + remoteGlobalIDString = 5C29744223FF457A00BC18FA; + remoteInfo = tvOSTestHost; }; - 5C70AB9C24074300006E2EB2 /* PBXContainerItemProxy */ = { + 5C737B4C285ACC7D00B4BB25 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 5FEEB9931B7BD70A00501415 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5C29744223FF457A00BC18FA; - remoteInfo = tvOSTestHost; + remoteGlobalIDString = 5FEEB99B1B7BD70A00501415; + remoteInfo = "SimpleKeychain-iOS"; }; 5F4D27801BCE99E0003C27B3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -89,7 +87,7 @@ containerPortal = 5FEEB9931B7BD70A00501415 /* Project object */; proxyType = 1; remoteGlobalIDString = 5FEEB9BC1B7BD82800501415; - remoteInfo = "SimpleKeychain-OSX"; + remoteInfo = "SimpleKeychain-macOS"; }; /* End PBXContainerItemProxy section */ @@ -105,26 +103,26 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5CAF69A826FE57A90045266B /* Copy Files */ = { + 5C737B4E285ACC9200B4BB25 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 5CAF69A726FE57A90045266B /* SimpleKeychain.framework in Copy Files */, + 5C737B4F285ACC9F00B4BB25 /* Nimble.xcframework in CopyFiles */, + 5C737B50285ACC9F00B4BB25 /* Quick.xcframework in CopyFiles */, ); - name = "Copy Files"; runOnlyForDeploymentPostprocessing = 0; }; - 5F4D27881BCEA618003C27B3 /* CopyFiles */ = { + 5CAF69A826FE57A90045266B /* Copy Files */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 5CE9CA1426FD42C0005A75FA /* Nimble.xcframework in CopyFiles */, - 5CE9CA1526FD42C0005A75FA /* Quick.xcframework in CopyFiles */, + 5CAF69A726FE57A90045266B /* SimpleKeychain.framework in Copy Files */, ); + name = "Copy Files"; runOnlyForDeploymentPostprocessing = 0; }; 5F4D279C1BCEA6A7003C27B3 /* CopyFiles */ = { @@ -153,8 +151,13 @@ 5C29744F23FF457E00BC18FA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 5C29745123FF457E00BC18FA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 5C29745523FF458C00BC18FA /* tvOSTestHost.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = tvOSTestHost.entitlements; sourceTree = ""; }; + 5C737B2A285A7C0200B4BB25 /* SimpleKeychainError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleKeychainError.swift; sourceTree = ""; }; + 5C737B2F285AB57A00B4BB25 /* SimpleKeychainErrorSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleKeychainErrorSpec.swift; sourceTree = ""; }; + 5C840111285AFF7B00689C01 /* Accessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Accessibility.swift; sourceTree = ""; }; + 5CDF40592852D88C003840E6 /* SimpleKeychain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleKeychain.swift; sourceTree = ""; }; 5CE9CA1026FD42B0005A75FA /* Quick.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Quick.xcframework; path = Carthage/Build/Quick.xcframework; sourceTree = SOURCE_ROOT; }; 5CE9CA1126FD42B0005A75FA /* Nimble.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Nimble.xcframework; path = Carthage/Build/Nimble.xcframework; sourceTree = SOURCE_ROOT; }; + 5CEB577A285BCE7E00A32A80 /* AccessibilitySpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilitySpec.swift; sourceTree = ""; }; 5F4D27651BCE995C003C27B3 /* SimpleKeychainSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleKeychainSpec.swift; sourceTree = ""; }; 5F4D277B1BCE99DF003C27B3 /* SimpleKeychainTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimpleKeychainTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 5F4D278F1BCEA69E003C27B3 /* SimpleKeychainTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimpleKeychainTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -165,13 +168,8 @@ 5F7B45BA1B7D0CE700D5AC89 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 5FEEB99C1B7BD70A00501415 /* SimpleKeychain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SimpleKeychain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5FEEB9A01B7BD70A00501415 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5FEEB9A11B7BD70A00501415 /* SimpleKeychain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SimpleKeychain.h; sourceTree = ""; }; 5FEEB9AD1B7BD70B00501415 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 5FEEB9BD1B7BD82800501415 /* SimpleKeychain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SimpleKeychain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5FEEB9D71B7BF71800501415 /* A0SimpleKeychain+KeyPair.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "A0SimpleKeychain+KeyPair.h"; sourceTree = ""; }; - 5FEEB9D81B7BF71800501415 /* A0SimpleKeychain+KeyPair.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "A0SimpleKeychain+KeyPair.m"; sourceTree = ""; }; - 5FEEB9DD1B7BF72C00501415 /* A0SimpleKeychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = A0SimpleKeychain.h; sourceTree = ""; }; - 5FEEB9DE1B7BF72C00501415 /* A0SimpleKeychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A0SimpleKeychain.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -323,12 +321,10 @@ 5FEEB99E1B7BD70A00501415 /* SimpleKeychain */ = { isa = PBXGroup; children = ( - 5FEEB9DD1B7BF72C00501415 /* A0SimpleKeychain.h */, - 5FEEB9DE1B7BF72C00501415 /* A0SimpleKeychain.m */, - 5FEEB9D71B7BF71800501415 /* A0SimpleKeychain+KeyPair.h */, - 5FEEB9D81B7BF71800501415 /* A0SimpleKeychain+KeyPair.m */, - 5FEEB9A11B7BD70A00501415 /* SimpleKeychain.h */, 5FEEB99F1B7BD70A00501415 /* Supporting Files */, + 5CDF40592852D88C003840E6 /* SimpleKeychain.swift */, + 5C737B2A285A7C0200B4BB25 /* SimpleKeychainError.swift */, + 5C840111285AFF7B00689C01 /* Accessibility.swift */, ); path = SimpleKeychain; sourceTree = ""; @@ -347,6 +343,8 @@ children = ( 5FEEB9AC1B7BD70B00501415 /* Supporting Files */, 5F4D27651BCE995C003C27B3 /* SimpleKeychainSpec.swift */, + 5C737B2F285AB57A00B4BB25 /* SimpleKeychainErrorSpec.swift */, + 5CEB577A285BCE7E00A32A80 /* AccessibilitySpec.swift */, ); path = SimpleKeychainTests; sourceTree = ""; @@ -366,9 +364,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5B108AA21EA62F6100ED4DD2 /* A0SimpleKeychain.h in Headers */, - 5B108AA31EA62F6100ED4DD2 /* SimpleKeychain.h in Headers */, - 5B108AA41EA62F6100ED4DD2 /* A0SimpleKeychain+KeyPair.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -376,9 +371,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5B108AB11EA637B100ED4DD2 /* A0SimpleKeychain.h in Headers */, - 5B108AB21EA637B100ED4DD2 /* SimpleKeychain.h in Headers */, - 5B108AB31EA637B100ED4DD2 /* A0SimpleKeychain+KeyPair.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -386,9 +378,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5FEEB9DF1B7BF72C00501415 /* A0SimpleKeychain.h in Headers */, - 5FEEB9A21B7BD70A00501415 /* SimpleKeychain.h in Headers */, - 5FEEB9D91B7BF71800501415 /* A0SimpleKeychain+KeyPair.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -396,9 +385,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5FEEB9E01B7BF72C00501415 /* A0SimpleKeychain.h in Headers */, - 5FEEB9D61B7BD8E800501415 /* SimpleKeychain.h in Headers */, - 5FEEB9DA1B7BF71800501415 /* A0SimpleKeychain+KeyPair.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -418,7 +404,6 @@ ); dependencies = ( 5B0D47601EA63C74009FF1BF /* PBXTargetDependency */, - 5B0D476A1EA63D36009FF1BF /* PBXTargetDependency */, 5C70AB9D24074300006E2EB2 /* PBXTargetDependency */, ); name = "SimpleKeychainTests-tvOS"; @@ -434,13 +419,14 @@ 5B108AA01EA62F6100ED4DD2 /* Frameworks */, 5B108AA11EA62F6100ED4DD2 /* Headers */, 5B108AA51EA62F6100ED4DD2 /* Resources */, + 5C737B54285AD58F00B4BB25 /* SwiftLint */, ); buildRules = ( ); dependencies = ( ); name = "SimpleKeychain-watchOS"; - productName = "SimpleKeychain-OSX"; + productName = "SimpleKeychain-macOS"; productReference = 5B108AA91EA62F6100ED4DD2 /* SimpleKeychain.framework */; productType = "com.apple.product-type.framework"; }; @@ -452,6 +438,7 @@ 5B108AAF1EA637B100ED4DD2 /* Frameworks */, 5B108AB01EA637B100ED4DD2 /* Headers */, 5B108AB41EA637B100ED4DD2 /* Resources */, + 5C737B55285AD5A800B4BB25 /* SwiftLint */, ); buildRules = ( ); @@ -486,11 +473,12 @@ 5F4D27771BCE99DF003C27B3 /* Sources */, 5F4D27781BCE99DF003C27B3 /* Frameworks */, 5F4D27791BCE99DF003C27B3 /* Resources */, - 5F4D27881BCEA618003C27B3 /* CopyFiles */, + 5C737B4E285ACC9200B4BB25 /* CopyFiles */, ); buildRules = ( ); dependencies = ( + 5C737B4D285ACC7D00B4BB25 /* PBXTargetDependency */, 5F4D27811BCE99E0003C27B3 /* PBXTargetDependency */, ); name = "SimpleKeychainTests-iOS"; @@ -498,9 +486,9 @@ productReference = 5F4D277B1BCE99DF003C27B3 /* SimpleKeychainTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 5F4D278E1BCEA69E003C27B3 /* SimpleKeychainTests-OSX */ = { + 5F4D278E1BCEA69E003C27B3 /* SimpleKeychainTests-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 5F4D27971BCEA69E003C27B3 /* Build configuration list for PBXNativeTarget "SimpleKeychainTests-OSX" */; + buildConfigurationList = 5F4D27971BCEA69E003C27B3 /* Build configuration list for PBXNativeTarget "SimpleKeychainTests-macOS" */; buildPhases = ( 5F4D278B1BCEA69E003C27B3 /* Sources */, 5F4D278C1BCEA69E003C27B3 /* Frameworks */, @@ -512,8 +500,8 @@ dependencies = ( 5F4D27961BCEA69E003C27B3 /* PBXTargetDependency */, ); - name = "SimpleKeychainTests-OSX"; - productName = "SimpleKeychainTests-OSX"; + name = "SimpleKeychainTests-macOS"; + productName = "SimpleKeychainTests-macOS"; productReference = 5F4D278F1BCEA69E003C27B3 /* SimpleKeychainTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; @@ -543,6 +531,7 @@ 5FEEB9981B7BD70A00501415 /* Frameworks */, 5FEEB9991B7BD70A00501415 /* Headers */, 5FEEB99A1B7BD70A00501415 /* Resources */, + 5C737B51285AD54500B4BB25 /* SwiftLint */, ); buildRules = ( ); @@ -553,21 +542,22 @@ productReference = 5FEEB99C1B7BD70A00501415 /* SimpleKeychain.framework */; productType = "com.apple.product-type.framework"; }; - 5FEEB9BC1B7BD82800501415 /* SimpleKeychain-OSX */ = { + 5FEEB9BC1B7BD82800501415 /* SimpleKeychain-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 5FEEB9D01B7BD82800501415 /* Build configuration list for PBXNativeTarget "SimpleKeychain-OSX" */; + buildConfigurationList = 5FEEB9D01B7BD82800501415 /* Build configuration list for PBXNativeTarget "SimpleKeychain-macOS" */; buildPhases = ( 5FEEB9B81B7BD82800501415 /* Sources */, 5FEEB9B91B7BD82800501415 /* Frameworks */, 5FEEB9BA1B7BD82800501415 /* Headers */, 5FEEB9BB1B7BD82800501415 /* Resources */, + 5C737B52285AD56900B4BB25 /* SwiftLint */, ); buildRules = ( ); dependencies = ( ); - name = "SimpleKeychain-OSX"; - productName = "SimpleKeychain-OSX"; + name = "SimpleKeychain-macOS"; + productName = "SimpleKeychain-macOS"; productReference = 5FEEB9BD1B7BD82800501415 /* SimpleKeychain.framework */; productType = "com.apple.product-type.framework"; }; @@ -577,8 +567,8 @@ 5FEEB9931B7BD70A00501415 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1130; - LastUpgradeCheck = 1020; + LastSwiftUpdateCheck = 1340; + LastUpgradeCheck = 1400; ORGANIZATIONNAME = Auth0; TargetAttributes = { 5B0D47581EA63C74009FF1BF = { @@ -587,7 +577,11 @@ ProvisioningStyle = Manual; TestTargetID = 5C29744223FF457A00BC18FA; }; + 5B108A9C1EA62F6100ED4DD2 = { + LastSwiftMigration = 1340; + }; 5B108AAB1EA637B100ED4DD2 = { + LastSwiftMigration = 1340; ProvisioningStyle = Manual; }; 5C29744223FF457A00BC18FA = { @@ -610,9 +604,11 @@ }; 5FEEB99B1B7BD70A00501415 = { CreatedOnToolsVersion = 6.4; + LastSwiftMigration = 1340; }; 5FEEB9BC1B7BD82800501415 = { CreatedOnToolsVersion = 6.4; + LastSwiftMigration = 1340; }; }; }; @@ -630,13 +626,13 @@ projectRoot = ""; targets = ( 5FEEB99B1B7BD70A00501415 /* SimpleKeychain-iOS */, - 5FEEB9BC1B7BD82800501415 /* SimpleKeychain-OSX */, + 5FEEB9BC1B7BD82800501415 /* SimpleKeychain-macOS */, 5B108A9C1EA62F6100ED4DD2 /* SimpleKeychain-watchOS */, 5B108AAB1EA637B100ED4DD2 /* SimpleKeychain-tvOS */, 5F7B45AB1B7D0CE700D5AC89 /* SimpleKeychainApp */, 5C29744223FF457A00BC18FA /* tvOSTestHost */, 5F4D277A1BCE99DF003C27B3 /* SimpleKeychainTests-iOS */, - 5F4D278E1BCEA69E003C27B3 /* SimpleKeychainTests-OSX */, + 5F4D278E1BCEA69E003C27B3 /* SimpleKeychainTests-macOS */, 5B0D47581EA63C74009FF1BF /* SimpleKeychainTests-tvOS */, ); }; @@ -713,12 +709,93 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 5C737B51285AD54500B4BB25 /* SwiftLint */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = SwiftLint; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ \"${CONFIGURATION}\" = \"Debug\" ]] && [ -z ${CIRCLECI} ] && which swiftlint >/dev/null; then\nswiftlint\nfi\n"; + }; + 5C737B52285AD56900B4BB25 /* SwiftLint */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = SwiftLint; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ \"${CONFIGURATION}\" = \"Debug\" ]] && [ -z ${CIRCLECI} ] && which swiftlint >/dev/null; then\nswiftlint\nfi\n"; + }; + 5C737B54285AD58F00B4BB25 /* SwiftLint */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = SwiftLint; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ \"${CONFIGURATION}\" = \"Debug\" ]] && [ -z ${CIRCLECI} ] && which swiftlint >/dev/null; then\nswiftlint\nfi\n"; + }; + 5C737B55285AD5A800B4BB25 /* SwiftLint */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = SwiftLint; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ \"${CONFIGURATION}\" = \"Debug\" ]] && [ -z ${CIRCLECI} ] && which swiftlint >/dev/null; then\nswiftlint\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 5B0D47551EA63C74009FF1BF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 5B0D47641EA63CD1009FF1BF /* SimpleKeychainSpec.swift in Sources */, + 5CEB577D285BCE7E00A32A80 /* AccessibilitySpec.swift in Sources */, + 5C737B36285AB9B100B4BB25 /* SimpleKeychainErrorSpec.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -726,8 +803,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5B108A9E1EA62F6100ED4DD2 /* A0SimpleKeychain.m in Sources */, - 5B108A9F1EA62F6100ED4DD2 /* A0SimpleKeychain+KeyPair.m in Sources */, + 5C737B2D285A7C0200B4BB25 /* SimpleKeychainError.swift in Sources */, + 5C840114285AFF7B00689C01 /* Accessibility.swift in Sources */, + 5CDF405C2852D88C003840E6 /* SimpleKeychain.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -735,8 +813,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5B108AAD1EA637B100ED4DD2 /* A0SimpleKeychain.m in Sources */, - 5B108AAE1EA637B100ED4DD2 /* A0SimpleKeychain+KeyPair.m in Sources */, + 5C737B2E285A7C0200B4BB25 /* SimpleKeychainError.swift in Sources */, + 5C840115285AFF7B00689C01 /* Accessibility.swift in Sources */, + 5CDF405D2852D88C003840E6 /* SimpleKeychain.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -754,6 +833,8 @@ buildActionMask = 2147483647; files = ( 5F4D27851BCE99E7003C27B3 /* SimpleKeychainSpec.swift in Sources */, + 5CEB577B285BCE7E00A32A80 /* AccessibilitySpec.swift in Sources */, + 5C737B34285AB9B100B4BB25 /* SimpleKeychainErrorSpec.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -762,6 +843,8 @@ buildActionMask = 2147483647; files = ( 5F4D279F1BCEA6CE003C27B3 /* SimpleKeychainSpec.swift in Sources */, + 5CEB577C285BCE7E00A32A80 /* AccessibilitySpec.swift in Sources */, + 5C737B35285AB9B100B4BB25 /* SimpleKeychainErrorSpec.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -777,8 +860,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5FEEB9E11B7BF72C00501415 /* A0SimpleKeychain.m in Sources */, - 5FEEB9DB1B7BF71800501415 /* A0SimpleKeychain+KeyPair.m in Sources */, + 5C737B2B285A7C0200B4BB25 /* SimpleKeychainError.swift in Sources */, + 5C840112285AFF7B00689C01 /* Accessibility.swift in Sources */, + 5CDF405A2852D88C003840E6 /* SimpleKeychain.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -786,8 +870,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5FEEB9E21B7BF72C00501415 /* A0SimpleKeychain.m in Sources */, - 5FEEB9DC1B7BF71800501415 /* A0SimpleKeychain+KeyPair.m in Sources */, + 5C737B2C285A7C0200B4BB25 /* SimpleKeychainError.swift in Sources */, + 5C840113285AFF7B00689C01 /* Accessibility.swift in Sources */, + 5CDF405B2852D88C003840E6 /* SimpleKeychain.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -799,16 +884,16 @@ target = 5B108AAB1EA637B100ED4DD2 /* SimpleKeychain-tvOS */; targetProxy = 5B0D475F1EA63C74009FF1BF /* PBXContainerItemProxy */; }; - 5B0D476A1EA63D36009FF1BF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F7B45AB1B7D0CE700D5AC89 /* SimpleKeychainApp */; - targetProxy = 5B0D47691EA63D36009FF1BF /* PBXContainerItemProxy */; - }; 5C70AB9D24074300006E2EB2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5C29744223FF457A00BC18FA /* tvOSTestHost */; targetProxy = 5C70AB9C24074300006E2EB2 /* PBXContainerItemProxy */; }; + 5C737B4D285ACC7D00B4BB25 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5FEEB99B1B7BD70A00501415 /* SimpleKeychain-iOS */; + targetProxy = 5C737B4C285ACC7D00B4BB25 /* PBXContainerItemProxy */; + }; 5F4D27811BCE99E0003C27B3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5F7B45AB1B7D0CE700D5AC89 /* SimpleKeychainApp */; @@ -816,7 +901,7 @@ }; 5F4D27961BCEA69E003C27B3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 5FEEB9BC1B7BD82800501415 /* SimpleKeychain-OSX */; + target = 5FEEB9BC1B7BD82800501415 /* SimpleKeychain-macOS */; targetProxy = 5F4D27951BCEA69E003C27B3 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -852,6 +937,7 @@ 5B0D47621EA63C74009FF1BF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; @@ -872,13 +958,14 @@ SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/tvOSTestHost.app/tvOSTestHost"; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 12.0; }; name = Debug; }; 5B0D47631EA63C74009FF1BF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; @@ -896,7 +983,7 @@ SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/tvOSTestHost.app/tvOSTestHost"; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 12.0; }; name = Release; }; @@ -904,6 +991,7 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = dwarf; @@ -923,13 +1011,14 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = "com.auth0.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = SimpleKeychain; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 2.0; + WATCHOS_DEPLOYMENT_TARGET = 6.2; }; name = Debug; }; @@ -937,6 +1026,7 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; @@ -951,22 +1041,21 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = "com.auth0.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = SimpleKeychain; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 2.0; + WATCHOS_DEPLOYMENT_TARGET = 6.2; }; name = Release; }; 5B108AB61EA637B100ED4DD2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; @@ -984,17 +1073,18 @@ PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = appletvos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 12.0; }; name = Debug; }; 5B108AB71EA637B100ED4DD2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; @@ -1012,8 +1102,9 @@ PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = appletvos; SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 12.0; }; name = Release; }; @@ -1045,7 +1136,7 @@ SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 13.2; + TVOS_DEPLOYMENT_TARGET = 12.0; }; name = Debug; }; @@ -1073,7 +1164,7 @@ SDKROOT = appletvos; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 13.2; + TVOS_DEPLOYMENT_TARGET = 12.0; }; name = Release; }; @@ -1084,7 +1175,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; DEBUG_INFORMATION_FORMAT = dwarf; INFOPLIST_FILE = SimpleKeychainTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1104,7 +1195,7 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = SimpleKeychainTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1121,6 +1212,7 @@ isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; INFOPLIST_FILE = SimpleKeychainTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -1128,7 +1220,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_BUNDLE_IDENTIFIER = com.auth0.SimpleKeychainTests; PRODUCT_NAME = SimpleKeychainTests; SDKROOT = macosx; @@ -1141,13 +1233,14 @@ isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; INFOPLIST_FILE = SimpleKeychainTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_BUNDLE_IDENTIFIER = com.auth0.SimpleKeychainTests; PRODUCT_NAME = SimpleKeychainTests; SDKROOT = macosx; @@ -1158,6 +1251,7 @@ 5F7B45C91B7D0CE700D5AC89 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; DEVELOPMENT_TEAM = ""; @@ -1166,6 +1260,7 @@ "$(inherited)", ); INFOPLIST_FILE = SimpleKeychainApp/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1181,10 +1276,12 @@ 5F7B45CA1B7D0CE700D5AC89 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = SimpleKeychainApp/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1219,6 +1316,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1245,8 +1343,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -1280,6 +1378,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1299,8 +1398,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; @@ -1316,14 +1415,15 @@ 5FEEB9B31B7BD70B00501415 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = SimpleKeychain/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1332,20 +1432,23 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.auth0.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = SimpleKeychain; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; }; name = Debug; }; 5FEEB9B41B7BD70B00501415 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = SimpleKeychain/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1354,14 +1457,17 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.auth0.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = SimpleKeychain; SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; }; name = Release; }; 5FEEB9D11B7BD82800501415 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; @@ -1379,19 +1485,23 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_BUNDLE_IDENTIFIER = "com.auth0.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = SimpleKeychain; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; }; name = Debug; }; 5FEEB9D21B7BD82800501415 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -1404,11 +1514,12 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_BUNDLE_IDENTIFIER = "com.auth0.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = SimpleKeychain; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; }; name = Release; }; @@ -1460,7 +1571,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5F4D27971BCEA69E003C27B3 /* Build configuration list for PBXNativeTarget "SimpleKeychainTests-OSX" */ = { + 5F4D27971BCEA69E003C27B3 /* Build configuration list for PBXNativeTarget "SimpleKeychainTests-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 5F4D27981BCEA69E003C27B3 /* Debug */, @@ -1496,7 +1607,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5FEEB9D01B7BD82800501415 /* Build configuration list for PBXNativeTarget "SimpleKeychain-OSX" */ = { + 5FEEB9D01B7BD82800501415 /* Build configuration list for PBXNativeTarget "SimpleKeychain-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 5FEEB9D11B7BD82800501415 /* Debug */, diff --git a/SimpleKeychain.xcodeproj/xcshareddata/xcschemes/SimpleKeychain-iOS.xcscheme b/SimpleKeychain.xcodeproj/xcshareddata/xcschemes/SimpleKeychain-iOS.xcscheme index 14a7944..d4473e2 100644 --- a/SimpleKeychain.xcodeproj/xcshareddata/xcschemes/SimpleKeychain-iOS.xcscheme +++ b/SimpleKeychain.xcodeproj/xcshareddata/xcschemes/SimpleKeychain-iOS.xcscheme @@ -1,6 +1,6 @@ @@ -27,6 +27,15 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + + + + @@ -34,22 +43,11 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "5F4D278E1BCEA69E003C27B3" BuildableName = "SimpleKeychainTests.xctest" - BlueprintName = "SimpleKeychainTests-OSX" + BlueprintName = "SimpleKeychainTests-macOS" ReferencedContainer = "container:SimpleKeychain.xcodeproj"> - - - - - - - - diff --git a/SimpleKeychain.xcodeproj/xcshareddata/xcschemes/SimpleKeychain-tvOS.xcscheme b/SimpleKeychain.xcodeproj/xcshareddata/xcschemes/SimpleKeychain-tvOS.xcscheme index 7328033..c9d34fd 100644 --- a/SimpleKeychain.xcodeproj/xcshareddata/xcschemes/SimpleKeychain-tvOS.xcscheme +++ b/SimpleKeychain.xcodeproj/xcshareddata/xcschemes/SimpleKeychain-tvOS.xcscheme @@ -1,6 +1,6 @@ + + + + @@ -39,17 +48,6 @@ - - - - - - - - - - - - 0 && privateKeyTag.length > 0, @"Both key tags should be non-empty!"); - - NSMutableDictionary *pairAttr = [@{ - (__bridge id)kSecAttrKeyType: (__bridge id)kSecAttrKeyTypeRSA, - (__bridge id)kSecAttrKeySizeInBits: @(keyLength), - } mutableCopy]; - NSDictionary *privateAttr = @{ - (__bridge id)kSecAttrIsPermanent: @YES, - (__bridge id)kSecAttrApplicationTag: [privateKeyTag dataUsingEncoding:NSUTF8StringEncoding], - }; - NSDictionary *publicAttr = @{ - (__bridge id)kSecAttrIsPermanent: @YES, - (__bridge id)kSecAttrApplicationTag: [publicKeyTag dataUsingEncoding:NSUTF8StringEncoding], - }; - pairAttr[(__bridge id)kSecPrivateKeyAttrs] = privateAttr; - pairAttr[(__bridge id)kSecPublicKeyAttrs] = publicAttr; - - SecKeyRef publicKeyRef; - SecKeyRef privateKeyRef; - - OSStatus status = SecKeyGeneratePair((__bridge CFDictionaryRef)pairAttr, &publicKeyRef, &privateKeyRef); - - CFRelease(publicKeyRef); - CFRelease(privateKeyRef); - - return status == errSecSuccess; -} - -- (NSData *)dataForRSAKeyWithTag:(NSString *)keyTag { - NSAssert(keyTag.length > 0, @"key tag should be non-empty!"); - - NSDictionary *publicKeyQuery = @{ - (__bridge id)kSecClass: (__bridge id)kSecClassKey, - (__bridge id)kSecAttrApplicationTag: [keyTag dataUsingEncoding:NSUTF8StringEncoding], - (__bridge id)kSecAttrType: (__bridge id)kSecAttrKeyTypeRSA, - (__bridge id)kSecReturnData: @YES, - }; - - CFTypeRef dataRef; - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)publicKeyQuery, &dataRef); - - if (status != errSecSuccess) { - return nil; - } - - NSData *data = [NSData dataWithData:(__bridge NSData *)dataRef]; - if (dataRef) { - CFRelease(dataRef); - } - return data; -} - -- (BOOL)hasRSAKeyWithTag:(NSString *)keyTag { - NSAssert(keyTag.length > 0, @"key tag should be non-empty!"); - - NSDictionary *publicKeyQuery = @{ - (__bridge id)kSecClass: (__bridge id)kSecClassKey, - (__bridge id)kSecAttrApplicationTag: [keyTag dataUsingEncoding:NSUTF8StringEncoding], - (__bridge id)kSecAttrType: (__bridge id)kSecAttrKeyTypeRSA, - (__bridge id)kSecReturnData: @NO, - }; - - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)publicKeyQuery, NULL); - return status == errSecSuccess; -} - - -- (BOOL)deleteRSAKeyWithTag:(NSString *)keyTag { - NSAssert(keyTag.length > 0, @"key tag should be non-empty!"); - NSDictionary *deleteKeyQuery = @{ - (__bridge id)kSecClass: (__bridge id)kSecClassKey, - (__bridge id)kSecAttrApplicationTag: [keyTag dataUsingEncoding:NSUTF8StringEncoding], - (__bridge id)kSecAttrType: (__bridge id)kSecAttrKeyTypeRSA, - }; - - OSStatus status = SecItemDelete((__bridge CFDictionaryRef)deleteKeyQuery); - return status == errSecSuccess; -} - -- (SecKeyRef)keyRefOfRSAKeyWithTag:(NSString *)keyTag { - NSAssert(keyTag.length > 0, @"key tag should be non-empty!"); - NSDictionary *query = @{ - (__bridge id)kSecClass: (__bridge id)kSecClassKey, - (__bridge id)kSecAttrKeyType: (__bridge id)kSecAttrKeyTypeRSA, - (__bridge id)kSecReturnRef: @YES, - (__bridge id)kSecAttrApplicationTag: keyTag, - }; - SecKeyRef privateKeyRef = NULL; - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&privateKeyRef); - if (status != errSecSuccess) { - return NULL; - } - return privateKeyRef; -} - -@end - -@implementation A0SimpleKeychain (Deprecated) - -- (NSData *)publicRSAKeyDataForTag:(NSString *)keyTag { - return [self dataForRSAKeyWithTag:keyTag]; -} - -@end diff --git a/SimpleKeychain/A0SimpleKeychain.h b/SimpleKeychain/A0SimpleKeychain.h deleted file mode 100755 index 2434840..0000000 --- a/SimpleKeychain/A0SimpleKeychain.h +++ /dev/null @@ -1,366 +0,0 @@ -// A0SimpleKeychain.h -// -// Copyright (c) 2014 Auth0 (http://auth0.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#if __has_include("LocalAuthentication/LocalAuthentication.h") - -#import - -#endif - -///--------------------------------------------------- -/// @name Keychain Items Accessibility Values -///--------------------------------------------------- - -/** - * Enum with Kechain items accessibility types. It's a mirror of `kSecAttrAccessible` values. - */ -typedef NS_ENUM(NSInteger, A0SimpleKeychainItemAccessible) { - /** - * @see kSecAttrAccessibleWhenUnlocked - */ - A0SimpleKeychainItemAccessibleWhenUnlocked = 0, - /** - * @see kSecAttrAccessibleAfterFirstUnlock - */ - A0SimpleKeychainItemAccessibleAfterFirstUnlock, - /** - * @see kSecAttrAccessibleAlways - */ - A0SimpleKeychainItemAccessibleAlways, - /** - * @see kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly - */ - A0SimpleKeychainItemAccessibleWhenPasscodeSetThisDeviceOnly, - /** - * @see kSecAttrAccessibleWhenUnlockedThisDeviceOnly - */ - A0SimpleKeychainItemAccessibleWhenUnlockedThisDeviceOnly, - /** - * kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly - */ - A0SimpleKeychainItemAccessibleAfterFirstUnlockThisDeviceOnly, - /** - * @see kSecAttrAccessibleAlwaysThisDeviceOnly - */ - A0SimpleKeychainItemAccessibleAlwaysThisDeviceOnly -}; - -#define A0ErrorDomain @"com.auth0.simplekeychain" - -#define A0LocalAuthenticationCapable (TARGET_OS_IOS && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (TARGET_OS_OSX && __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_2) - - -/** - * Enum with keychain error codes. It's a mirror of the keychain error codes. - */ -typedef NS_ENUM(NSInteger, A0SimpleKeychainError) { - /** - * @see errSecSuccess - */ - A0SimpleKeychainErrorNoError = 0, - /** - * @see errSecUnimplemented - */ - A0SimpleKeychainErrorUnimplemented = -4, - /** - * @see errSecParam - */ - A0SimpleKeychainErrorWrongParameter = -50, - /** - * @see errSecAllocate - */ - A0SimpleKeychainErrorAllocation = -108, - /** - * @see errSecNotAvailable - */ - A0SimpleKeychainErrorNotAvailable = -25291, - /** - * @see errSecAuthFailed - */ - A0SimpleKeychainErrorAuthFailed = -25293, - /** - * @see errSecDuplicateItem - */ - A0SimpleKeychainErrorDuplicateItem = -25299, - /** - * @see errSecItemNotFound - */ - A0SimpleKeychainErrorItemNotFound = -25300, - /** - * @see errSecInteractionNotAllowed - */ - A0SimpleKeychainErrorInteractionNotAllowed = -25308, - /** - * @see errSecDecode - */ - A0SimpleKeychainErrorDecode = -26275 -}; - -NS_ASSUME_NONNULL_BEGIN - -/** - * A simple helper class to deal with storing and retrieving values from iOS Keychain. - * It has support for sharing keychain items using Access Group and also for iOS 8 fine grained accesibility over a specific Kyechain Item (Using Access Control). - * The support is only available for iOS 8+, otherwise it will default using the coarse grained accesibility field. - * When a `NSString` or `NSData` is stored using Access Control and the accesibility flag `A0SimpleKeychainItemAccessibleWhenPasscodeSetThisDeviceOnly`, iOS will prompt the user for it's passcode or pass a TouchID challenge (if available). - */ -@interface A0SimpleKeychain : NSObject - -/** - * Service name under all items are saved. Default value is Bundle Identifier. - */ -@property (readonly, nonatomic) NSString *service; - -/** - * Access Group for Keychain item sharing. If it's nil no keychain sharing is possible. Default value is nil. - */ -@property (readonly, nullable, nonatomic) NSString *accessGroup; - -/** - * What type of accessibility the items stored will have. All values are translated to `kSecAttrAccessible` constants. - * Default value is A0SimpleKeychainItemAccessibleAfterFirstUnlock. - * @see kSecAttrAccessible - */ -@property (assign, nonatomic) A0SimpleKeychainItemAccessible defaultAccessiblity; - -/** - * Tells A0SimpleKeychain to use `kSecAttrAccessControl` instead of `kSecAttrAccessible`. It will work only in iOS 8+, defaulting to `kSecAttrAccessible` on lower version. - * Default value is NO. - */ -@property (assign, nonatomic) BOOL useAccessControl; - - -/** -* LocalAuthenticationContext used to access items. Default value is a new LAContext object -*/ -#if A0LocalAuthenticationCapable -@property (readonly, nullable, nonatomic) LAContext *localAuthenticationContext; -#endif - -///--------------------------------------------------- -/// @name Initialization -///--------------------------------------------------- - -/** - * Initialise a `A0SimpleKeychain` with default values. - * - * @return an initialised instance - */ -- (instancetype)init; - -/** - * Initialise a `A0SimpleKeychain` with a given service. - * - * @param service name of the service to use to save items. - * - * @return an initialised instance. - */ -- (instancetype)initWithService:(NSString *)service; - -/** - * Initialise a `A0SimpleKeychain` with a given service and access group. - * - * @param service name of the service to use to save items. - * @param accessGroup name of the access group to share items. - * - * @return an initialised instance. - */ -- (instancetype)initWithService:(NSString *)service accessGroup:(nullable NSString *)accessGroup; - -/** - * The duration for which Touch ID authentication reuse is allowable. - * Maximun value is LATouchIDAuthenticationMaximumAllowableReuseDuration - */ -#if A0LocalAuthenticationCapable -- (void)setTouchIDAuthenticationAllowableReuseDuration:(NSTimeInterval) duration API_AVAILABLE(ios(8), macosx(10.12)) API_UNAVAILABLE(watchos, tvos); -#endif - -///--------------------------------------------------- -/// @name Store values -///--------------------------------------------------- - -/** - * Saves the NSString with the type `kSecClassGenericPassword` in the keychain. - * - * @param string value to save in the keychain - * @param key key for the keychain entry. - * - * @return if the value was saved it will return YES. Otherwise it'll return NO. - */ -- (BOOL)setString:(NSString *)string forKey:(NSString *)key; - -/** - * Saves the NSData with the type `kSecClassGenericPassword` in the keychain. - * - * @param data value to save in the keychain - * @param key key for the keychain entry. - * - * @return if the value was saved it will return YES. Otherwise it'll return NO. - */ -- (BOOL)setData:(NSData *)data forKey:(NSString *)key; - -/** - * Saves the NSString with the type `kSecClassGenericPassword` in the keychain. - * - * @param string value to save in the keychain - * @param key key for the keychain entry. - * @param message prompt message to display for TouchID/passcode prompt if neccesary - * - * @return if the value was saved it will return YES. Otherwise it'll return NO. - */ -- (BOOL)setString:(NSString *)string forKey:(NSString *)key promptMessage:(nullable NSString *)message; - -/** - * Saves the NSData with the type `kSecClassGenericPassword` in the keychain. - * - * @param data value to save in the keychain - * @param key key for the keychain entry. - * @param message prompt message to display for TouchID/passcode prompt if neccesary - * - * @return if the value was saved it will return YES. Otherwise it'll return NO. - */ -- (BOOL)setData:(NSData *)data forKey:(NSString *)key promptMessage:(nullable NSString *)message; - -///--------------------------------------------------- -/// @name Remove values -///--------------------------------------------------- - -/** - * Removes an entry from the Keychain using its key - * - * @param key the key of the entry to delete. - * - * @return If the entry was removed it will return YES. Otherwise it will return NO. - */ -- (BOOL)deleteEntryForKey:(NSString *)key; - -/** - * Remove all entries from the kechain with the service and access group values. - */ -- (void)clearAll; - -///--------------------------------------------------- -/// @name Obtain values -///--------------------------------------------------- - -/** - * Fetches a NSString from the keychain - * - * @param key the key of the value to fetch - * - * @return the value or nil if an error occurs. - */ -- (nullable NSString *)stringForKey:(NSString *)key; - -/** - * Fetches a NSData from the keychain - * - * @param key the key of the value to fetch - * - * @return the value or nil if an error occurs. - */ -- (nullable NSData *)dataForKey:(NSString *)key; - -/** - * Fetches a NSString from the keychain - * - * @param key the key of the value to fetch - * @param message prompt message to display for TouchID/passcode prompt if neccesary - * - * @return the value or nil if an error occurs. - */ -- (nullable NSString *)stringForKey:(NSString *)key promptMessage:(nullable NSString *)message; - -/** - * Fetches a NSData from the keychain - * - * @param key the key of the value to fetch - * @param message prompt message to display for TouchID/passcode prompt if neccesary - * - * @return the value or nil if an error occurs. - */ -- (nullable NSData *)dataForKey:(NSString *)key promptMessage:(nullable NSString *)message; - -/** - * Fetches a NSData from the keychain - * - * @param key the key of the value to fetch - * @param message prompt message to display for TouchID/passcode prompt if neccesary - * @param err Returns an error, if the item cannot be retrieved. F.e. item not found - * or user authentication failed in TouchId case. - * - * @return the value or nil if an error occurs. - */ -- (nullable NSData *)dataForKey:(NSString *)key promptMessage:(nullable NSString *)message error:(NSError **)err; - -/** - * Checks if a key has a value in the Keychain - * - * @param key the key to check if it has a value - * - * @return if the key has an associated value in the Keychain or not. - */ -- (BOOL)hasValueForKey:(NSString *)key; - - -/** - * Fetches an array of NSString containing all the keys used in the keychain - * - * @return a NSString array with all keys from the keychain. - */ -- (nonnull NSArray *)keys; - -///--------------------------------------------------- -/// @name Create helper methods -///--------------------------------------------------- - -/** - * Creates a new instance of `A0SimpleKeychain` - * - * @return a new instance - */ -+ (A0SimpleKeychain *)keychain; - -/** - * Creates a new instance of `A0SimpleKeychain` with a service name. - * - * @param service name of the service under all items will be stored. - * - * @return a new instance - */ -+ (A0SimpleKeychain *)keychainWithService:(NSString *)service; - -/** - * Creates a new instance of `A0SimpleKeychain` with a service name and access group - * - * @param service name of the service under all items will be stored. - * @param accessGroup name of the access group to share keychain items. - * - * @return a new instance - */ -+ (A0SimpleKeychain *)keychainWithService:(NSString *)service accessGroup:(NSString *)accessGroup; - -@end - -NS_ASSUME_NONNULL_END diff --git a/SimpleKeychain/A0SimpleKeychain.m b/SimpleKeychain/A0SimpleKeychain.m deleted file mode 100755 index 370a561..0000000 --- a/SimpleKeychain/A0SimpleKeychain.m +++ /dev/null @@ -1,427 +0,0 @@ -// A0SimpleKeychain.h -// -// Copyright (c) 2014 Auth0 (http://auth0.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "A0SimpleKeychain.h" - -@interface A0SimpleKeychain () - -@end - -@implementation A0SimpleKeychain - -- (instancetype)init { - NSString *service = [[NSBundle mainBundle] bundleIdentifier]; - return [self initWithService:service accessGroup:nil]; -} - -- (instancetype)initWithService:(NSString *)service { - return [self initWithService:service accessGroup:nil]; -} - -- (instancetype)initWithService:(NSString *)service accessGroup:(NSString *)accessGroup { - self = [super init]; - if (self) { - _service = service; - _accessGroup = accessGroup; - _defaultAccessiblity = A0SimpleKeychainItemAccessibleAfterFirstUnlock; - _useAccessControl = NO; - -// This does not apply to watchOS & tvOS -#if A0LocalAuthenticationCapable - _localAuthenticationContext = [LAContext new]; - _localAuthenticationContext.touchIDAuthenticationAllowableReuseDuration = 0; -#endif - } - return self; -} - -- (void)setTouchIDAuthenticationAllowableReuseDuration:(NSTimeInterval) duration { -// This does not apply to watchOS & tvOS -#if A0LocalAuthenticationCapable - if (duration <= 0) { - _localAuthenticationContext.touchIDAuthenticationAllowableReuseDuration = 0; - } else if (duration >= LATouchIDAuthenticationMaximumAllowableReuseDuration) { - _localAuthenticationContext.touchIDAuthenticationAllowableReuseDuration = LATouchIDAuthenticationMaximumAllowableReuseDuration; - } else { - _localAuthenticationContext.touchIDAuthenticationAllowableReuseDuration = duration; - } -#endif -} - -- (NSString *)stringForKey:(NSString *)key { - return [self stringForKey:key promptMessage:nil]; -} - -- (NSData *)dataForKey:(NSString *)key { - return [self dataForKey:key promptMessage:nil]; -} - -- (NSString *)stringForKey:(NSString *)key promptMessage:(NSString *)message { - NSData *data = [self dataForKey:key promptMessage:message]; - NSString *string = nil; - if (data) { - string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - } - return string; -} - -- (NSData *)dataForKey:(NSString *)key promptMessage:(NSString *)message { - return [self dataForKey:key promptMessage:message error:nil]; -} - -- (NSData *)dataForKey:(NSString *)key promptMessage:(NSString *)message error:(NSError**)err { - if (!key) { - return nil; - } - - NSDictionary *query = [self queryFetchOneByKey:key message:message]; - CFTypeRef data = nil; - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &data); - if (status != errSecSuccess) { - if(err != nil) { - *err = [NSError errorWithDomain:A0ErrorDomain code:status userInfo:@{NSLocalizedDescriptionKey : [self stringForSecStatus:status]}]; - } - return nil; - } - - NSData *dataFound = [NSData dataWithData:(__bridge NSData *)data]; - if (data) { - CFRelease(data); - } - - return dataFound; -} - -- (BOOL)hasValueForKey:(NSString *)key { - if (!key) { - return NO; - } - NSDictionary *query = [self queryFindByKey:key message:nil]; - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, NULL); - return status == errSecSuccess; -} - -- (nonnull NSArray *)keys { - NSMutableArray *keys = [NSMutableArray array]; - NSDictionary *query = [self queryFindAll]; - CFArrayRef result = nil; - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&result); - if (status == errSecSuccess) { - NSArray *items = [NSArray arrayWithArray:(__bridge NSArray *)result]; - CFBridgingRelease(result); - for (NSDictionary *item in items) { - id secAccount = item[(__bridge id)kSecAttrAccount]; - if ([secAccount isKindOfClass:[NSString class]]) { - NSString *key = (NSString *)secAccount; - [keys addObject:key]; - } - } - } - return keys; -} - -- (BOOL)setString:(NSString *)string forKey:(NSString *)key { - return [self setString:string forKey:key promptMessage:nil]; -} - -- (BOOL)setData:(NSData *)data forKey:(NSString *)key { - return [self setData:data forKey:key promptMessage:nil]; -} - -- (BOOL)setString:(NSString *)string forKey:(NSString *)key promptMessage:(NSString *)message { - NSData *data = key ? [string dataUsingEncoding:NSUTF8StringEncoding] : nil; - return [self setData:data forKey:key promptMessage:message]; -} - - -- (BOOL)setData:(NSData *)data forKey:(NSString *)key promptMessage:(NSString *)message { - if (!key) { - return NO; - } - - NSDictionary *query = [self queryFindByKey:key message:message]; - - // Touch ID case - if (self.useAccessControl && self.defaultAccessiblity == A0SimpleKeychainItemAccessibleWhenPasscodeSetThisDeviceOnly) { - // TouchId case. Doesn't support updating keychain items - // see Known Issues: https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-8.0/ - // We need to delete old and add a new item. This can fail - OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query); - if (status == errSecSuccess || status == errSecItemNotFound) { - NSDictionary *newQuery = [self queryNewKey:key value:data]; - OSStatus status = SecItemAdd((__bridge CFDictionaryRef)newQuery, NULL); - return status == errSecSuccess; - } - } - - // Normal case - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, NULL); - if (status == errSecSuccess) { - if (data) { - NSDictionary *updateQuery = [self queryUpdateValue:data message:message]; - status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)updateQuery); - return status == errSecSuccess; - } else { - OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query); - return status == errSecSuccess; - } - } else { - NSDictionary *newQuery = [self queryNewKey:key value:data]; - OSStatus status = SecItemAdd((__bridge CFDictionaryRef)newQuery, NULL); - return status == errSecSuccess; - } -} - -- (BOOL)deleteEntryForKey:(NSString *)key { - if (!key) { - return NO; - } - NSDictionary *deleteQuery = [self queryFindByKey:key message:nil]; - OSStatus status = SecItemDelete((__bridge CFDictionaryRef)deleteQuery); - return status == errSecSuccess; -} - -- (void)clearAll { -#if TARGET_OS_IPHONE - NSDictionary *query = [self queryFindAll]; - CFArrayRef result = nil; - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&result); - if (status == errSecSuccess || status == errSecItemNotFound) { - NSArray *items = [NSArray arrayWithArray:(__bridge NSArray *)result]; - CFBridgingRelease(result); - for (NSDictionary *item in items) { - NSMutableDictionary *queryDelete = [[NSMutableDictionary alloc] initWithDictionary:item]; - queryDelete[(__bridge id)kSecClass] = (__bridge id)kSecClassGenericPassword; - - OSStatus status = SecItemDelete((__bridge CFDictionaryRef)queryDelete); - if (status != errSecSuccess) { - break; - } - } - } -#else - NSMutableDictionary *queryDelete = [self baseQuery]; - queryDelete[(__bridge id)kSecClass] = (__bridge id)kSecClassGenericPassword; - queryDelete[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitAll; - OSStatus status = SecItemDelete((__bridge CFDictionaryRef)queryDelete); - if (status != errSecSuccess) { - return; - } -#endif -} - -+ (A0SimpleKeychain *)keychain { - return [[A0SimpleKeychain alloc] init]; -} - -+ (A0SimpleKeychain *)keychainWithService:(NSString *)service { - return [[A0SimpleKeychain alloc] initWithService:service]; -} - -+ (A0SimpleKeychain *)keychainWithService:(NSString *)service accessGroup:(NSString *)accessGroup { - return [[A0SimpleKeychain alloc] initWithService:service accessGroup:accessGroup]; -} - -#pragma mark - Utility methods - -- (CFTypeRef)accessibility { - CFTypeRef accessibility; - switch (self.defaultAccessiblity) { - case A0SimpleKeychainItemAccessibleAfterFirstUnlock: - accessibility = kSecAttrAccessibleAfterFirstUnlock; - break; - case A0SimpleKeychainItemAccessibleAlways: -#if TARGET_OS_MACCATALYST - accessibility = kSecAttrAccessibleAfterFirstUnlock; -#else - accessibility = kSecAttrAccessibleAlways; -#endif - break; - case A0SimpleKeychainItemAccessibleAfterFirstUnlockThisDeviceOnly: - accessibility = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly; - break; - case A0SimpleKeychainItemAccessibleAlwaysThisDeviceOnly: -#if TARGET_OS_MACCATALYST - accessibility = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly; -#else - accessibility = kSecAttrAccessibleAlwaysThisDeviceOnly; -#endif - break; -#if TARGET_OS_IPHONE - case A0SimpleKeychainItemAccessibleWhenPasscodeSetThisDeviceOnly: -#ifdef __IPHONE_8_0 - if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) { //iOS 8 - accessibility = kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly; - } else { //iOS <= 7.1 - accessibility = kSecAttrAccessibleWhenUnlockedThisDeviceOnly; - } -#else - accessibility = kSecAttrAccessibleWhenUnlockedThisDeviceOnly; -#endif -#endif - break; - case A0SimpleKeychainItemAccessibleWhenUnlocked: - accessibility = kSecAttrAccessibleWhenUnlocked; - break; - case A0SimpleKeychainItemAccessibleWhenUnlockedThisDeviceOnly: - accessibility = kSecAttrAccessibleWhenUnlockedThisDeviceOnly; - break; - default: - accessibility = kSecAttrAccessibleWhenUnlockedThisDeviceOnly; - } - return accessibility; -} - -- (NSString*)stringForSecStatus:(OSStatus)status { - - switch(status) { - case errSecSuccess: - return NSLocalizedStringFromTable(@"errSecSuccess: No error", @"SimpleKeychain", @"Possible error from keychain. "); - case errSecUnimplemented: - return NSLocalizedStringFromTable(@"errSecUnimplemented: Function or operation not implemented", @"SimpleKeychain", @"Possible error from keychain. "); - case errSecParam: - return NSLocalizedStringFromTable(@"errSecParam: One or more parameters passed to the function were not valid", @"SimpleKeychain", @"Possible error from keychain. "); - case errSecAllocate: - return NSLocalizedStringFromTable(@"errSecAllocate: Failed to allocate memory", @"SimpleKeychain", @"Possible error from keychain. "); - case errSecNotAvailable: - return NSLocalizedStringFromTable(@"errSecNotAvailable: No trust results are available", @"SimpleKeychain", @"Possible error from keychain. "); - case errSecAuthFailed: - return NSLocalizedStringFromTable(@"errSecAuthFailed: Authorization/Authentication failed", @"SimpleKeychain", @"Possible error from keychain. "); - case errSecDuplicateItem: - return NSLocalizedStringFromTable(@"errSecDuplicateItem: The item already exists", @"SimpleKeychain", @"Possible error from keychain. "); - case errSecItemNotFound: - return NSLocalizedStringFromTable(@"errSecItemNotFound: The item cannot be found", @"SimpleKeychain", @"Possible error from keychain. "); - case errSecInteractionNotAllowed: - return NSLocalizedStringFromTable(@"errSecInteractionNotAllowed: Interaction with the Security Server is not allowed", @"SimpleKeychain", @"Possible error from keychain. "); - case errSecDecode: - return NSLocalizedStringFromTable(@"errSecDecode: Unable to decode the provided data", @"SimpleKeychain", @"Possible error from keychain. "); - default: - return [NSString stringWithFormat:NSLocalizedStringFromTable(@"Unknown error code %d", @"SimpleKeychain", @"Possible error from keychain. "), (int)status]; - } -} - -#pragma mark - Query Dictionary Builder methods - -- (NSMutableDictionary *)baseQuery { - NSMutableDictionary *attributes = [@{ - (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword, - (__bridge id)kSecAttrService: self.service, - (__bridge id)kSecUseAuthenticationUI: (__bridge id)kSecUseAuthenticationUIAllow, - } mutableCopy]; - -#if !TARGET_IPHONE_SIMULATOR - if (self.accessGroup) { - attributes[(__bridge id)kSecAttrAccessGroup] = self.accessGroup; - } - -#if A0LocalAuthenticationCapable - attributes[(__bridge id)kSecUseAuthenticationContext] = self.localAuthenticationContext; -#endif -#endif - - return attributes; -} - -- (NSDictionary *)queryFindAll { - NSMutableDictionary *query = [self baseQuery]; - [query addEntriesFromDictionary:@{ - (__bridge id)kSecReturnAttributes: @YES, - (__bridge id)kSecMatchLimit: (__bridge id)kSecMatchLimitAll, - }]; - return query; -} - -- (NSDictionary *)queryFindByKey:(NSString *)key message:(NSString *)message { - NSAssert(key != nil, @"Must have a valid non-nil key"); - NSMutableDictionary *query = [self baseQuery]; - query[(__bridge id)kSecAttrAccount] = key; -#if TARGET_OS_IPHONE - if (message) { - query[(__bridge id)kSecUseOperationPrompt] = message; - } -#endif - return query; -} - -- (NSDictionary *)queryUpdateValue:(NSData *)data message:(NSString *)message { - if (message) { - return @{ -#if TARGET_OS_IPHONE - (__bridge id)kSecUseOperationPrompt: message, -#endif - (__bridge id)kSecValueData: data, - }; - } else { - return @{ - (__bridge id)kSecValueData: data, - }; - } -} - -- (NSDictionary *)queryNewKey:(NSString *)key value:(NSData *)value { - NSMutableDictionary *query = [self baseQuery]; - query[(__bridge id)kSecAttrAccount] = key; - query[(__bridge id)kSecValueData] = value; -#if TARGET_OS_IPHONE -#ifdef __IPHONE_8_0 - if (self.useAccessControl && floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) { - CFErrorRef error = NULL; - SecAccessControlRef accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, [self accessibility], kSecAccessControlUserPresence, &error); - if (error == NULL || accessControl != NULL) { - query[(__bridge id)kSecAttrAccessControl] = (__bridge_transfer id)accessControl; -#if defined __MAC_10_12 || defined __IPHONE_11_0 - // This also applies to watchOS & tvOS - if (@available(iOS 9, *)) { - query[(__bridge id)kSecUseAuthenticationUI] = (__bridge_transfer id)kSecUseAuthenticationUIFail; - } -#else - query[(__bridge id)kSecUseNoAuthenticationUI] = @YES; -#endif - } - } else { - query[(__bridge id)kSecAttrAccessible] = (__bridge id)[self accessibility]; - } -#else - query[(__bridge id)kSecAttrAccessible] = (__bridge id)[self accessibility]; -#endif -#endif - return query; -} - -- (NSDictionary *)queryFetchOneByKey:(NSString *)key message:(NSString *)message { - NSMutableDictionary *query = [self baseQuery]; - [query addEntriesFromDictionary:@{ - (__bridge id)kSecReturnData: @YES, - (__bridge id)kSecMatchLimit: (__bridge id)kSecMatchLimitOne, - (__bridge id)kSecAttrAccount: key, - }]; -#if TARGET_OS_IPHONE - if (self.useAccessControl) { - if (message && floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) { - query[(__bridge id)kSecUseOperationPrompt] = message; - } - } -#endif - - return query; -} -@end diff --git a/SimpleKeychain/Accessibility.swift b/SimpleKeychain/Accessibility.swift new file mode 100644 index 0000000..a104e1e --- /dev/null +++ b/SimpleKeychain/Accessibility.swift @@ -0,0 +1,48 @@ +import Security + +/// Represents the accessibility types of Keychain items. It's a mirror of `kSecAttrAccessible` values. +public enum Accessibility: RawRepresentable { + + /// The data in the Keychain item can be accessed only while the device is unlocked by the user. + /// See [kSecAttrAccessibleWhenUnlocked](https://developer.apple.com/documentation/security/ksecattraccessiblewhenunlocked). + case whenUnlocked + + /// The data in the Keychain can only be accessed when the device is unlocked. Only available if a passcode is set on the device. + /// See [kSecAttrAccessibleWhenUnlockedThisDeviceOnly](https://developer.apple.com/documentation/security/ksecattraccessiblewhenpasscodesetthisdeviceonly). + case whenUnlockedThisDeviceOnly + + /// The data in the Keychain item cannot be accessed after a restart until the device has been unlocked once by the user. + /// See [kSecAttrAccessibleAfterFirstUnlock](https://developer.apple.com/documentation/security/ksecattraccessibleafterfirstunlock). + case afterFirstUnlock + + /// The data in the Keychain item cannot be accessed after a restart until the device has been unlocked once by the user. + /// See [kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly](https://developer.apple.com/documentation/security/ksecattraccessibleafterfirstunlockthisdeviceonly). + case afterFirstUnlockThisDeviceOnly + + /// The data in the Keychain can only be accessed when the device is unlocked. Only available if a passcode is set on the device. + /// See [kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly](https://developer.apple.com/documentation/security/ksecattraccessiblewhenpasscodesetthisdeviceonly). + case whenPasscodeSetThisDeviceOnly + + /// Maps a `kSecAttrAccessible` value to an accessibility type. + public init(rawValue: CFString) { + switch rawValue { + case kSecAttrAccessibleWhenUnlocked: self = .whenUnlocked + case kSecAttrAccessibleWhenUnlockedThisDeviceOnly: self = .whenUnlockedThisDeviceOnly + case kSecAttrAccessibleAfterFirstUnlock: self = .afterFirstUnlock + case kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly: self = .afterFirstUnlockThisDeviceOnly + case kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly: self = .whenPasscodeSetThisDeviceOnly + default: self = .afterFirstUnlock + } + } + + /// The `kSecAttrAccessible` value of a given accessibility type. + public var rawValue: CFString { + switch self { + case .whenUnlocked: return kSecAttrAccessibleWhenUnlocked + case .whenUnlockedThisDeviceOnly: return kSecAttrAccessibleWhenUnlockedThisDeviceOnly + case .afterFirstUnlock: return kSecAttrAccessibleAfterFirstUnlock + case .afterFirstUnlockThisDeviceOnly: return kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly + case .whenPasscodeSetThisDeviceOnly: return kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly + } + } +} diff --git a/SimpleKeychain/Info.plist b/SimpleKeychain/Info.plist index 2ed8188..60b9c00 100644 --- a/SimpleKeychain/Info.plist +++ b/SimpleKeychain/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.12.5 + 1.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/SimpleKeychain/SimpleKeychain.h b/SimpleKeychain/SimpleKeychain.h deleted file mode 100644 index fa87222..0000000 --- a/SimpleKeychain/SimpleKeychain.h +++ /dev/null @@ -1,34 +0,0 @@ -// SimpleKeychain.h -// -// Copyright (c) 2014 Auth0 (http://auth0.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -//! Project version number for SimpleKeychain. -FOUNDATION_EXPORT double SimpleKeychainVersionNumber; - -//! Project version string for SimpleKeychain. -FOUNDATION_EXPORT const unsigned char SimpleKeychainVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - -#import -#import diff --git a/SimpleKeychain/SimpleKeychain.swift b/SimpleKeychain/SimpleKeychain.swift new file mode 100644 index 0000000..1847778 --- /dev/null +++ b/SimpleKeychain/SimpleKeychain.swift @@ -0,0 +1,320 @@ +import Foundation +import Security +#if canImport(LocalAuthentication) +import LocalAuthentication +#endif + +typealias RetrieveFunction = (_ query: CFDictionary, _ result: UnsafeMutablePointer?) -> OSStatus +typealias RemoveFunction = (_ query: CFDictionary) -> OSStatus + +/// A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS. +/// Supports sharing credentials with an **access group** or through **iCloud**, and integrating **Touch ID / Face ID**. +public struct SimpleKeychain { + let service: String + let accessGroup: String? + let accessibility: Accessibility + let accessControlFlags: SecAccessControlCreateFlags? + let isSynchronizable: Bool + let attributes: [String: Any] + + var retrieve: RetrieveFunction = SecItemCopyMatching + var remove: RemoveFunction = SecItemDelete + + #if canImport(LocalAuthentication) + let context: LAContext? + + /// Initializes a ``SimpleKeychain`` instance. + /// + /// - Parameter service: Name of the service under which to save items. Defaults to the bundle identifier. + /// - Parameter accessGroup: access group for sharing Keychain items. Defaults to `nil`. + /// - Parameter accessibility: ``Accessibility`` type the stored items will have. Defaults to ``Accessibility/afterFirstUnlock``. + /// - Parameter accessControlFlags: Access control conditions for `kSecAttrAccessControl`. Defaults to `nil`. + /// - Parameter context: `LAContext` used to access Keychain items. Defaults to `nil`. + /// - Parameter synchronizable: Whether the items should be synchronized through iCloud. Defaults to `false`. + /// - Parameter attributes: Additional attributes to include in every query. Defaults to an empty dictionary. + /// - Returns: A ``SimpleKeychain`` instance. + public init(service: String = Bundle.main.bundleIdentifier!, + accessGroup: String? = nil, + accessibility: Accessibility = .afterFirstUnlock, + accessControlFlags: SecAccessControlCreateFlags? = nil, + context: LAContext? = nil, + synchronizable: Bool = false, + attributes: [String: Any] = [:]) { + self.service = service + self.accessGroup = accessGroup + self.accessibility = accessibility + self.accessControlFlags = accessControlFlags + self.context = context + self.isSynchronizable = synchronizable + self.attributes = attributes + } + #else + /// Initializes a ``SimpleKeychain`` instance. + /// + /// - Parameter service: Name of the service under which to save items. Defaults to the bundle identifier. + /// - Parameter accessGroup: access group for sharing Keychain items. Defaults to `nil`. + /// - Parameter accessibility: ``Accessibility`` type the stored items will have. Defaults to ``Accessibility/afterFirstUnlock``. + /// - Parameter accessControlFlags: Access control conditions for `kSecAttrAccessControl`. Defaults to `nil`. + /// - Parameter synchronizable: Whether the items should be synchronized through iCloud. Defaults to `false`. + /// - Parameter attributes: Additional attributes to include in every query. Defaults to an empty dictionary. + /// - Returns: A ``SimpleKeychain`` instance. + public init(service: String = Bundle.main.bundleIdentifier!, + accessGroup: String? = nil, + accessibility: Accessibility = .afterFirstUnlock, + accessControlFlags: SecAccessControlCreateFlags? = nil, + synchronizable: Bool = false, + attributes: [String: Any] = [:]) { + self.service = service + self.accessGroup = accessGroup + self.accessibility = accessibility + self.accessControlFlags = accessControlFlags + self.isSynchronizable = synchronizable + self.attributes = attributes + } + #endif + + private func assertSuccess(forStatus status: OSStatus) throws { + if status != errSecSuccess { + throw SimpleKeychainError(code: SimpleKeychainError.Code(rawValue: status)) + } + } +} + +// MARK: - Retrieve items + +public extension SimpleKeychain { + /// Retrieves a `String` value from the Keychain. + /// + /// ```swift + /// let value = try simpleKeychain.string(forKey: "your_key") + /// ``` + /// + /// - Parameter key: Key of the Keychain item to retrieve. + /// - Returns: The `String` value. + /// - Throws: A ``SimpleKeychainError`` when the SimpleKeychain operation fails. + func string(forKey key: String) throws -> String { + let data = try self.data(forKey: key) + + guard let result = String(data: data, encoding: .utf8) else { + let message = "Unable to convert the retrieved item to a String value" + throw SimpleKeychainError(code: SimpleKeychainError.Code.unknown(message: message)) + } + + return result + } + + /// Retrieves a `Data` value from the Keychain. + /// + /// ```swift + /// let value = try simpleKeychain.data(forKey: "your_key") + /// ``` + /// + /// - Parameter key: Key of the Keychain item to retrieve. + /// - Returns: The `Data` value. + /// - Throws: A ``SimpleKeychainError`` when the SimpleKeychain operation fails. + func data(forKey key: String) throws -> Data { + let query = self.getOneQuery(byKey: key) + var result: AnyObject? + try assertSuccess(forStatus: retrieve(query as CFDictionary, &result)) + + guard let data = result as? Data else { + let message = "Unable to cast the retrieved item to a Data value" + throw SimpleKeychainError(code: SimpleKeychainError.Code.unknown(message: message)) + } + + return data + } +} + +// MARK: - Store items + +public extension SimpleKeychain { + /// Saves a `String` value with the type `kSecClassGenericPassword` in the Keychain. + /// + /// ```swift + /// try simpleKeychain.set("some string", forKey: "your_key") + /// ``` + /// + /// - Parameter string: Value to save in the Keychain. + /// - Parameter key: Key for the Keychain item. + /// - Throws: A ``SimpleKeychainError`` when the SimpleKeychain operation fails. + func set(_ string: String, forKey key: String) throws { + return try self.set(Data(string.utf8), forKey: key) + } + + /// Saves a `Data` value with the type `kSecClassGenericPassword` in the Keychain. + /// + /// ```swift + /// try simpleKeychain.set(data, forKey: "your_key") + /// ``` + /// + /// - Parameter data: Value to save in the Keychain. + /// - Parameter key: Key for the Keychain item. + /// - Throws: A ``SimpleKeychainError`` when the SimpleKeychain operation fails. + func set(_ data: Data, forKey key: String) throws { + let addItemQuery = self.setQuery(forKey: key, data: data) + let addStatus = SecItemAdd(addItemQuery as CFDictionary, nil) + + if addStatus == SimpleKeychainError.duplicateItem.status { + let updateQuery = self.baseQuery(withKey: key) + let updateAttributes: [String: Any] = [kSecValueData as String: data] + let updateStatus = SecItemUpdate(updateQuery as CFDictionary, updateAttributes as CFDictionary) + try assertSuccess(forStatus: updateStatus) + } else { + try assertSuccess(forStatus: addStatus) + } + } +} + +// MARK: - Delete items + +public extension SimpleKeychain { + /// Deletes an item from the Keychain. + /// + /// ```swift + /// try simpleKeychain.deleteItem(forKey: "your_key") + /// ``` + /// + /// - Parameter key: Key of the Keychain item to delete.. + /// - Throws: A ``SimpleKeychainError`` when the SimpleKeychain operation fails. + func deleteItem(forKey key: String) throws { + let query = self.baseQuery(withKey: key) + try assertSuccess(forStatus: remove(query as CFDictionary)) + } + + /// Deletes all items from the Keychain for the service and access group values. + /// + /// ```swift + /// try simpleKeychain.deleteAll() + /// ``` + /// + /// - Throws: A ``SimpleKeychainError`` when the SimpleKeychain operation fails. + func deleteAll() throws { + var query = self.baseQuery() + #if os(macOS) + query[kSecMatchLimit as String] = kSecMatchLimitAll + #endif + let status = remove(query as CFDictionary) + guard SimpleKeychainError.Code(rawValue: status) != SimpleKeychainError.Code.itemNotFound else { return } + try assertSuccess(forStatus: status) + } +} + +// MARK: - Convenience methods + +public extension SimpleKeychain { + /// Checks if an item is stored in the Keychain. + /// + /// ```swift + /// let isStored = try simpleKeychain.hasItem(forKey: "your_key") + /// ``` + /// + /// - Parameter key: Key of the Keychain item to check. + /// - Returns: Whether the item is stored in the Keychain or not. + /// - Throws: A ``SimpleKeychainError`` when the SimpleKeychain operation fails. + func hasItem(forKey key: String) throws -> Bool { + let query = self.baseQuery(withKey: key) + let status = retrieve(query as CFDictionary, nil) + + if status == SimpleKeychainError.itemNotFound.status { + return false + } + + try assertSuccess(forStatus: status) + return true + } + + /// Retrieves the keys of all the items stored in the Keychain for the service and access group values. + /// + /// ```swift + /// let keys = try simpleKeychain.keys() + /// ``` + /// + /// - Returns: A `String` array containing the keys. + /// - Throws: A ``SimpleKeychainError`` when the SimpleKeychain operation fails. + func keys() throws -> [String] { + let query = self.getAllQuery + var keys: [String] = [] + var result: AnyObject? + let status = retrieve(query as CFDictionary, &result) + guard SimpleKeychainError.Code(rawValue: status) != SimpleKeychainError.Code.itemNotFound else { return keys } + try assertSuccess(forStatus: status) + + guard let items = result as? [[String: Any]] else { + let message = "Unable to cast the retrieved items to a [[String: Any]] value" + throw SimpleKeychainError(code: SimpleKeychainError.Code.unknown(message: message)) + } + + for item in items { + if let key = item[kSecAttrAccount as String] as? String { + keys.append(key) + } + } + + return keys + } +} + +// MARK: - Queries + +extension SimpleKeychain { + func baseQuery(withKey key: String? = nil, data: Data? = nil) -> [String: Any] { + var query = self.attributes + query[kSecClass as String] = kSecClassGenericPassword + query[kSecAttrService as String] = self.service + + if let key = key { + query[kSecAttrAccount as String] = key + } + if let data = data { + query[kSecValueData as String] = data + } + if let accessGroup = self.accessGroup { + query[kSecAttrAccessGroup as String] = accessGroup + } + #if canImport(LocalAuthentication) + if let context = self.context { + query[kSecUseAuthenticationContext as String] = context + } + #endif + if self.isSynchronizable { + query[kSecAttrSynchronizable as String] = kCFBooleanTrue + } + + return query + } + + var getAllQuery: [String: Any] { + var query = self.baseQuery() + query[kSecReturnAttributes as String] = kCFBooleanTrue + query[kSecMatchLimit as String] = kSecMatchLimitAll + return query + } + + func getOneQuery(byKey key: String) -> [String: Any] { + var query = self.baseQuery(withKey: key) + query[kSecReturnData as String] = kCFBooleanTrue + query[kSecMatchLimit as String] = kSecMatchLimitOne + return query + } + + func setQuery(forKey key: String, data: Data) -> [String: Any] { + var query = self.baseQuery(withKey: key, data: data) + + if let flags = self.accessControlFlags, + let access = SecAccessControlCreateWithFlags(kCFAllocatorDefault, self.accessibility.rawValue, flags, nil) { + query[kSecAttrAccessControl as String] = access + } else { + #if os(macOS) + // See https://developer.apple.com/documentation/security/ksecattraccessible + if self.isSynchronizable || query[kSecUseDataProtectionKeychain as String] as? Bool == true { + query[kSecAttrAccessible as String] = self.accessibility.rawValue + } + #else + query[kSecAttrAccessible as String] = self.accessibility.rawValue + #endif + } + + return query + } +} diff --git a/SimpleKeychain/SimpleKeychainError.swift b/SimpleKeychain/SimpleKeychainError.swift new file mode 100644 index 0000000..3598a9c --- /dev/null +++ b/SimpleKeychain/SimpleKeychainError.swift @@ -0,0 +1,169 @@ +import Foundation + +/// Represents an error during a SimpleKeychain operation. +public struct SimpleKeychainError: LocalizedError, CustomDebugStringConvertible { + enum Code: RawRepresentable, Equatable { + case operationNotImplemented + case invalidParameters + case userCanceled + case itemNotAvailable + case authFailed + case duplicateItem + case itemNotFound + case interactionNotAllowed + case decodeFailed + case other(status: OSStatus) + case unknown(message: String) + + init(rawValue: OSStatus) { + switch rawValue { + case errSecUnimplemented: self = .operationNotImplemented + case errSecParam: self = .invalidParameters + case errSecUserCanceled: self = .userCanceled + case errSecNotAvailable: self = .itemNotAvailable + case errSecAuthFailed: self = .authFailed + case errSecDuplicateItem: self = .duplicateItem + case errSecItemNotFound: self = .itemNotFound + case errSecInteractionNotAllowed: self = .interactionNotAllowed + case errSecDecode: self = .decodeFailed + default: self = .other(status: rawValue) + } + } + + var rawValue: OSStatus { + switch self { + case .operationNotImplemented: return errSecUnimplemented + case .invalidParameters: return errSecParam + case .userCanceled: return errSecUserCanceled + case .itemNotAvailable: return errSecNotAvailable + case .authFailed: return errSecAuthFailed + case .duplicateItem: return errSecDuplicateItem + case .itemNotFound: return errSecItemNotFound + case .interactionNotAllowed: return errSecInteractionNotAllowed + case .decodeFailed: return errSecDecode + case let .other(status): return status + case .unknown: return errSecSuccess // This is not a Keychain error + } + } + } + + let code: Code + + init(code: Code) { + self.code = code + } + + /// The `OSStatus` of the Keychain operation. + public var status: OSStatus { + return self.code.rawValue + } + + /// Description of the error. + /// + /// - Important: You should avoid displaying the error description to the user, it's meant for **debugging** only. + public var localizedDescription: String { return self.debugDescription } + + /// Description of the error. + /// + /// - Important: You should avoid displaying the error description to the user, it's meant for **debugging** only. + public var errorDescription: String? { return self.debugDescription } + + /// Description of the error. + /// + /// - Important: You should avoid displaying the error description to the user, it's meant for **debugging** only. + public var debugDescription: String { + switch self.code { + case .operationNotImplemented: + return "errSecUnimplemented: A function or operation is not implemented." + case .invalidParameters: + return "errSecParam: One or more parameters passed to the function are not valid." + case .userCanceled: + return "errSecUserCanceled: User canceled the operation." + case .itemNotAvailable: + return "errSecNotAvailable: No trust results are available." + case .authFailed: + return "errSecAuthFailed: Authorization and/or authentication failed." + case .duplicateItem: + return "errSecDuplicateItem: The item already exists." + case .itemNotFound: + return "errSecItemNotFound: The item cannot be found." + case .interactionNotAllowed: + return "errSecInteractionNotAllowed: Interaction with the Security Server is not allowed." + case .decodeFailed: + return "errSecDecode: Unable to decode the provided data." + case .other: + return "Unspecified Keychain error: \(self.status)." + case let .unknown(message): + return "Unknown error: \(message)." + } + } + + // MARK: - Error Cases + + /// A function or operation is not implemented. + /// See [errSecUnimplemented](https://developer.apple.com/documentation/security/errsecunimplemented). + public static let operationNotImplemented: SimpleKeychainError = .init(code: .operationNotImplemented) + + /// One or more parameters passed to the function are not valid. + /// See [errSecParam](https://developer.apple.com/documentation/security/errsecparam). + public static let invalidParameters: SimpleKeychainError = .init(code: .invalidParameters) + + /// User canceled the operation. + /// See [errSecUserCanceled](https://developer.apple.com/documentation/security/errsecusercanceled). + public static let userCanceled: SimpleKeychainError = .init(code: .userCanceled) + + /// No trust results are available. + /// See [errSecNotAvailable](https://developer.apple.com/documentation/security/errsecnotavailable). + public static let itemNotAvailable: SimpleKeychainError = .init(code: .itemNotAvailable) + + /// Authorization and/or authentication failed. + /// See [errSecAuthFailed](https://developer.apple.com/documentation/security/errsecauthfailed). + public static let authFailed: SimpleKeychainError = .init(code: .authFailed) + + /// The item already exists. + /// See [errSecDuplicateItem](https://developer.apple.com/documentation/security/errsecduplicateitem). + public static let duplicateItem: SimpleKeychainError = .init(code: .duplicateItem) + + /// The item cannot be found. + /// See [errSecItemNotFound](https://developer.apple.com/documentation/security/errsecitemnotfound). + public static let itemNotFound: SimpleKeychainError = .init(code: .itemNotFound) + + /// Interaction with the Security Server is not allowed. + /// See [errSecInteractionNotAllowed](https://developer.apple.com/documentation/security/errsecinteractionnotallowed). + public static let interactionNotAllowed: SimpleKeychainError = .init(code: .interactionNotAllowed) + + /// Unable to decode the provided data. + /// See [errSecDecode](https://developer.apple.com/documentation/security/errsecdecode). + public static let decodeFailed: SimpleKeychainError = .init(code: .decodeFailed) + + /// Other Keychain error. + /// The `OSStatus` of the Keychain operation can be accessed via the ``status`` property. + public static let other: SimpleKeychainError = .init(code: .other(status: 0)) + + /// Unknown error. This is not a Keychain error but a SimpleKeychain failure. For example, being unable to cast the retrieved item. + public static let unknown: SimpleKeychainError = .init(code: .unknown(message: "")) +} + +// MARK: - Equatable + +extension SimpleKeychainError: Equatable { + /// Conformance to `Equatable`. + public static func == (lhs: SimpleKeychainError, rhs: SimpleKeychainError) -> Bool { + return lhs.code == rhs.code && lhs.localizedDescription == rhs.localizedDescription + } +} + +// MARK: - Pattern Matching Operator + +public extension SimpleKeychainError { + /// Matches `SimpleKeychainError` values in a switch statement. + static func ~= (lhs: SimpleKeychainError, rhs: SimpleKeychainError) -> Bool { + return lhs.code == rhs.code + } + + /// Matches `Error` values in a switch statement. + static func ~= (lhs: SimpleKeychainError, rhs: Error) -> Bool { + guard let rhs = rhs as? SimpleKeychainError else { return false } + return lhs.code == rhs.code + } +} diff --git a/SimpleKeychain/include/A0SimpleKeychain+KeyPair.h b/SimpleKeychain/include/A0SimpleKeychain+KeyPair.h deleted file mode 120000 index cd9382b..0000000 --- a/SimpleKeychain/include/A0SimpleKeychain+KeyPair.h +++ /dev/null @@ -1 +0,0 @@ -../A0SimpleKeychain+KeyPair.h \ No newline at end of file diff --git a/SimpleKeychain/include/A0SimpleKeychain.h b/SimpleKeychain/include/A0SimpleKeychain.h deleted file mode 120000 index 5b9ef07..0000000 --- a/SimpleKeychain/include/A0SimpleKeychain.h +++ /dev/null @@ -1 +0,0 @@ -../A0SimpleKeychain.h \ No newline at end of file diff --git a/SimpleKeychainApp/AppDelegate.swift b/SimpleKeychainApp/AppDelegate.swift index 310de28..2bbcc6e 100644 --- a/SimpleKeychainApp/AppDelegate.swift +++ b/SimpleKeychainApp/AppDelegate.swift @@ -1,11 +1,3 @@ -// -// AppDelegate.swift -// SimpleKeychainApp -// -// Created by Hernan Zalazar on 8/13/15. -// Copyright (c) 2015 Auth0. All rights reserved. -// - import UIKit import SimpleKeychain diff --git a/SimpleKeychainTests/AccessibilitySpec.swift b/SimpleKeychainTests/AccessibilitySpec.swift new file mode 100644 index 0000000..beead30 --- /dev/null +++ b/SimpleKeychainTests/AccessibilitySpec.swift @@ -0,0 +1,74 @@ +import Security +import Nimble +import Quick +import SimpleKeychain + +class AccessibilitySpec: QuickSpec { + override func spec() { + describe("raw representable") { + context("from raw value to case") { + it("should map kSecAttrAccessibleWhenUnlocked") { + let sut = Accessibility(rawValue: kSecAttrAccessibleWhenUnlocked) + expect(sut) == Accessibility.whenUnlocked + } + + it("should map kSecAttrAccessibleWhenUnlockedThisDeviceOnly") { + let sut = Accessibility(rawValue: kSecAttrAccessibleWhenUnlockedThisDeviceOnly) + expect(sut) == Accessibility.whenUnlockedThisDeviceOnly + } + + it("should map kSecAttrAccessibleAfterFirstUnlock") { + let sut = Accessibility(rawValue: kSecAttrAccessibleAfterFirstUnlock) + expect(sut) == Accessibility.afterFirstUnlock + } + + it("should map kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly") { + let sut = Accessibility(rawValue: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly) + expect(sut) == Accessibility.afterFirstUnlockThisDeviceOnly + } + + it("should map kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly") { + let sut = Accessibility(rawValue: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly) + expect(sut) == Accessibility.whenPasscodeSetThisDeviceOnly + } + + it("should map unknown values") { + let sut = Accessibility(rawValue: "foo" as CFString) + expect(sut) == Accessibility.afterFirstUnlock + } + } + + context("from case to raw value") { + it("should map whenUnlocked") { + let sut = Accessibility.whenUnlocked.rawValue as String + expect(sut) == (kSecAttrAccessibleWhenUnlocked as String) + } + + it("should map whenUnlockedThisDeviceOnly") { + let sut = Accessibility.whenUnlockedThisDeviceOnly.rawValue as String + expect(sut) == (kSecAttrAccessibleWhenUnlockedThisDeviceOnly as String) + } + + it("should map afterFirstUnlock") { + let sut = Accessibility.afterFirstUnlock.rawValue as String + expect(sut) == (kSecAttrAccessibleAfterFirstUnlock as String) + } + + it("should map afterFirstUnlockThisDeviceOnly") { + let sut = Accessibility.afterFirstUnlockThisDeviceOnly.rawValue as String + expect(sut) == (kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly as String) + } + + it("should map whenPasscodeSetThisDeviceOnly") { + let sut = Accessibility.whenPasscodeSetThisDeviceOnly.rawValue as String + expect(sut) == (kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly as String) + } + + it("should map whenPasscodeSetThisDeviceOnly") { + let sut = Accessibility.whenPasscodeSetThisDeviceOnly.rawValue as String + expect(sut) == (kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly as String) + } + } + } + } +} diff --git a/SimpleKeychainTests/SimpleKeychainErrorSpec.swift b/SimpleKeychainTests/SimpleKeychainErrorSpec.swift new file mode 100644 index 0000000..a3f0de0 --- /dev/null +++ b/SimpleKeychainTests/SimpleKeychainErrorSpec.swift @@ -0,0 +1,234 @@ +import Foundation +import Security +import Nimble +import Quick + +@testable import SimpleKeychain + +class SimpleKeychainErrorSpec: QuickSpec { + override func spec() { + describe("init") { + it("should initialize with code") { + let sut = SimpleKeychainError(code: .operationNotImplemented) + expect(sut.code) == SimpleKeychainError.Code.operationNotImplemented + } + } + + describe("operators") { + it("should be equal by code") { + let sut = SimpleKeychainError(code: .operationNotImplemented) + expect(sut) == SimpleKeychainError.operationNotImplemented + } + + it("should not be equal to an error with a different code") { + let sut = SimpleKeychainError(code: .operationNotImplemented) + expect(sut) != SimpleKeychainError.itemNotAvailable + } + + it("should not be equal to an error with a different description") { + let sut = SimpleKeychainError(code: .unknown(message: "foo")) + expect(sut) != SimpleKeychainError(code: .unknown(message: "bar")) + } + + it("should pattern match by code") { + let sut = SimpleKeychainError(code: .operationNotImplemented) + expect(sut ~= SimpleKeychainError.operationNotImplemented) == true + } + + it("should not pattern match by code with a different error") { + let sut = SimpleKeychainError(code: .operationNotImplemented) + expect(sut ~= SimpleKeychainError.itemNotAvailable) == false + } + + it("should pattern match by code with a generic error") { + let sut = SimpleKeychainError(code: .operationNotImplemented) + expect(sut ~= (SimpleKeychainError.operationNotImplemented) as Error) == true + } + + it("should not pattern match by code with a different generic error") { + let sut = SimpleKeychainError(code: .operationNotImplemented) + expect(sut ~= NSError()) == false + } + } + + describe("debug description") { + it("should match the localized message") { + let sut = SimpleKeychainError(code: .itemNotAvailable) + expect(sut.debugDescription) == SimpleKeychainError.itemNotAvailable.debugDescription + } + + it("should match the error description") { + let sut = SimpleKeychainError(code: .itemNotAvailable) + expect(sut.debugDescription) == SimpleKeychainError.itemNotAvailable.errorDescription + } + } + + describe("error message") { + it("should return message for operation not implemented") { + let message = "errSecUnimplemented: A function or operation is not implemented." + let sut = SimpleKeychainError(code: .operationNotImplemented) + expect(sut.localizedDescription) == message + } + + it("should return message for invalid parameters") { + let message = "errSecParam: One or more parameters passed to the function are not valid." + let sut = SimpleKeychainError(code: .invalidParameters) + expect(sut.localizedDescription) == message + } + + it("should return message for user canceled") { + let message = "errSecUserCanceled: User canceled the operation." + let sut = SimpleKeychainError(code: .userCanceled) + expect(sut.localizedDescription) == message + } + + it("should return message for item not available") { + let message = "errSecNotAvailable: No trust results are available." + let sut = SimpleKeychainError(code: .itemNotAvailable) + expect(sut.localizedDescription) == message + } + + it("should return message for auth failed") { + let message = "errSecAuthFailed: Authorization and/or authentication failed." + let sut = SimpleKeychainError(code: .authFailed) + expect(sut.localizedDescription) == message + } + + it("should return message for duplicate item") { + let message = "errSecDuplicateItem: The item already exists." + let sut = SimpleKeychainError(code: .duplicateItem) + expect(sut.localizedDescription) == message + } + + it("should return message for item not found") { + let message = "errSecItemNotFound: The item cannot be found." + let sut = SimpleKeychainError(code: .itemNotFound) + expect(sut.localizedDescription) == message + } + + it("should return message for interaction not allowed") { + let message = "errSecInteractionNotAllowed: Interaction with the Security Server is not allowed." + let sut = SimpleKeychainError(code: .interactionNotAllowed) + expect(sut.localizedDescription) == message + } + + it("should return message for decode failed") { + let message = "errSecDecode: Unable to decode the provided data." + let sut = SimpleKeychainError(code: .decodeFailed) + expect(sut.localizedDescription) == message + } + + it("should return message for other error") { + let status: OSStatus = 123 + let message = "Unspecified Keychain error: \(status)." + let sut = SimpleKeychainError(code: .other(status: status)) + expect(sut.localizedDescription) == message + } + + it("should return message for unknown error") { + let description = "foo" + let message = "Unknown error: \(description)." + let sut = SimpleKeychainError(code: .unknown(message: description)) + expect(sut.localizedDescription) == message + } + } + + describe("code") { + context("from status to code") { + it("should map errSecUnimplemented") { + let sut = SimpleKeychainError.Code(rawValue: errSecUnimplemented) + expect(sut) == SimpleKeychainError.operationNotImplemented.code + } + + it("should map errSecParam") { + let sut = SimpleKeychainError.Code(rawValue: errSecParam) + expect(sut) == SimpleKeychainError.invalidParameters.code + } + + it("should map errSecUserCanceled") { + let sut = SimpleKeychainError.Code(rawValue: errSecUserCanceled) + expect(sut) == SimpleKeychainError.userCanceled.code + } + + it("should map errSecNotAvailable") { + let sut = SimpleKeychainError.Code(rawValue: errSecNotAvailable) + expect(sut) == SimpleKeychainError.itemNotAvailable.code + } + + it("should map errSecAuthFailed") { + let sut = SimpleKeychainError.Code(rawValue: errSecAuthFailed) + expect(sut) == SimpleKeychainError.authFailed.code + } + + it("should map errSecDuplicateItem") { + let sut = SimpleKeychainError.Code(rawValue: errSecDuplicateItem) + expect(sut) == SimpleKeychainError.duplicateItem.code + } + + it("should map errSecItemNotFound") { + let sut = SimpleKeychainError.Code(rawValue: errSecItemNotFound) + expect(sut) == SimpleKeychainError.itemNotFound.code + } + + it("should map errSecInteractionNotAllowed") { + let sut = SimpleKeychainError.Code(rawValue: errSecInteractionNotAllowed) + expect(sut) == SimpleKeychainError.interactionNotAllowed.code + } + + it("should map errSecDecode") { + let sut = SimpleKeychainError.Code(rawValue: errSecDecode) + expect(sut) == SimpleKeychainError.decodeFailed.code + } + + it("should map other status value") { + let status: OSStatus = 1234 + let sut = SimpleKeychainError.Code(rawValue: status) + expect(sut.rawValue) == status + } + } + + context("from code to status") { + it("should map operationNotImplemented") { + expect(SimpleKeychainError.operationNotImplemented.code.rawValue) == errSecUnimplemented + } + + it("should map invalidParameters") { + expect(SimpleKeychainError.invalidParameters.code.rawValue) == errSecParam + } + + it("should map userCanceled") { + expect(SimpleKeychainError.userCanceled.code.rawValue) == errSecUserCanceled + } + + it("should map itemNotAvailable") { + expect(SimpleKeychainError.itemNotAvailable.code.rawValue) == errSecNotAvailable + } + + it("should map authFailed") { + expect(SimpleKeychainError.authFailed.code.rawValue) == errSecAuthFailed + } + + it("should map duplicateItem") { + expect(SimpleKeychainError.duplicateItem.code.rawValue) == errSecDuplicateItem + } + + it("should map interactionNotAllowed") { + expect(SimpleKeychainError.interactionNotAllowed.code.rawValue) == errSecInteractionNotAllowed + } + + it("should map decodeFailed") { + expect(SimpleKeychainError.decodeFailed.code.rawValue) == errSecDecode + } + + it("should map other") { + let status: OSStatus = 1234 + expect(SimpleKeychainError(code: .other(status: status)).status ) == status + } + + it("should map unknown") { + expect(SimpleKeychainError.unknown.code.rawValue) == errSecSuccess + } + } + } + } +} diff --git a/SimpleKeychainTests/SimpleKeychainSpec.swift b/SimpleKeychainTests/SimpleKeychainSpec.swift index 895d04e..d29c844 100644 --- a/SimpleKeychainTests/SimpleKeychainSpec.swift +++ b/SimpleKeychainTests/SimpleKeychainSpec.swift @@ -1,277 +1,405 @@ -// SimpleKeychainSpec.swift -// -// Copyright (c) 2014 Auth0 (http://auth0.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import SimpleKeychain +import LocalAuthentication import Nimble import Quick +@testable import SimpleKeychain + let PublicKeyTag = "public" let PrivateKeyTag = "private" -let kKeychainService = "com.auth0.simplekeychain.tests" +let KeychainService = "com.auth0.simplekeychain.tests" -class A0SimpleKeychainSpec: QuickSpec { +class SimpleKeychainSpec: QuickSpec { override func spec() { - describe("A0SimpleKeychain") { + describe("SimpleKeychain") { + var sut: SimpleKeychain! - var keychain: A0SimpleKeychain! + afterEach { + try? sut.deleteAll() + } describe("initialization") { it("should init with default values") { - keychain = A0SimpleKeychain() - expect(keychain.accessGroup).to(beNil()) - expect(keychain.defaultAccessiblity).to(equal(A0SimpleKeychainItemAccessible.afterFirstUnlock)) - expect(keychain.useAccessControl).to(beFalsy()) - } + sut = SimpleKeychain() + expect(sut.accessGroup).to(beNil()) + expect(sut.service) == Bundle.main.bundleIdentifier + expect(sut.accessibility) == Accessibility.afterFirstUnlock + expect(sut.accessControlFlags).to(beNil()) + expect(sut.isSynchronizable) == false + expect(sut.attributes).to(beEmpty()) + } + + it("should init with custom values") { + sut = SimpleKeychain(service: KeychainService, + accessGroup: "Group", + accessibility: .whenUnlocked, + accessControlFlags: .userPresence, + synchronizable: true, + attributes: ["foo": "bar"]) + expect(sut.accessGroup) == "Group" + expect(sut.service) == KeychainService + expect(sut.accessibility) == Accessibility.whenUnlocked + expect(sut.accessControlFlags) == .userPresence + expect(sut.isSynchronizable) == true + expect(sut.attributes.count) == 1 + expect(sut.attributes["foo"] as? String) == "bar" + } + + #if canImport(LocalAuthentication) + it("should init with custom local authentication context") { + let context = LAContext() + sut = SimpleKeychain(context: context) + expect(sut.context).to(be(context)) + } + #endif + } - it("should init with service only") { - keychain = A0SimpleKeychain(service: kKeychainService) - expect(keychain.accessGroup).to(beNil()) - expect(keychain.service).to(equal(kKeychainService)) - expect(keychain.defaultAccessiblity).to(equal(A0SimpleKeychainItemAccessible.afterFirstUnlock)) - expect(keychain.useAccessControl).to(beFalsy()) - } + describe("storing items") { + var key: String! - it("should init with service and access group") { - keychain = A0SimpleKeychain(service: kKeychainService, accessGroup: "Group") - expect(keychain.accessGroup).to(equal("Group")) - expect(keychain.service).to(equal(kKeychainService)) - expect(keychain.defaultAccessiblity).to(equal(A0SimpleKeychainItemAccessible.afterFirstUnlock)) - expect(keychain.useAccessControl).to(beFalsy()) - } - } + beforeEach({ + sut = SimpleKeychain(service: KeychainService) + key = UUID().uuidString + }) - describe("factory methods") { - it("should create with default values") { - keychain = A0SimpleKeychain() - expect(keychain.accessGroup).to(beNil()) - expect(keychain.defaultAccessiblity).to(equal(A0SimpleKeychainItemAccessible.afterFirstUnlock)) - expect(keychain.useAccessControl).to(beFalsy()) - } + context("string items") { + it("should store a string item under a new key") { + expect(try sut.set("foo", forKey: key)).toNot(throwError()) + } - it("should create with service only") { - keychain = A0SimpleKeychain(service: kKeychainService) - expect(keychain.accessGroup).to(beNil()) - expect(keychain.service).to(equal(kKeychainService)) - expect(keychain.defaultAccessiblity).to(equal(A0SimpleKeychainItemAccessible.afterFirstUnlock)) - expect(keychain.useAccessControl).to(beFalsy()) + it("should store a string item under an existing key") { + try sut.set("foo", forKey: key) + expect(try sut.set("bar", forKey: key)).toNot(throwError()) + } } - it("should create with service and access group") { - keychain = A0SimpleKeychain(service: kKeychainService, accessGroup: "Group") - expect(keychain.accessGroup).to(equal("Group")) - expect(keychain.service).to(equal(kKeychainService)) - expect(keychain.defaultAccessiblity).to(equal(A0SimpleKeychainItemAccessible.afterFirstUnlock)) - expect(keychain.useAccessControl).to(beFalsy()) + context("data items") { + it("should store a data item under a new key") { + expect(try sut.set(Data(), forKey: key)).toNot(throwError()) + } + + it("should store a data item under an existing key") { + try sut.set( Data(), forKey: key) + expect(try sut.set(Data(), forKey: key)).toNot(throwError()) + } } } - describe("Storing values") { - + describe("removing items") { var key: String! - beforeEach({ - keychain = A0SimpleKeychain(service: kKeychainService) - key = NSUUID().uuidString - }) - - it("should store a a value under a new key") { - expect(keychain.setString("value", forKey: key)).to(beTruthy()) + beforeEach { + sut = SimpleKeychain(service: KeychainService) + key = UUID().uuidString + try! sut.set("foo", forKey: key) } - it("should store a a value under an existing key") { - keychain.setString("value1", forKey:key) - expect(keychain.setString("value2", forKey:key)).to(beTruthy()) + it("should delete item") { + expect(try sut.deleteItem(forKey: key)).toNot(throwError()) } - it("should store a data value under a new key") { - expect(keychain.setData(NSData() as Data, forKey:key)).to(beTruthy()) + it("should throw an error when deleting an item with a non-existing key") { + expect(try sut.deleteItem(forKey: "SHOULDNOTEXIST")).to(throwError()) } - it("should store a data value under an existing key") { - keychain.setData(NSData() as Data, forKey:key) - expect(keychain.setData(NSData() as Data, forKey:key)).to(beTruthy()) + it("should delete all items") { + try sut.deleteAll() + expect(try sut.string(forKey: key)).to(throwError(SimpleKeychainError.itemNotFound)) } + #if os(macOS) + it("should include limit all attribute when deleting all items") { + var limit: String? + sut.remove = { query in + let key = kSecMatchLimit as String + limit = (query as NSDictionary).value(forKey: key) as? String + return errSecSuccess + } + try sut.deleteAll() + expect(limit).toEventually(equal(kSecMatchLimitAll as String)) + } + #else + it("should not include limit all attribute when deleting all items") { + var limit: String? = "" + sut.remove = { query in + let key = kSecMatchLimit as String + limit = (query as NSDictionary).value(forKey: key) as? String + return errSecSuccess + } + try sut.deleteAll() + expect(limit).toEventually(beNil()) + } + #endif } - describe("Removing values") { - + describe("retrieving items") { var key: String! beforeEach { - keychain = A0SimpleKeychain(service: kKeychainService) - key = NSUUID().uuidString - keychain.setString("value1", forKey:key) + sut = SimpleKeychain(service: KeychainService) + key = UUID().uuidString + try! sut.set("foo", forKey: key) } - it("should remove entry for key") { - expect(keychain.deleteEntry(forKey: key)).to(beTruthy()) + it("should retrieve string item") { + expect(try sut.string(forKey: key)) == "foo" } - it("should fail with nonexisting key") { - expect(keychain.deleteEntry(forKey: "SHOULDNOTEXIST")).to(beFalsy()) + it("should retrieve data item") { + expect(try sut.data(forKey: key)).notTo(beNil()) } - it("should clear all entries") { - keychain.clearAll() - expect(keychain.string(forKey: key)).to(beNil()) + it("should throw error when retrieving a string item with non-existing key") { + let expectedError = SimpleKeychainError.itemNotFound + expect(try sut.string(forKey: "SHOULDNOTEXIST")).to(throwError(expectedError)) } - } - - describe("retrieving values") { - - var key: String! - - beforeEach { - keychain = A0SimpleKeychain(service: kKeychainService) - key = NSUUID().uuidString - keychain.setString("value1", forKey:key) + it("should throw error when retrieving a data item with non-existing key") { + let expectedError = SimpleKeychainError.itemNotFound + expect(try sut.data(forKey: "SHOULDNOTEXIST")).to(throwError(expectedError)) } - it("should return that a key exists") { - expect(keychain.string(forKey: key)).toNot(beNil()) + it("should throw an error when retrieving a string item that cannot be decoded") { + let message = "Unable to convert the retrieved item to a String value" + let expectedError = SimpleKeychainError(code: .unknown(message: message)) + sut.retrieve = { _, result in + result?.pointee = .some(NSData(data: withUnsafeBytes(of: Date()) { Data($0) })) + return errSecSuccess + } + expect(try sut.string(forKey: key)).to(throwError(expectedError)) } - it("should return nil data with non existing key") { - expect(keychain.data(forKey: "SHOULDNOTEXIST")).to(beNil()) + it("should throw an error when retrieving an invalid data item") { + let message = "Unable to cast the retrieved item to a Data value" + let expectedError = SimpleKeychainError(code: .unknown(message: message)) + sut.retrieve = { _, result in + result?.pointee = .some(NSDate()) + return errSecSuccess + } + expect(try sut.string(forKey: key)).to(throwError(expectedError)) } + } - it("should return nil string with non existing key") { - expect(keychain.string(forKey: "SHOULDNOTEXIST")).to(beNil()) + describe("checking items") { + var key: String! + + beforeEach { + sut = SimpleKeychain(service: KeychainService) + key = UUID().uuidString + try! sut.set("foo", forKey: key) } - it("should return string for a key") { - expect(keychain.string(forKey: key)).to(equal("value1")) + it("should return true when the item is stored") { + expect(try sut.hasItem(forKey: key)) == true } - it("should return data for a key") { - expect(keychain.data(forKey: key)).notTo(beNil()) + it("should return false when the item is not stored") { + expect(try sut.hasItem(forKey: "SHOULDNOTEXIST")) == false } } - + describe("retrieving keys") { - - var keys = [String]() - + var keys: [String] = [] + beforeEach { - - keychain.clearAll() - - keychain = A0SimpleKeychain(service: kKeychainService) + try! sut.deleteAll() + sut = SimpleKeychain(service: KeychainService) keys.append(UUID().uuidString) keys.append(UUID().uuidString) keys.append(UUID().uuidString) for (i, key) in keys.enumerated() { - keychain.setString("value\(i)", forKey: key) + try! sut.set("foo\(i)", forKey: key) } } - - afterEach { - keychain.clearAll() - } - + it("should return all the keys") { - expect(keychain.keys() as? [String]).to(equal(keys)) + expect(try sut.keys()) == keys } - - it("should clear all") { - + + it("should return an empty array when there are no keys") { for key in keys { - expect(keychain.data(forKey: key)).notTo(beNil()) + expect(try sut.data(forKey: key)).notTo(beNil()) } - expect(keychain.keys().count).to(equal(keys.count)) - - keychain.clearAll() - + expect(try sut.keys().count) == keys.count + try sut.deleteAll() + let expectedError = SimpleKeychainError.itemNotFound for key in keys { - expect(keychain.data(forKey: key)).to(beNil()) + expect(try sut.data(forKey: key)).to(throwError(expectedError)) + } + expect(try sut.keys().count) == 0 + } + + it("should throw an error when retrieving invalid attributes") { + let message = "Unable to cast the retrieved items to a [[String: Any]] value" + let expectedError = SimpleKeychainError(code: .unknown(message: message)) + sut.retrieve = { _, result in + result?.pointee = .some(NSDate()) + return errSecSuccess } - expect(keychain.keys().count).to(equal(0)) + expect(try sut.keys()).to(throwError(expectedError)) } } + describe("queries") { + beforeEach { + sut = SimpleKeychain(service: KeychainService) + } + + context("base query") { + it("should contain default attributes") { + let query = sut.baseQuery() + expect((query[kSecClass as String] as? String)) == kSecClassGenericPassword as String + expect((query[kSecAttrService as String] as? String)) == sut.service + expect((query[kSecAttrAccount as String] as? String)).to(beNil()) + expect((query[kSecValueData as String] as? Data)).to(beNil()) + expect((query[kSecAttrAccessGroup as String] as? String)).to(beNil()) + expect((query[kSecAttrSynchronizable as String] as? Bool)).to(beNil()) + #if canImport(LocalAuthentication) + expect((query[kSecUseAuthenticationContext as String] as? LAContext)).to(beNil()) + #endif + } - describe("generate key pair") { + it("should include additional attributes") { + let key = "foo" + let value = "bar" + sut = SimpleKeychain(attributes: [key: value]) + let query = sut.baseQuery() + expect((query[key] as? String)) == value + } - beforeEach { - keychain = A0SimpleKeychain(service: kKeychainService) - } + it("should supersede additional attributes") { + let key = kSecAttrService as String + let value = "foo" + sut = SimpleKeychain(attributes: [key: value]) + let query = sut.baseQuery() + expect((query[key] as? String)) == sut.service + } - afterEach { - keychain.deleteRSAKey(withTag: PublicKeyTag) - keychain.deleteRSAKey(withTag: PrivateKeyTag) - } + it("should include account attribute") { + let key = "foo" + let query = sut.baseQuery(withKey: key) + expect((query[kSecAttrAccount as String] as? String)) == key + } - it("should generate a key pair") { - keychain.generateRSAKeyPair(withLength: A0SimpleKeychainRSAKeySize.size1024Bits, publicKeyTag:PublicKeyTag, privateKeyTag:PrivateKeyTag) - expect(keychain.dataForRSAKey(withTag: PublicKeyTag)).notTo(beNil()) - expect(keychain.dataForRSAKey(withTag: PrivateKeyTag)).notTo(beNil()) - } - } + it("should include data attribute") { + let data = Data() + let query = sut.baseQuery(data: data) + expect((query[kSecValueData as String] as? Data)) == data + } - describe("obtain RSA key as NSData") { + it("should include access group attribute") { + sut = SimpleKeychain(accessGroup: "foo") + let query = sut.baseQuery() + expect((query[kSecAttrAccessGroup as String] as? String)) == sut.accessGroup + } - beforeEach { - keychain = A0SimpleKeychain(service: kKeychainService) - keychain.generateRSAKeyPair(withLength: A0SimpleKeychainRSAKeySize.size1024Bits, - publicKeyTag:PublicKeyTag, - privateKeyTag:PrivateKeyTag) - } + it("should include synchronizable attribute") { + sut = SimpleKeychain(synchronizable: true) + let query = sut.baseQuery() + expect((query[kSecAttrSynchronizable as String] as? Bool)) == sut.isSynchronizable + } - afterEach { - keychain.deleteRSAKey(withTag: PublicKeyTag) - keychain.deleteRSAKey(withTag: PrivateKeyTag) + #if canImport(LocalAuthentication) + it("should include context attribute") { + sut = SimpleKeychain(context: LAContext()) + let query = sut.baseQuery() + expect((query[kSecUseAuthenticationContext as String] as? LAContext)) == sut.context + } + #endif } - it("should obtain keys") { - expect(keychain.dataForRSAKey(withTag: PublicKeyTag)).notTo(beNil()) - expect(keychain.dataForRSAKey(withTag: PrivateKeyTag)).notTo(beNil()) - } - } + context("get all query") { + it("should contain the base query") { + expect(sut.getAllQuery).to(containBaseQuery(sut.baseQuery())) + } - describe("check if RSA key exists") { + it("should contain return attribute") { + let query = sut.getAllQuery + expect((query[kSecReturnAttributes as String] as? Bool)) == true + } - beforeEach { - keychain = A0SimpleKeychain(service: kKeychainService) - keychain.generateRSAKeyPair(withLength: A0SimpleKeychainRSAKeySize.size1024Bits, - publicKeyTag:PublicKeyTag, - privateKeyTag:PrivateKeyTag) + it("should contain limit attribute") { + let query = sut.getAllQuery + expect((query[kSecMatchLimit as String] as? String)) == kSecMatchLimitAll as String + } } - afterEach { - keychain.deleteRSAKey(withTag: PublicKeyTag) - keychain.deleteRSAKey(withTag: PrivateKeyTag) - } + context("get one query") { + it("should contain the base query") { + let key = "foo" + expect(sut.getOneQuery(byKey: key)).to(containBaseQuery(sut.baseQuery(withKey: key))) + } + + it("should contain data attribute") { + let query = sut.getOneQuery(byKey: "foo") + expect((query[kSecReturnData as String] as? Bool)) == true + } - it("should check if the key exists") { - expect(keychain.hasRSAKey(withTag: PublicKeyTag)).to(beTruthy()) - expect(keychain.hasRSAKey(withTag: PrivateKeyTag)).to(beTruthy()) + it("should contain limit attribute") { + let query = sut.getOneQuery(byKey: "foo") + expect((query[kSecMatchLimit as String] as? String)) == kSecMatchLimitOne as String + } } - it("should return NO for nonexisting key") { - expect(keychain.hasRSAKey(withTag: "NONEXISTENT")).to(beFalsy()) + context("set query") { + it("should contain the base query") { + let key = "foo" + let data = Data() + let query = sut.setQuery(forKey: key, data: data) + let baseQuery = sut.baseQuery(withKey: key, data: data) + expect(query).to(containBaseQuery(baseQuery)) + } + + it("should include access control attribute") { + sut = SimpleKeychain(accessControlFlags: .userPresence) + let query = sut.setQuery(forKey: "foo", data: Data()) + expect(query[kSecAttrAccessControl as String]).toNot(beNil()) + } + + #if os(macOS) + it("should not include accessibility attribute by default") { + let query = sut.setQuery(forKey: "foo", data: Data()) + expect((query[kSecAttrAccessible as String] as? String)).to(beNil()) + } + + it("should include accessibility attribute when iCloud sharing is enabled") { + sut = SimpleKeychain(synchronizable: true) + let query = sut.setQuery(forKey: "foo", data: Data()) + let expectedAccessibility = sut.accessibility.rawValue as String + expect((query[kSecAttrAccessible as String] as? String)) == expectedAccessibility + } + + it("should include accessibility attribute when data protection is enabled") { + let attributes = [kSecUseDataProtectionKeychain as String: kCFBooleanTrue as Any] + sut = SimpleKeychain(attributes: attributes) + let query = sut.setQuery(forKey: "foo", data: Data()) + let expectedAccessibility = sut.accessibility.rawValue as String + expect((query[kSecAttrAccessible as String] as? String)) == expectedAccessibility + } + #else + it("should include accessibility attribute") { + let query = sut.setQuery(forKey: "foo", data: Data()) + let expectedAccessibility = sut.accessibility.rawValue as String + expect((query[kSecAttrAccessible as String] as? String)) == expectedAccessibility + } + #endif } } } } } + +public func containBaseQuery(_ baseQuery: [String: Any]) -> Predicate<[String: Any]> { + return Predicate<[String: Any]>.define("contains base query <\(baseQuery)>") { expression, failureMessage in + guard let actual = try expression.evaluate() else { + return PredicateResult(status: .doesNotMatch, message: failureMessage) + } + let filtered = actual.filter { element in + return baseQuery.keys.contains(element.key) + } + return PredicateResult(bool: filtered == baseQuery, message: failureMessage) + } +} + +public func ==(lhs: [String: Any], rhs: [String: Any]) -> Bool { + return NSDictionary(dictionary: lhs).isEqual(to: rhs) +} diff --git a/V1_MIGRATION_GUIDE.md b/V1_MIGRATION_GUIDE.md new file mode 100644 index 0000000..b0d4501 --- /dev/null +++ b/V1_MIGRATION_GUIDE.md @@ -0,0 +1,198 @@ +# v1 Migration Guide + +SimpleKeychain v1 includes a few significant changes: + +- Improved error handling. +- Support for custom attributes. +- Support for sharing items with other devices through iCloud synchronization. + +As expected with a major release, SimpleKeychain v1 contains breaking changes. Please review this guide thorougly to understand the changes required to migrate your application to v1. + +--- + +## Table of Contents + +- [**Supported Languages**](#supported-languages) + + [Swift](#swift) + + [Objective-C](#objective-c) +- [**Supported Platform Versions**](#supported-platform-versions) +- [**Types Removed**](#types-removed) +- [**Properties Removed**](#properties-removed) + + [SimpleKeychain Struct](#simplekeychain-struct) +- [**Methods Removed**](#methods-removed) + + [SimpleKeychain Struct](#simplekeychain-struct-1) +- [**Types Changed**](#types-changed) +- [**Method Signatures Changed**](#method-signatures-changed) + + [SimpleKeychain Struct](#simplekeychain-struct-2) +- [**Behavior Changes**](#behavior-changes) + + [SimpleKeychain Struct](#simplekeychain-struct-3) + +## Supported Languages + +### Swift + +The minimum supported Swift version is now **5.5**. + +### Objective-C + +SimpleKeychain no longer supports Objective-C. + +## Supported Platform Versions + +The deployment targets for each platform were raised to: + +- iOS **12.0** +- macOS **10.15** +- tvOS **12.0** +- watchOS **6.2** + +## Types Removed + +- The `A0SimpleKeychainError` enum was removed in favor of the new `SimpleKeychainError` enum. +- The `A0SimpleKeychainItemAccessible` enum was removed in favor of the new `Accessibility` enum. +- The `A0ErrorDomain` macro was removed. +- The `A0LocalAuthenticationCapable` macro was removed. + +## Properties removed + +### SimpleKeychain Struct + +#### `defaultAccessiblity` + +The property `defaultAccessiblity` was removed in favor of the new `accessibility` initalizer parameter. + +
+ Before / After + +```swift +// Before +let simpleKeychain = A0SimpleKeychain() +simpleKeychain.defaultAccessiblity = .whenPasscodeSetThisDeviceOnly + +// After +let simpleKeychain = SimpleKeychain(accessibility: .whenPasscodeSetThisDeviceOnly) +``` +
+ +#### `useAccessControl` + +The property `useAccessControl` was removed in favor of the new `accessControlFlags` initializer parameter. + +
+ Before / After + +```swift +// Before +let simpleKeychain = A0SimpleKeychain() +simpleKeychain.useAccessControl = true + +// After +let simpleKeychain = SimpleKeychain(accessControlFlags: .userPresence) +``` +
+ +#### `localAuthenticationContext` + +The property `localAuthenticationContext` was removed in favor of the new `context` initializer parameter. This means that SimpleKeychain will no longer create an `LAContext` instance, and instead one must be provided through the initializer. + +
+ Before / After + +```swift +// Before +let simpleKeychain = A0SimpleKeychain() +let context = simpleKeychain.localAuthenticationContext + +// After +let context = LAContext() +let simpleKeychain = SimpleKeychain(context: context) +``` +
+ +#### No longer public + +The following properties are no longer public: + +- `service` +- `accessGroup` + +## Methods Removed + +### SimpleKeychain Struct + +#### `setTouchIDAuthenticationAllowableReuseDuration(_:)` + +The `setTouchIDAuthenticationAllowableReuseDuration(_:)` method was removed. Configure that through an `LAContext` instance instead. + +
+ Before / After + +```swift +// Before +let simpleKeychain = A0SimpleKeychain() +simpleKeychain.setTouchIDAuthenticationAllowableReuseDuration(10) + +// After +let context = LAContext() +context.touchIDAuthenticationAllowableReuseDuration = 10 +let simpleKeychain = SimpleKeychain(context: context) +``` +
+ +#### No replacement + +The following methods were removed and have no replacement: + +- `publicRSAKeyData(forTag:)` +- `generateRSAKeyPair(withLength:publicKeyTag:privateKeyTag:)` +- `dataForRSAKey(withTag:)` +- `keyRefOfRSAKey(withTag:)` +- `deleteRSAKey(withTag:)` +- `hasRSAKey(withTag:)` + +## Types Changed + +`A0SimpleKeychain` was renamed to `SimpleKeychain`, and was changed from class to struct. + +## Method Signatures Changed + +### SimpleKeychain Struct + +All the methods now **throw** a `SimpleKeychainError` upon failure. + +#### Methods renamed + +| Old | New | +|:-----------------------|:----------------------| +| `setString(forKey:)` | `set(_:forKey:)` | +| `setData(forKey:)` | `set(_:forKey:)` | +| `hasValue(forKey:)` | `hasItem(forKey:)` | +| `deleteEntry(forKey:)` | `deleteItem(forKey:)` | +| `clearAll()` | `deleteAll()` | + +#### Parameters removed + +#### `promptMessage` + +The `promptMessage` parameter was removed from the following methods, as `kSecUseOperationPrompt` [is deprecated](https://developer.apple.com/documentation/security/ksecuseoperationprompt): + +- `string(forKey:)` +- `data(forKey:)` +- `set(_:forKey:)` + +Configure the message through an `LAContext` instance instead, using the `LAContext.localizedReason` property. + +#### `error` + +The `error` parameter was removed from the `data(forKey:)` method, as it now throws a `SimpleKeychainError`. + +## Behavior Changes + +### SimpleKeychain Struct + +- `kSecUseAuthenticationUI` is no longer used. Configure whether the user should be prompted for authentication through an `LAContext` instance instead, using the `LAContext.interactionNotAllowed` property. +- The `hasItem(forKey:)` method no longer retuns `false` whenever any error occurs. Now it only returns `false` when the error is `errSecItemNotFound`. + +--- + +[Go up ⤴](#table-of-contents) diff --git a/docs/css/documentation-topic.de084985.css b/docs/css/documentation-topic.de084985.css new file mode 100644 index 0000000..2271f56 --- /dev/null +++ b/docs/css/documentation-topic.de084985.css @@ -0,0 +1,9 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */.badge[data-v-2bfc9463]{--badge-color:var(--color-badge-default);--badge-dark-color:var(--color-badge-dark-default);font-size:.70588rem;line-height:1.33333;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;display:inline-block;padding:2px 10px;white-space:nowrap;background:none;border-radius:3px;margin-left:10px;border:1px solid var(--badge-color);color:var(--badge-color)}.theme-dark .badge[data-v-2bfc9463]{--badge-color:var(--badge-dark-color)}.badge-deprecated[data-v-2bfc9463]{--badge-color:var(--color-badge-deprecated);--badge-dark-color:var(--color-badge-dark-deprecated)}.badge-beta[data-v-2bfc9463]{--badge-color:var(--color-badge-beta);--badge-dark-color:var(--color-badge-dark-beta)}.hierarchy-collapsed-items[data-v-45c48d1a]{position:relative;display:inline-flex;align-items:center;margin-left:.58824rem}.hierarchy-collapsed-items .hierarchy-item-icon[data-v-45c48d1a]{width:9px;height:15px;margin-right:.58824rem}.nav--in-breakpoint-range .hierarchy-collapsed-items[data-v-45c48d1a]{display:none}.hierarchy-collapsed-items .toggle[data-v-45c48d1a]{background:var(--color-nav-hierarchy-collapse-background);border-color:var(--color-figure-gray-secondary);border-radius:4px;border-style:solid;border-width:0;font-weight:600;height:1.11765rem;text-align:center;width:2.11765rem;display:flex;align-items:center;justify-content:center}.theme-dark .hierarchy-collapsed-items .toggle[data-v-45c48d1a]{background:var(--color-nav-dark-hierarchy-collapse-background)}.hierarchy-collapsed-items .toggle.focused[data-v-45c48d1a],.hierarchy-collapsed-items .toggle[data-v-45c48d1a]:active,.hierarchy-collapsed-items .toggle[data-v-45c48d1a]:focus{box-shadow:0 0 0 4px var(--color-focus-color);outline:none}.indicator[data-v-45c48d1a]{width:1em;height:1em;display:flex;align-items:center}.indicator .toggle-icon[data-v-45c48d1a]{width:100%}.dropdown[data-v-45c48d1a]{background:var(--color-nav-hierarchy-collapse-background);border-color:var(--color-nav-hierarchy-collapse-borders);border-radius:4px;border-style:solid;box-shadow:0 1px 4px -1px var(--color-figure-gray-secondary);border-width:0;padding:0 .5rem;position:absolute;z-index:42;top:calc(100% + .41176rem)}.theme-dark .dropdown[data-v-45c48d1a]{background:var(--color-nav-dark-hierarchy-collapse-background);border-color:var(--color-nav-dark-hierarchy-collapse-borders)}.dropdown.collapsed[data-v-45c48d1a]{opacity:0;transform:translate3d(0,-.41176rem,0);transition:opacity .25s ease,transform .25s ease,visibility 0s linear .25s;visibility:hidden}.dropdown[data-v-45c48d1a]:not(.collapsed){opacity:1;transform:none;transition:opacity .25s ease,transform .25s ease,visibility 0s linear 0s;visibility:visible}.nav--in-breakpoint-range .dropdown[data-v-45c48d1a]:not(.collapsed){display:none}.dropdown[data-v-45c48d1a]:before{border-bottom-color:var(--color-nav-hierarchy-collapse-background);border-bottom-style:solid;border-bottom-width:.5rem;border-left-color:transparent;border-left-style:solid;border-left-width:.5rem;border-right-color:transparent;border-right-style:solid;border-right-width:.5rem;content:"";left:1.67647rem;position:absolute;top:-.44118rem}.theme-dark .dropdown[data-v-45c48d1a]:before{border-bottom-color:var(--color-nav-dark-hierarchy-collapse-background)}.dropdown-item[data-v-45c48d1a]{border-top-color:var(--color-nav-hierarchy-collapse-borders);border-top-style:solid;border-top-width:1px}.theme-dark .dropdown-item[data-v-45c48d1a]{border-top-color:var(--color-nav-dark-hierarchy-collapse-borders)}.dropdown-item[data-v-45c48d1a]:first-child{border-top:none}.nav-menu-link[data-v-45c48d1a]{max-width:57.64706rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;padding:.75rem 1rem}.nav-menu-item[data-v-f44c239a]{margin-left:1.41176rem;list-style:none;min-width:0}.nav--in-breakpoint-range .nav-menu-item[data-v-f44c239a]{margin-left:0;width:100%;height:2.47059rem}.nav--in-breakpoint-range .nav-menu-item[data-v-f44c239a]:first-child .nav-menu-link{border-top:0}.nav--in-breakpoint-range .nav-menu-item--animated[data-v-f44c239a]{opacity:0;transform:none;transition:.5s ease;transition-property:transform,opacity}.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.hierarchy-item[data-v-57182fdb] .hierarchy-item-icon{width:9px;height:15px;margin-right:.58824rem}.nav--in-breakpoint-range .hierarchy-item[data-v-57182fdb] .hierarchy-item-icon{display:none}@media only screen and (min-width:1024px){.hierarchy-item[data-v-57182fdb]{display:flex;align-items:center;margin-left:.58824rem}}.nav--in-breakpoint-range .hierarchy-item[data-v-57182fdb]{border-top:1px solid var(--color-nav-hierarchy-item-borders);display:flex;align-items:center}.theme-dark.nav--in-breakpoint-range .hierarchy-item[data-v-57182fdb]{border-top-color:var(--color-nav-dark-hierarchy-item-borders)}.nav--in-breakpoint-range .hierarchy-item[data-v-57182fdb]:first-of-type{border-top:none}.hierarchy-item.collapsed[data-v-57182fdb]{display:none}.nav--in-breakpoint-range .hierarchy-item.collapsed[data-v-57182fdb]{display:inline-block}.item[data-v-57182fdb]{display:inline-block;vertical-align:middle}.nav--in-breakpoint-range .item[data-v-57182fdb]{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:100%;line-height:2.47059rem}@media only screen and (min-width:1024px){.hierarchy-item:first-child:last-child .item[data-v-57182fdb],.hierarchy-item:first-child:last-child~.hierarchy-item .item[data-v-57182fdb]{max-width:27rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.has-badge .hierarchy-item:first-child:last-child .item[data-v-57182fdb],.has-badge .hierarchy-item:first-child:last-child~.hierarchy-item .item[data-v-57182fdb]{max-width:21.6rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hierarchy-item:first-child:nth-last-child(2) .item[data-v-57182fdb],.hierarchy-item:first-child:nth-last-child(2)~.hierarchy-item .item[data-v-57182fdb]{max-width:18rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.has-badge .hierarchy-item:first-child:nth-last-child(2) .item[data-v-57182fdb],.has-badge .hierarchy-item:first-child:nth-last-child(2)~.hierarchy-item .item[data-v-57182fdb]{max-width:14.4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hierarchy-item:first-child:nth-last-child(3) .item[data-v-57182fdb],.hierarchy-item:first-child:nth-last-child(3)~.hierarchy-item .item[data-v-57182fdb]{max-width:9rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.has-badge .hierarchy-item:first-child:nth-last-child(3) .item[data-v-57182fdb],.has-badge .hierarchy-item:first-child:nth-last-child(3)~.hierarchy-item .item[data-v-57182fdb]{max-width:7.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hierarchy-collapsed-items~.hierarchy-item .item[data-v-57182fdb]{max-width:10.8rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.has-badge .hierarchy-collapsed-items~.hierarchy-item .item[data-v-57182fdb]{max-width:8.64rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.hierarchy[data-v-20e91056]{justify-content:flex-start;min-width:0}[data-v-324c15b2] .nav-menu{font-size:.88235rem;line-height:1.26667;font-weight:400;letter-spacing:-.014em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1023px){[data-v-324c15b2] .nav-menu{font-size:.82353rem;line-height:1.5;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (min-width:1024px){[data-v-324c15b2] .nav-menu{padding-top:0}}.documentation-nav[data-v-324c15b2] .nav-title{font-size:.88235rem;line-height:1.26667;font-weight:400;letter-spacing:-.014em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1023px){.documentation-nav[data-v-324c15b2] .nav-title{font-size:.82353rem;line-height:1.5;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:767px){.documentation-nav[data-v-324c15b2] .nav-title{padding-top:0}}.documentation-nav[data-v-324c15b2] .nav-title .nav-title-link.inactive{height:auto;color:var(--color-figure-gray-secondary-alt)}.theme-dark.documentation-nav .nav-title .nav-title-link.inactive[data-v-324c15b2]{color:#b0b0b0}.betainfo[data-v-4edf30f4]{font-size:.94118rem;padding:3rem 0;background-color:var(--color-fill-secondary)}.betainfo-container[data-v-4edf30f4]{margin-left:auto;margin-right:auto;width:980px}@media only screen and (max-width:1068px){.betainfo-container[data-v-4edf30f4]{width:692px}}@media only screen and (max-width:735px){.betainfo-container[data-v-4edf30f4]{width:87.5%}}.betainfo-label[data-v-4edf30f4]{font-weight:600;font-size:.94118rem}.betainfo-content[data-v-4edf30f4] p{margin-bottom:10px}.contenttable+.betainfo[data-v-4edf30f4]{background-color:var(--color-fill)}.summary-section[data-v-6185a550]{margin:0 0 1.5rem}.summary-section[data-v-6185a550]:last-of-type{margin-bottom:0}.title[data-v-b903be56]{color:var(--colors-text,var(--color-text));font-size:1.11765rem;line-height:1.21053;font-weight:400;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.82353rem;margin-bottom:.5rem;text-rendering:optimizeLegibility}.language[data-v-0836085b]{font-size:14px}.language-option[data-v-0836085b]{display:inline}@media only screen and (max-width:735px){.language-option[data-v-0836085b]{display:block;margin-bottom:.25rem}}.language-option.active[data-v-0836085b],.language-option.router-link-exact-active[data-v-0836085b]{color:var(--colors-secondary-label,var(--color-secondary-label))}@media only screen and (min-width:736px){.language-option.swift[data-v-0836085b]{border-right:1px solid var(--color-fill-gray-tertiary);margin-right:10px;padding-right:10px}}[data-v-002affcc] .code-listing{background:var(--background,var(--color-code-background));color:var(--text,var(--color-code-plain));border-color:var(--colors-grid,var(--color-grid));border-width:1px;border-style:solid}[data-v-002affcc]+.code-listing,[data-v-002affcc] .code-listing+*{margin-top:1.6em}[data-v-002affcc] .code-listing pre{padding:8px 14px;padding-right:0}[data-v-002affcc] .code-listing pre>code{font-size:.88235rem;line-height:1.66667;font-weight:400;letter-spacing:-.027em;font-family:Menlo,monospace}[data-v-002affcc] *+aside,[data-v-002affcc] *+figure,[data-v-002affcc]+.endpoint-example,[data-v-002affcc] .endpoint-example+*,[data-v-002affcc] aside+*,[data-v-002affcc] figure+*{margin-top:1.6em}[data-v-002affcc] img{display:block;margin:1.6em auto;max-width:100%}[data-v-002affcc] ol,[data-v-002affcc] ul{margin-top:.8em;margin-left:2rem}[data-v-002affcc] ol li:not(:first-child),[data-v-002affcc] ul li:not(:first-child){margin-top:.8em}@media only screen and (max-width:735px){[data-v-002affcc] ol,[data-v-002affcc] ul{margin-left:1.25rem}}[data-v-002affcc]+dl,[data-v-002affcc] dl+*,[data-v-002affcc] dt:not(:first-child){margin-top:.8em}[data-v-002affcc] dd{margin-left:2em}.abstract[data-v-702ec04e]{font-size:1.23529rem;line-height:1.38095;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:735px){.abstract[data-v-702ec04e]{font-size:1.11765rem;line-height:1.42105;font-weight:400;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}[data-v-702ec04e] p:last-child{margin-bottom:0}.contenttable[data-v-1a780186]{background:var(--color-content-table-content-color);padding:3rem 0}.container[data-v-1a780186]{margin-left:auto;margin-right:auto;width:980px}@media only screen and (max-width:1068px){.container[data-v-1a780186]{width:692px}}@media only screen and (max-width:735px){.container[data-v-1a780186]{width:87.5%}}.title[data-v-1a780186]{font-size:1.88235rem;line-height:1.125;font-weight:400;letter-spacing:.013em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){.title[data-v-1a780186]{font-size:1.64706rem;line-height:1.14286;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.title[data-v-1a780186]{font-size:1.41176rem;line-height:1.16667;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.contenttable-section[data-v-bedf02be]{border-top-color:var(--color-grid);border-top-style:solid;border-top-width:1px;align-items:baseline;display:flex;margin:2rem 0;padding-top:2rem}.contenttable-section[data-v-bedf02be]:last-child{margin-bottom:0}.section-content[data-v-bedf02be]{padding-left:1rem}[data-v-bedf02be] .title{font-size:1.41176rem;line-height:1.16667;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){[data-v-bedf02be] .title{font-size:1.23529rem;line-height:1.19048;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.contenttable-section[data-v-bedf02be]{align-items:unset;border-top:none;display:inherit;margin:0}.section-content[data-v-bedf02be],.section-title[data-v-bedf02be]{padding:0}[data-v-bedf02be] .title{border-bottom-color:var(--color-grid);border-bottom-style:solid;border-bottom-width:1px;margin:0 0 2rem 0;padding-bottom:.5rem}}.topic-icon-wrapper[data-v-4d1e7968]{display:flex;align-items:center;justify-content:center;height:1.47059rem;flex:0 0 1.294rem;width:1.294rem;margin-right:.5em}.topic-icon[data-v-4d1e7968]{height:.88235rem;transform:scale(1);-webkit-transform:scale(1);overflow:visible}.topic-icon.curly-brackets-icon[data-v-4d1e7968]{height:1rem}.token-method[data-v-5caf1b5b]{font-weight:700}.token-keyword[data-v-5caf1b5b]{color:var(--syntax-keyword,var(--color-syntax-keywords))}.token-number[data-v-5caf1b5b]{color:var(--syntax-number,var(--color-syntax-numbers))}.token-string[data-v-5caf1b5b]{color:var(--syntax-string,var(--color-syntax-strings))}.token-attribute[data-v-5caf1b5b]{color:var(--syntax-attribute,var(--color-syntax-keywords))}.token-internalParam[data-v-5caf1b5b]{color:var(--color-syntax-param-internal-name)}.type-identifier-link[data-v-5caf1b5b]{color:var(--syntax-type,var(--color-syntax-other-type-names))}.token-removed[data-v-5caf1b5b]{background-color:var(--color-highlight-red)}.token-added[data-v-5caf1b5b]{background-color:var(--color-highlight-green)}.decorator[data-v-06ec7395],.label[data-v-06ec7395]{color:var(--colors-secondary-label,var(--color-secondary-label))}.label[data-v-06ec7395]{font-size:1rem;line-height:1.47059;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.empty-token[data-v-06ec7395]{font-size:0}.empty-token[data-v-06ec7395]:after{content:"\00a0";font-size:1rem}.conditional-constraints[data-v-1548fd90] code{color:var(--colors-secondary-label,var(--color-secondary-label))}.abstract[data-v-1e5f16e7],.link-block[data-v-1e5f16e7] .badge{margin-left:calc(.5em + 1.294rem)}.link-block .badge+.badge[data-v-1e5f16e7]{margin-left:1rem}.link-block[data-v-1e5f16e7],.link[data-v-1e5f16e7]{box-sizing:inherit}.link-block.changed[data-v-1e5f16e7],.link.changed[data-v-1e5f16e7]{padding-left:.70588rem;padding-right:1.88235rem;padding-top:5px;padding-bottom:5px;display:inline-flex;margin-left:-.76471rem;width:calc(100% + 13px)}.link-block.changed.changed[data-v-1e5f16e7],.link.changed.changed[data-v-1e5f16e7]{padding-left:12px}@media only screen and (max-width:735px){.link-block.changed[data-v-1e5f16e7],.link.changed[data-v-1e5f16e7]{padding-left:0;padding-right:0}.link-block.changed.changed[data-v-1e5f16e7],.link.changed.changed[data-v-1e5f16e7]{padding-left:12px;padding-right:1.88235rem}}@media only screen and (max-width:735px){.link-block.changed[data-v-1e5f16e7],.link.changed[data-v-1e5f16e7]{padding-left:0;padding-right:0}}@media only screen and (max-width:735px){.link-block.changed[data-v-1e5f16e7]:not(.changed),.link.changed[data-v-1e5f16e7]:not(.changed){margin-left:0;width:100%}.link-block.changed.changed[data-v-1e5f16e7],.link.changed.changed[data-v-1e5f16e7]{margin-left:-.70588rem;width:calc(100% + 24px)}}.link[data-v-1e5f16e7]{display:flex}.link-block .badge[data-v-1e5f16e7]{margin-top:.5rem}.link-block.has-inline-element[data-v-1e5f16e7]{display:flex;align-items:flex-start;flex-flow:row wrap}.link-block.has-inline-element .badge[data-v-1e5f16e7]{margin-left:1rem;margin-top:0}.link-block .has-adjacent-elements[data-v-1e5f16e7]{padding-top:5px;padding-bottom:5px;display:inline-flex}.abstract .topic-required[data-v-1e5f16e7]:not(:first-child){margin-top:4px}.topic-required[data-v-1e5f16e7]{font-size:.8em}.deprecated[data-v-1e5f16e7]{text-decoration:line-through}.conditional-constraints[data-v-1e5f16e7]{font-size:.82353rem;margin-top:4px}.section-content>.content[data-v-3e48ad3a],.topic[data-v-3e48ad3a]:not(:last-child){margin-bottom:1.5rem}.description[data-v-3b0e7cbb]:not(:empty){margin-bottom:2rem}.nodocumentation[data-v-3b0e7cbb]{font-size:1.23529rem;line-height:1.38095;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--colors-secondary-label,var(--color-secondary-label));margin-bottom:0}@media only screen and (max-width:735px){.nodocumentation[data-v-3b0e7cbb]{font-size:1.11765rem;line-height:1.42105;font-weight:400;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}[data-v-3b0e7cbb] .content+*{margin-top:.8em}.summary-list[data-v-731de2f2]{font-size:.82353rem;list-style:none;margin:0}.summary-list-item[data-v-1648b0ac]{margin-bottom:.25rem;padding-left:0}.summary-list-item[data-v-1648b0ac]:last-child{margin-bottom:0}.name[data-v-4616e162]:after{content:", "}.name[data-v-4616e162]:last-of-type:after{content:""}.icon-holder[data-v-7e43087c]{display:inline;white-space:nowrap}.icon-holder .link-text[data-v-7e43087c]{vertical-align:middle}.icon-holder .link-icon[data-v-7e43087c]{height:1em;vertical-align:text-bottom}.datalist dd{padding-left:2rem}.datalist dt{font-weight:600;padding-left:1rem;padding-top:1.64706rem}.datalist dt:first-of-type{padding-top:0}.source[data-v-bb800958]{background:var(--background,var(--color-code-background));border-color:var(--color-grid);color:var(--text,var(--color-code-plain));border-radius:4px;border-style:solid;border-width:1px;padding:8px 14px;speak:literal-punctuation;line-height:25px}.source.has-multiple-lines[data-v-bb800958]{border-radius:4px}.source.indented[data-v-bb800958]{padding-left:2.76447em;text-indent:-1.88235em;white-space:normal}.source>code[data-v-bb800958]{font-size:.88235rem;line-height:1.66667;font-weight:400;letter-spacing:-.027em;font-family:Menlo,monospace;display:block}.platforms[data-v-1dc256a6]{font-size:.82353rem;line-height:1.42857;font-weight:400;letter-spacing:-.016em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;margin-bottom:.45rem;margin-top:1.6em}.changed .platforms[data-v-1dc256a6]{padding-left:.588rem}.platforms[data-v-1dc256a6]:first-of-type{margin-top:1rem}.source[data-v-1dc256a6]{margin:14px 0}.platforms+.source[data-v-1dc256a6]{margin:0}.changed .source[data-v-1dc256a6]{background:none;border:none;margin-top:0;margin-bottom:0;margin-right:1.88235rem;padding-right:0}.declaration-diff-version[data-v-676d8556]{padding-left:.588rem;padding-right:1.88235rem;font-size:1rem;line-height:1.52941;font-weight:600;letter-spacing:-.021em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--color-figure-gray-secondary);margin:0}.declaration-diff-current[data-v-676d8556],.declaration-diff-previous[data-v-676d8556]{padding-top:5px}.declaration-diff-previous[data-v-676d8556]{background-color:var(--color-changes-modified-previous-background);border-radius:0 0 4px 4px;position:relative}.conditional-constraints[data-v-e39c4ee4]{margin:1.17647rem 0 3rem 0}.type[data-v-791bac44]:first-letter{text-transform:capitalize}.detail-type[data-v-61ef551b]{font-weight:600;padding-left:1rem;padding-top:1.64706rem}.detail-type[data-v-61ef551b]:first-child{padding-top:0}@media only screen and (max-width:735px){.detail-type[data-v-61ef551b]{padding-left:0}}.detail-content[data-v-61ef551b]{padding-left:2rem}@media only screen and (max-width:735px){.detail-content[data-v-61ef551b]{padding-left:0}}.param-name[data-v-7bb7c035]{font-weight:600;padding-left:1rem;padding-top:1.64706rem}.param-name[data-v-7bb7c035]:first-child{padding-top:0}@media only screen and (max-width:735px){.param-name[data-v-7bb7c035]{padding-left:0}}.param-content[data-v-7bb7c035]{padding-left:2rem}@media only screen and (max-width:735px){.param-content[data-v-7bb7c035]{padding-left:0}}.param-content[data-v-7bb7c035] dt{font-weight:600}.param-content[data-v-7bb7c035] dd{margin-left:1em}.parameters-table[data-v-1455266b] .change-added,.parameters-table[data-v-1455266b] .change-removed{display:inline-block}.parameters-table[data-v-1455266b] .change-removed,.parameters-table[data-v-1455266b] .token-removed{text-decoration:line-through}.param[data-v-1455266b]{font-size:.88235rem;box-sizing:border-box}.param.changed[data-v-1455266b]{display:flex;flex-flow:row wrap;width:100%;padding-left:.70588rem;padding-right:1.88235rem;padding-top:5px;padding-bottom:5px;display:inline-flex}.param.changed.changed[data-v-1455266b]{padding-left:12px}@media only screen and (max-width:735px){.param.changed[data-v-1455266b]{padding-left:0;padding-right:0}.param.changed.changed[data-v-1455266b]{padding-left:12px;padding-right:1.88235rem}}@media only screen and (max-width:735px){.param.changed[data-v-1455266b]{padding-left:0;padding-right:0}}@media only screen and (max-width:735px){.param.changed[data-v-1455266b]:not(.changed){margin-left:0;width:100%}.param.changed.changed[data-v-1455266b]{margin-left:-.70588rem;width:calc(100% + 24px)}}.param.changed+.param.changed[data-v-1455266b]{margin-top:.82353rem}.changed .param-content[data-v-1455266b],.changed .param-symbol[data-v-1455266b]{padding-top:5px;padding-bottom:5px}@media only screen and (max-width:735px){.changed .param-content[data-v-1455266b]{padding-top:0}.changed .param-symbol[data-v-1455266b]{padding-bottom:0}}.param-symbol[data-v-1455266b]{text-align:right}@media only screen and (max-width:735px){.param-symbol[data-v-1455266b]{text-align:left}}.param-symbol[data-v-1455266b] .type-identifier-link{color:var(--color-link)}.param+.param[data-v-1455266b]{margin-top:1.64706rem}.param+.param[data-v-1455266b]:first-child{margin-top:0}.param-content[data-v-1455266b]{padding-left:1rem;padding-right:1.88235rem}@media only screen and (max-width:735px){.param-content[data-v-1455266b]{padding-left:0;padding-right:0}}.property-metadata[data-v-8590589e]{color:var(--color-figure-gray-secondary)}.property-required{font-weight:700}.property-metadata[data-v-0a648a1e]{color:var(--color-figure-gray-secondary)}.property-name[data-v-387d76c0]{font-weight:700}.property-name.deprecated[data-v-387d76c0]{text-decoration:line-through}.property-deprecated[data-v-387d76c0]{margin-left:0}.content[data-v-387d76c0],.content[data-v-387d76c0] p:first-child{display:inline}.response-mimetype[data-v-2faa6020]{color:var(--color-figure-gray-secondary)}.part-name[data-v-458971c5]{font-weight:700}.content[data-v-458971c5],.content[data-v-458971c5] p:first-child{display:inline}.param-name[data-v-74e7f790]{font-weight:700}.param-name.deprecated[data-v-74e7f790]{text-decoration:line-through}.param-deprecated[data-v-74e7f790]{margin-left:0}.content[data-v-74e7f790],.content[data-v-74e7f790] p:first-child{display:inline}.response-name[data-v-57796e8c],.response-reason[data-v-57796e8c]{font-weight:700}@media only screen and (max-width:735px){.response-reason[data-v-57796e8c]{display:none}}.response-name>code>.reason[data-v-57796e8c]{display:none}@media only screen and (max-width:735px){.response-name>code>.reason[data-v-57796e8c]{display:initial}}[data-v-011bef72] h2{font-size:1.88235rem;line-height:1.125;font-weight:400;letter-spacing:.013em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){[data-v-011bef72] h2{font-size:1.64706rem;line-height:1.14286;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){[data-v-011bef72] h2{font-size:1.41176rem;line-height:1.16667;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.primary-content[data-v-011bef72]:before{border-top-color:var(--colors-grid,var(--color-grid));border-top-style:solid;border-top-width:1px;content:"";display:block}.primary-content[data-v-011bef72]>*{margin-bottom:3rem;margin-top:3rem}.primary-content[data-v-011bef72]>:first-child{margin-top:2rem}.relationships-list[data-v-e4fe9834]{list-style:none}.relationships-list.column[data-v-e4fe9834]{margin:0}.relationships-list.inline[data-v-e4fe9834]{-moz-columns:1;columns:1;display:flex;flex-direction:row;flex-wrap:wrap;margin:0}.relationships-list.inline li[data-v-e4fe9834]:not(:last-child):after{content:",\00a0"}.relationships-list.changed[data-v-e4fe9834]{padding-left:.70588rem;padding-right:1.88235rem;padding-top:5px;padding-bottom:5px;display:inline-flex;margin-left:-.76471rem;width:calc(100% + 13px)}.relationships-list.changed.changed[data-v-e4fe9834]{padding-left:12px}@media only screen and (max-width:735px){.relationships-list.changed[data-v-e4fe9834]{padding-left:0;padding-right:0}.relationships-list.changed.changed[data-v-e4fe9834]{padding-left:12px;padding-right:1.88235rem}}@media only screen and (max-width:735px){.relationships-list.changed[data-v-e4fe9834]{padding-left:0;padding-right:0}}@media only screen and (max-width:735px){.relationships-list.changed[data-v-e4fe9834]:not(.changed){margin-left:0;width:100%}.relationships-list.changed.changed[data-v-e4fe9834]{margin-left:-.70588rem;width:calc(100% + 24px)}}.relationships-list.changed[data-v-e4fe9834]:after{margin-top:7px}.relationships-list.changed.column[data-v-e4fe9834]{display:block}.relationships-item[data-v-e4fe9834],.relationships-list[data-v-e4fe9834]{box-sizing:inherit}.conditional-constraints[data-v-e4fe9834]{font-size:.82353rem;margin:.17647rem 0 .58824rem 1.17647rem}.availability[data-v-0c59731a],.platform-list[data-v-0c59731a],.platform[data-v-0c59731a]{box-sizing:inherit}.platform[data-v-0c59731a]{padding-right:2rem;box-sizing:border-box;padding-left:.70588rem;padding-right:1.88235rem;padding-left:0;margin-bottom:.25rem;padding-top:5px;padding-bottom:5px}.platform[data-v-0c59731a]:after{width:1rem;height:1rem;margin-top:6px}.platform.changed[data-v-0c59731a]{padding-left:12px}@media only screen and (max-width:735px){.platform[data-v-0c59731a]{padding-left:0;padding-right:0}.platform.changed[data-v-0c59731a]{padding-left:12px;padding-right:1.88235rem}}.platform[data-v-0c59731a]:last-child{margin-bottom:0}.platform-badge[data-v-0c59731a]{margin-left:.47059rem}.platform.changed[data-v-0c59731a]{margin-left:-.76471rem;width:calc(100% + 13px)}.platform.changed[data-v-0c59731a]:after{width:1rem;height:1rem;margin-top:6px}@media only screen and (max-width:735px){.platform.changed[data-v-0c59731a]:not(.changed){margin-left:0;width:100%}.platform.changed.changed[data-v-0c59731a]{margin-left:-.70588rem;width:calc(100% + 24px)}}.summary[data-v-19bd58b6]{color:var(--colors-secondary-label,var(--color-secondary-label));font-size:.94118rem;margin-bottom:3rem;padding:5px 0 0 4em}@media only screen and (max-width:1068px){.summary[data-v-19bd58b6]{padding-left:2em}}@media only screen and (max-width:735px){.summary[data-v-19bd58b6]{padding-left:0;margin-bottom:2.35294rem;display:grid;grid-gap:.94118rem;grid-template-columns:repeat(auto-fill,minmax(128px,1fr))}}.topictitle[data-v-e1f00c5e]{margin-left:auto;margin-right:auto;width:980px;margin-top:2rem}@media only screen and (max-width:1068px){.topictitle[data-v-e1f00c5e]{width:692px}}@media only screen and (max-width:735px){.topictitle[data-v-e1f00c5e]{width:87.5%}}.eyebrow[data-v-e1f00c5e]{font-size:1.23529rem;line-height:1.19048;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--colors-secondary-label,var(--color-secondary-label));display:block;margin-bottom:1.17647rem}@media only screen and (max-width:735px){.eyebrow[data-v-e1f00c5e]{font-size:1.11765rem;line-height:1.21053;font-weight:400;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.title[data-v-e1f00c5e]{font-size:2.35294rem;line-height:1.1;font-weight:400;letter-spacing:0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){.title[data-v-e1f00c5e]{font-size:1.88235rem;line-height:1.125;font-weight:400;letter-spacing:.013em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.title[data-v-e1f00c5e]{font-size:1.64706rem;line-height:1.14286;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.doc-topic[data-v-134e8272]{background:var(--colors-text-background,var(--color-text-background))}#main[data-v-134e8272]{outline-style:none}.container[data-v-134e8272]{margin-left:auto;margin-right:auto;width:980px;outline-style:none;margin-top:1.5rem}@media only screen and (max-width:1068px){.container[data-v-134e8272]{width:692px}}@media only screen and (max-width:735px){.container[data-v-134e8272]{width:87.5%}}.content-grid[data-v-134e8272]{display:grid;grid-template-columns:75% 25%;grid-template-rows:auto minmax(0,1fr)}@media only screen and (max-width:735px){.content-grid[data-v-134e8272]{display:block}}.content-grid[data-v-134e8272]:after,.content-grid[data-v-134e8272]:before{display:none}.content-grid.full-width[data-v-134e8272]{grid-template-columns:100%}.description[data-v-134e8272]{grid-column:1}.summary[data-v-134e8272]{grid-column:2;grid-row:1/-1}.primary-content[data-v-134e8272]{grid-column:1}.button-cta[data-v-134e8272]{margin-top:2em}[data-v-134e8272] h3{font-size:1.64706rem;line-height:1.14286;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){[data-v-134e8272] h3{font-size:1.41176rem;line-height:1.16667;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){[data-v-134e8272] h3{font-size:1.23529rem;line-height:1.19048;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}[data-v-134e8272] h4{font-size:1.41176rem;line-height:1.16667;font-weight:600;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){[data-v-134e8272] h4{font-size:1.23529rem;line-height:1.19048;font-weight:600;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}[data-v-134e8272] h5{font-size:1.29412rem;line-height:1.18182;font-weight:600;letter-spacing:.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){[data-v-134e8272] h5{font-size:1.17647rem;line-height:1.2;font-weight:600;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){[data-v-134e8272] h5{font-size:1.05882rem;line-height:1.44444;font-weight:600;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}[data-v-134e8272] h6{font-size:1rem;line-height:1.47059;font-weight:600;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif} \ No newline at end of file diff --git a/docs/css/documentation-topic~topic~tutorials-overview.67b822e0.css b/docs/css/documentation-topic~topic~tutorials-overview.67b822e0.css new file mode 100644 index 0000000..6b79038 --- /dev/null +++ b/docs/css/documentation-topic~topic~tutorials-overview.67b822e0.css @@ -0,0 +1,9 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */.svg-icon[data-v-0137d411]{fill:var(--colors-svg-icon-fill-light,var(--color-svg-icon));transform:scale(1);-webkit-transform:scale(1);overflow:visible}.theme-dark .svg-icon[data-v-0137d411]{fill:var(--colors-svg-icon-fill-dark,var(--color-svg-icon))}.svg-icon.icon-inline[data-v-0137d411]{display:inline-block;vertical-align:middle;fill:currentColor}.svg-icon.icon-inline[data-v-0137d411] .svg-icon-stroke{stroke:currentColor}[data-v-0137d411] .svg-icon-stroke{stroke:var(--colors-svg-icon-fill-light,var(--color-svg-icon))}.theme-dark[data-v-0137d411] .svg-icon-stroke{stroke:var(--colors-svg-icon-fill-dark,var(--color-svg-icon))}.label[data-v-5117d474]{font-size:.70588rem;line-height:1.33333;font-weight:600;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.label+[data-v-5117d474]{margin-top:.4em}.deprecated .label[data-v-5117d474]{color:var(--color-aside-deprecated)}.experiment .label[data-v-5117d474]{color:var(--color-aside-experiment)}.important .label[data-v-5117d474]{color:var(--color-aside-important)}.note .label[data-v-5117d474]{color:var(--color-aside-note)}.tip .label[data-v-5117d474]{color:var(--color-aside-tip)}.warning .label[data-v-5117d474]{color:var(--color-aside-warning)}.doc-topic aside[data-v-5117d474]{border-radius:4px;padding:.94118rem;border:0 solid;border-left-width:6px}.doc-topic aside.deprecated[data-v-5117d474]{background-color:var(--color-aside-deprecated-background);border-color:var(--color-aside-deprecated-border);box-shadow:0 0 0 0 var(--color-aside-deprecated-border) inset,0 0 0 0 var(--color-aside-deprecated-border)}.doc-topic aside.experiment[data-v-5117d474]{background-color:var(--color-aside-experiment-background);border-color:var(--color-aside-experiment-border);box-shadow:0 0 0 0 var(--color-aside-experiment-border) inset,0 0 0 0 var(--color-aside-experiment-border)}.doc-topic aside.important[data-v-5117d474]{background-color:var(--color-aside-important-background);border-color:var(--color-aside-important-border);box-shadow:0 0 0 0 var(--color-aside-important-border) inset,0 0 0 0 var(--color-aside-important-border)}.doc-topic aside.note[data-v-5117d474]{background-color:var(--color-aside-note-background);border-color:var(--color-aside-note-border);box-shadow:0 0 0 0 var(--color-aside-note-border) inset,0 0 0 0 var(--color-aside-note-border)}.doc-topic aside.tip[data-v-5117d474]{background-color:var(--color-aside-tip-background);border-color:var(--color-aside-tip-border);box-shadow:0 0 0 0 var(--color-aside-tip-border) inset,0 0 0 0 var(--color-aside-tip-border)}.doc-topic aside.warning[data-v-5117d474]{background-color:var(--color-aside-warning-background);border-color:var(--color-aside-warning-border);box-shadow:0 0 0 0 var(--color-aside-warning-border) inset,0 0 0 0 var(--color-aside-warning-border)}.doc-topic aside .label[data-v-5117d474]{font-size:1rem;line-height:1.52941;font-weight:600;letter-spacing:-.021em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}code[data-v-05f4a5b7]{speak-punctuation:code}.nav-menu-items[data-v-aa06bfc4]{display:flex;justify-content:flex-end}.nav--in-breakpoint-range .nav-menu-items[data-v-aa06bfc4]{display:block;opacity:0;padding:1rem 1.88235rem 1.64706rem 1.88235rem;transform:translate3d(0,-50px,0);transition:transform 1s cubic-bezier(.07,1.06,.27,.95) .5s,opacity .7s cubic-bezier(.07,1.06,.27,.95) .2s}.nav--is-open.nav--in-breakpoint-range .nav-menu-items[data-v-aa06bfc4]{opacity:1;transform:translateZ(0);transition-delay:.2s,.4s}.nav--in-breakpoint-range .nav-menu-items[data-v-aa06bfc4]:not(:only-child):not(:last-child){padding-bottom:0}.nav--in-breakpoint-range .nav-menu-items[data-v-aa06bfc4]:not(:only-child):last-child{padding-top:0}.button-cta[data-v-494ad9c8]{border-radius:var(--style-button-borderRadius,4px);background:var(--colors-button-light-background,var(--color-button-background));color:var(--colors-button-text,var(--color-button-text));cursor:pointer;min-width:1.76471rem;padding:.23529rem .88235rem;text-align:center;white-space:nowrap;display:inline-block;font-size:1rem;line-height:1.47059;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.button-cta[data-v-494ad9c8]:active{background:var(--colors-button-light-backgroundActive,var(--color-button-background-active));outline:none}.button-cta[data-v-494ad9c8]:hover:not([disabled]){background:var(--colors-button-light-backgroundHover,var(--color-button-background-hover));text-decoration:none}.button-cta[data-v-494ad9c8]:disabled{opacity:.32;cursor:default}.fromkeyboard .button-cta[data-v-494ad9c8]:focus{box-shadow:0 0 0 4px var(--color-focus-color);outline:none}.button-cta.is-dark[data-v-494ad9c8]{background:var(--colors-button-dark-background,#06f)}.button-cta.is-dark[data-v-494ad9c8]:active{background:var(--colors-button-dark-backgroundActive,var(--color-button-background-active))}.button-cta.is-dark[data-v-494ad9c8]:hover:not([disabled]){background:var(--colors-button-dark-backgroundHover,var(--color-button-background-hover))}.file-icon[data-v-7c381064]{position:relative;align-items:flex-end;height:24px;margin:0 .5rem 0 1rem}.filename[data-v-c8c40662]{color:var(--text,var(--colors-secondary-label,var(--color-secondary-label)));font-size:.94118rem;line-height:1.1875;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;margin-top:1rem}@media only screen and (max-width:735px){.filename[data-v-c8c40662]{font-size:.82353rem;line-height:1.42857;font-weight:400;letter-spacing:-.016em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;margin-top:0}}.filename>a[data-v-c8c40662],.filename>span[data-v-c8c40662]{display:flex;align-items:center;line-height:normal}a[data-v-c8c40662]{color:var(--url,var(--color-link))}.code-line-container[data-v-193a0b82]{display:flex}.code-number[data-v-193a0b82]{padding:0 1rem 0 8px;text-align:right;min-width:2em;color:#666;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-number[data-v-193a0b82]:before{content:attr(data-line-number)}.highlighted[data-v-193a0b82]{background:var(--line-highlight,var(--color-code-line-highlight));border-left:4px solid var(--color-code-line-highlight-border)}.highlighted .code-number[data-v-193a0b82]{padding-left:4px}pre[data-v-193a0b82]{padding:14px 0;display:flex;overflow:auto;-webkit-overflow-scrolling:touch;white-space:pre;word-wrap:normal;height:100%}@media only screen and (max-width:735px){pre[data-v-193a0b82]{padding-top:.82353rem}}code[data-v-193a0b82]{display:flex;flex-direction:column;white-space:pre;word-wrap:normal;flex-grow:9999}.code-line-container[data-v-193a0b82]{flex-shrink:0;padding-right:14px}.code-listing[data-v-193a0b82],.container-general[data-v-193a0b82]{display:flex}.code-listing[data-v-193a0b82]{flex-direction:column;min-height:100%;border-radius:4px;overflow:auto}.code-listing.single-line[data-v-193a0b82]{border-radius:4px}.container-general[data-v-193a0b82],pre[data-v-193a0b82]{flex-grow:1}code[data-v-369467b5]{width:100%}.container-general[data-v-369467b5]{display:flex;flex-flow:row wrap}.container-general .code-line[data-v-369467b5]{flex:1 0 auto}.code-line-container[data-v-369467b5]{align-items:center;display:flex;border-left:4px solid transparent;counter-increment:linenumbers;padding-right:14px}.code-number[data-v-369467b5]{font-size:.70588rem;line-height:1.5;font-weight:400;letter-spacing:0;font-family:Menlo,monospace;padding:0 1rem 0 8px;text-align:right;min-width:2.01em;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-number[data-v-369467b5]:before{content:counter(linenumbers)}.code-line[data-v-369467b5]{display:flex}pre[data-v-369467b5]{padding:14px 0;display:flex;flex-flow:row wrap;overflow:auto;-webkit-overflow-scrolling:touch;white-space:pre;word-wrap:normal}@media only screen and (max-width:735px){pre[data-v-369467b5]{padding-top:.82353rem}}.collapsible-code-listing[data-v-369467b5]{background:var(--background,var(--color-code-background));border-color:var(--colors-grid,var(--color-grid));color:var(--text,var(--color-code-plain));border-radius:4px;border-style:solid;border-width:1px;counter-reset:linenumbers;font-size:15px}.collapsible-code-listing.single-line[data-v-369467b5]{border-radius:4px}.collapsible[data-v-369467b5]{background:var(--color-code-collapsible-background);color:var(--color-code-collapsible-text)}.collapsed[data-v-369467b5]:before{content:"⋯";display:inline-block;font-family:monospace;font-weight:700;height:100%;line-height:1;text-align:right;width:2.3rem}.collapsed .code-line-container[data-v-369467b5]{height:0;visibility:hidden}.row[data-v-be73599c]{box-sizing:border-box;display:flex;flex-flow:row wrap}.col[data-v-2ee3ad8b]{box-sizing:border-box;flex:none}.large-1[data-v-2ee3ad8b]{flex-basis:8.33333%;max-width:8.33333%}.large-2[data-v-2ee3ad8b]{flex-basis:16.66667%;max-width:16.66667%}.large-3[data-v-2ee3ad8b]{flex-basis:25%;max-width:25%}.large-4[data-v-2ee3ad8b]{flex-basis:33.33333%;max-width:33.33333%}.large-5[data-v-2ee3ad8b]{flex-basis:41.66667%;max-width:41.66667%}.large-6[data-v-2ee3ad8b]{flex-basis:50%;max-width:50%}.large-7[data-v-2ee3ad8b]{flex-basis:58.33333%;max-width:58.33333%}.large-8[data-v-2ee3ad8b]{flex-basis:66.66667%;max-width:66.66667%}.large-9[data-v-2ee3ad8b]{flex-basis:75%;max-width:75%}.large-10[data-v-2ee3ad8b]{flex-basis:83.33333%;max-width:83.33333%}.large-11[data-v-2ee3ad8b]{flex-basis:91.66667%;max-width:91.66667%}.large-12[data-v-2ee3ad8b]{flex-basis:100%;max-width:100%}.large-centered[data-v-2ee3ad8b]{margin-left:auto;margin-right:auto}.large-uncentered[data-v-2ee3ad8b]{margin-left:0;margin-right:0}@media only screen and (max-width:1068px){.medium-1[data-v-2ee3ad8b]{flex-basis:8.33333%;max-width:8.33333%}.medium-2[data-v-2ee3ad8b]{flex-basis:16.66667%;max-width:16.66667%}.medium-3[data-v-2ee3ad8b]{flex-basis:25%;max-width:25%}.medium-4[data-v-2ee3ad8b]{flex-basis:33.33333%;max-width:33.33333%}.medium-5[data-v-2ee3ad8b]{flex-basis:41.66667%;max-width:41.66667%}.medium-6[data-v-2ee3ad8b]{flex-basis:50%;max-width:50%}.medium-7[data-v-2ee3ad8b]{flex-basis:58.33333%;max-width:58.33333%}.medium-8[data-v-2ee3ad8b]{flex-basis:66.66667%;max-width:66.66667%}.medium-9[data-v-2ee3ad8b]{flex-basis:75%;max-width:75%}.medium-10[data-v-2ee3ad8b]{flex-basis:83.33333%;max-width:83.33333%}.medium-11[data-v-2ee3ad8b]{flex-basis:91.66667%;max-width:91.66667%}.medium-12[data-v-2ee3ad8b]{flex-basis:100%;max-width:100%}.medium-centered[data-v-2ee3ad8b]{margin-left:auto;margin-right:auto}.medium-uncentered[data-v-2ee3ad8b]{margin-left:0;margin-right:0}}@media only screen and (max-width:735px){.small-1[data-v-2ee3ad8b]{flex-basis:8.33333%;max-width:8.33333%}.small-2[data-v-2ee3ad8b]{flex-basis:16.66667%;max-width:16.66667%}.small-3[data-v-2ee3ad8b]{flex-basis:25%;max-width:25%}.small-4[data-v-2ee3ad8b]{flex-basis:33.33333%;max-width:33.33333%}.small-5[data-v-2ee3ad8b]{flex-basis:41.66667%;max-width:41.66667%}.small-6[data-v-2ee3ad8b]{flex-basis:50%;max-width:50%}.small-7[data-v-2ee3ad8b]{flex-basis:58.33333%;max-width:58.33333%}.small-8[data-v-2ee3ad8b]{flex-basis:66.66667%;max-width:66.66667%}.small-9[data-v-2ee3ad8b]{flex-basis:75%;max-width:75%}.small-10[data-v-2ee3ad8b]{flex-basis:83.33333%;max-width:83.33333%}.small-11[data-v-2ee3ad8b]{flex-basis:91.66667%;max-width:91.66667%}.small-12[data-v-2ee3ad8b]{flex-basis:100%;max-width:100%}.small-centered[data-v-2ee3ad8b]{margin-left:auto;margin-right:auto}.small-uncentered[data-v-2ee3ad8b]{margin-left:0;margin-right:0}}.tabnav[data-v-42371214]{margin:.88235rem 0 1.47059rem 0}.tabnav-items[data-v-42371214]{display:inline-block;margin:0;text-align:center}.tabnav-item[data-v-723a9588]{border-bottom:1px solid;border-color:var(--colors-tabnav-item-border-color,var(--color-tabnav-item-border-color));display:inline-block;list-style:none;padding-left:1.76471rem;margin:0;outline:none}.tabnav-item[data-v-723a9588]:first-child{padding-left:0}.tabnav-item[data-v-723a9588]:nth-child(n+1){margin:0}.tabnav-link[data-v-723a9588]{color:var(--colors-secondary-label,var(--color-secondary-label));font-size:1rem;line-height:1;font-weight:400;letter-spacing:-.021em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:9px 0 11px;margin-top:2px;margin-bottom:4px;text-align:left;text-decoration:none;display:block;position:relative;z-index:0}.tabnav-link[data-v-723a9588]:hover{text-decoration:none}.tabnav-link[data-v-723a9588]:focus{outline-offset:-1px}.tabnav-link[data-v-723a9588]:after{content:"";position:absolute;bottom:-5px;left:0;width:100%;border:1px solid transparent}.tabnav-link.active[data-v-723a9588]{color:var(--colors-text,var(--color-text));cursor:default;z-index:10}.tabnav-link.active[data-v-723a9588]:after{border-bottom-color:var(--colors-text,var(--color-text))}.controls[data-v-6197ce3f]{margin-top:5px;font-size:14px;display:flex;justify-content:flex-end}.controls a[data-v-6197ce3f]{color:var(--colors-text,var(--color-text));display:flex;align-items:center}.controls .control-icon[data-v-6197ce3f]{width:1.05em;margin-right:.3em}[data-v-7be42fb4] figcaption+*{margin-top:1rem}.caption[data-v-0bcb8b58]{font-size:.82353rem;line-height:1.5;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}[data-v-0bcb8b58] p{display:inline-block}[data-v-3a939631] img{max-width:100%}*+.table-wrapper,.table-wrapper+*{margin-top:1.6em}.table-wrapper[data-v-358dcd5e]{overflow:auto;-webkit-overflow-scrolling:touch}[data-v-358dcd5e] th{font-weight:600}[data-v-358dcd5e] td,[data-v-358dcd5e] th{border-color:var(--color-fill-gray-tertiary);border-style:solid;border-width:1px 0;padding:.58824rem}s[data-v-eb91ce54]:after,s[data-v-eb91ce54]:before{position:absolute;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(0 0 99.9% 99.9%);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}s[data-v-eb91ce54]:before{content:" [start of stricken text] "}s[data-v-eb91ce54]:after{content:" [end of stricken text] "}.nav[data-v-aada5b66]{position:sticky;top:0;width:100%;height:3.05882rem;z-index:9997;color:var(--color-nav-color)}@media only screen and (max-width:767px){.nav[data-v-aada5b66]{min-width:320px;height:2.82353rem}}.theme-dark.nav[data-v-aada5b66]{background:none;color:var(--color-nav-dark-color)}.nav__wrapper[data-v-aada5b66]{position:absolute;top:0;left:0;width:100%;height:auto;min-height:100%;z-index:1}.nav__background[data-v-aada5b66]{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1;transition:background-color .5s ease-in}.nav__background[data-v-aada5b66]:after{background-color:var(--color-nav-keyline)}.nav--solid-background .nav__background[data-v-aada5b66]{background-color:var(--color-nav-solid-background);-webkit-backdrop-filter:none;backdrop-filter:none}.nav--is-open.nav--solid-background .nav__background[data-v-aada5b66],.nav--is-sticking.nav--solid-background .nav__background[data-v-aada5b66]{background-color:var(--color-nav-solid-background)}.nav--is-open.theme-dark.nav--solid-background .nav__background[data-v-aada5b66],.nav--is-sticking.theme-dark.nav--solid-background .nav__background[data-v-aada5b66],.theme-dark.nav--solid-background .nav__background[data-v-aada5b66]{background-color:var(--color-nav-dark-solid-background)}.nav--in-breakpoint-range .nav__background[data-v-aada5b66]{min-height:2.82353rem;transition:background-color .5s ease .7s}.nav--is-sticking .nav__background[data-v-aada5b66]{background-color:var(--color-nav-expanded);max-height:none;transition:background-color .5s ease;transition-property:background-color,-webkit-backdrop-filter;transition-property:background-color,backdrop-filter;transition-property:background-color,backdrop-filter,-webkit-backdrop-filter}.nav--is-sticking .nav__background[data-v-aada5b66]:after{background-color:var(--color-nav-sticking-expanded-keyline)}@supports ((-webkit-backdrop-filter:initial) or (backdrop-filter:initial)){.nav--is-sticking .nav__background[data-v-aada5b66]{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:var(--color-nav-uiblur-stuck)}}.theme-dark.nav--is-sticking .nav__background[data-v-aada5b66]{background-color:var(--color-nav-dark-stuck)}@supports ((-webkit-backdrop-filter:initial) or (backdrop-filter:initial)){.theme-dark.nav--is-sticking .nav__background[data-v-aada5b66]{background-color:var(--color-nav-dark-uiblur-stuck)}}.nav--is-open .nav__background[data-v-aada5b66]{background-color:var(--color-nav-expanded);max-height:none;transition:background-color .5s ease;transition-property:background-color,-webkit-backdrop-filter;transition-property:background-color,backdrop-filter;transition-property:background-color,backdrop-filter,-webkit-backdrop-filter}.nav--is-open .nav__background[data-v-aada5b66]:after{background-color:var(--color-nav-sticking-expanded-keyline)}@supports ((-webkit-backdrop-filter:initial) or (backdrop-filter:initial)){.nav--is-open .nav__background[data-v-aada5b66]{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:var(--color-nav-uiblur-expanded)}}.theme-dark.nav--is-open .nav__background[data-v-aada5b66]{background-color:var(--color-nav-dark-expanded)}@supports ((-webkit-backdrop-filter:initial) or (backdrop-filter:initial)){.theme-dark.nav--is-open .nav__background[data-v-aada5b66]{background-color:var(--color-nav-dark-uiblur-expanded)}}.theme-dark .nav__background[data-v-aada5b66]:after{background-color:var(--color-nav-dark-keyline)}.nav--is-open.theme-dark .nav__background[data-v-aada5b66]:after,.nav--is-sticking.theme-dark .nav__background[data-v-aada5b66]:after{background-color:var(--color-nav-dark-sticking-expanded-keyline)}.nav__background[data-v-aada5b66]:after{content:"";display:block;position:absolute;top:100%;left:50%;transform:translateX(-50%);width:980px;height:1px;z-index:1}@media only screen and (max-width:1023px){.nav__background[data-v-aada5b66]:after{width:100%}}.nav--noborder .nav__background[data-v-aada5b66]:after{display:none}.nav--is-sticking.nav--noborder .nav__background[data-v-aada5b66]:after{display:block}.nav--fullwidth-border .nav__background[data-v-aada5b66]:after,.nav--is-open .nav__background[data-v-aada5b66]:after,.nav--is-sticking .nav__background[data-v-aada5b66]:after,.nav--solid-background .nav__background[data-v-aada5b66]:after{width:100%}.nav-overlay[data-v-aada5b66]{position:fixed;left:0;right:0;top:0;display:block;opacity:0}.nav--is-open .nav-overlay[data-v-aada5b66]{background-color:rgba(51,51,51,.4);transition:opacity .7s cubic-bezier(.07,1.06,.27,.95) .2s;bottom:0;opacity:1}.nav-wrapper[data-v-aada5b66]{position:absolute;top:0;left:0;width:100%;height:auto;min-height:100%;z-index:1}.nav-content[data-v-aada5b66]{display:flex;padding:0 1.29412rem;max-width:980px;margin:0 auto;position:relative;z-index:2;justify-content:space-between}@supports (padding:calc(max(0px))){.nav-content[data-v-aada5b66]{padding-left:calc(max(1.29412rem, env(safe-area-inset-left)));padding-right:calc(max(1.29412rem, env(safe-area-inset-right)))}}@media only screen and (max-width:767px){.nav-content[data-v-aada5b66]{padding:0 .94118rem}}.nav--in-breakpoint-range .nav-content[data-v-aada5b66]{display:grid;grid-template-columns:1fr auto;grid-auto-rows:minmax(-webkit-min-content,-webkit-max-content);grid-auto-rows:minmax(min-content,max-content);grid-template-areas:"title actions" "menu menu"}.nav-menu[data-v-aada5b66]{font-size:.70588rem;line-height:1;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;flex:1 1 auto;display:flex;padding-top:10px;min-width:0}@media only screen and (max-width:767px){.nav-menu[data-v-aada5b66]{font-size:.82353rem;line-height:1;font-weight:400;letter-spacing:-.02em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.nav--in-breakpoint-range .nav-menu[data-v-aada5b66]{font-size:.82353rem;line-height:1;font-weight:400;letter-spacing:-.02em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding-top:0;grid-area:menu}.nav-menu-tray[data-v-aada5b66]{width:100%;max-width:100%;align-items:center;display:flex;justify-content:space-between}.nav--in-breakpoint-range .nav-menu-tray[data-v-aada5b66]{display:block;overflow:hidden;pointer-events:none;visibility:hidden;max-height:0;transition:max-height .4s ease-in 0s,visibility 0s linear 1s}.nav--is-open.nav--in-breakpoint-range .nav-menu-tray[data-v-aada5b66]{max-height:calc(100vh - 5.64706rem);overflow-y:auto;-webkit-overflow-scrolling:touch;pointer-events:auto;visibility:visible;transition-delay:.2s,0s}.nav--is-opening.nav--is-open.nav--in-breakpoint-range .nav-menu-tray[data-v-aada5b66]{overflow-y:hidden}.nav--is-sticking.nav--is-open.nav--in-breakpoint-range .nav-menu-tray[data-v-aada5b66]{max-height:calc(100vh - 2.82353rem)}.nav-actions[data-v-aada5b66]{display:flex;align-items:center;max-height:2.82353rem}.nav--in-breakpoint-range .nav-actions[data-v-aada5b66]{grid-area:actions;justify-content:flex-end}.nav-title[data-v-aada5b66]{height:3.05882rem;font-size:1.11765rem;line-height:1.42105;font-weight:400;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;cursor:default;display:flex;align-items:center;white-space:nowrap;box-sizing:border-box}@media only screen and (max-width:767px){.nav-title[data-v-aada5b66]{padding-top:0;height:2.82353rem;width:90%}}.nav--in-breakpoint-range .nav-title[data-v-aada5b66]{grid-area:title}.nav-title[data-v-aada5b66] span{height:100%;line-height:normal}.nav-title a[data-v-aada5b66]{display:inline-block;letter-spacing:inherit;line-height:normal;margin:0;text-decoration:none;white-space:nowrap}.nav-title a[data-v-aada5b66]:hover{text-decoration:none}@media only screen and (max-width:767px){.nav-title a[data-v-aada5b66]{display:flex}}.nav-title[data-v-aada5b66],.nav-title a[data-v-aada5b66]{color:var(--color-figure-gray);transition:color .5s ease-in}.nav--is-open.theme-dark .nav-title[data-v-aada5b66],.nav--is-open.theme-dark .nav-title a[data-v-aada5b66],.nav--is-sticking.theme-dark .nav-title[data-v-aada5b66],.nav--is-sticking.theme-dark .nav-title a[data-v-aada5b66],.theme-dark .nav-title[data-v-aada5b66],.theme-dark .nav-title a[data-v-aada5b66]{color:var(--color-nav-dark-link-color)}.nav-ax-toggle[data-v-aada5b66]{display:none;position:absolute;top:0;left:0;width:1px;height:1px;z-index:10}.nav-ax-toggle[data-v-aada5b66]:focus{outline-offset:-6px;width:100%;height:100%}.nav--in-breakpoint-range .nav-ax-toggle[data-v-aada5b66]{display:block}.nav-menucta[data-v-aada5b66]{cursor:pointer;display:none;align-items:center;overflow:hidden;width:1.17647rem;-webkit-tap-highlight-color:transparent;height:2.82353rem}.nav--in-breakpoint-range .nav-menucta[data-v-aada5b66]{display:flex}.nav-menucta-chevron[data-v-aada5b66]{display:block;position:relative;width:100%;height:.70588rem;transition:transform .3s linear;margin-top:2px}.nav-menucta-chevron[data-v-aada5b66]:after,.nav-menucta-chevron[data-v-aada5b66]:before{content:"";display:block;position:absolute;top:.58824rem;width:.70588rem;height:.05882rem;transition:transform .3s linear;background:var(--color-figure-gray)}.nav-menucta-chevron[data-v-aada5b66]:before{right:50%;border-radius:.5px 0 0 .5px}.nav-menucta-chevron[data-v-aada5b66]:after{left:50%;border-radius:0 .5px .5px 0}.nav-menucta-chevron[data-v-aada5b66]:before{transform-origin:100% 100%;transform:rotate(40deg) scaleY(1.5)}.nav-menucta-chevron[data-v-aada5b66]:after{transform-origin:0 100%;transform:rotate(-40deg) scaleY(1.5)}.nav--is-open .nav-menucta-chevron[data-v-aada5b66]{transform:scaleY(-1)}.theme-dark .nav-menucta-chevron[data-v-aada5b66]:after,.theme-dark .nav-menucta-chevron[data-v-aada5b66]:before{background:var(--color-nav-dark-link-color)}[data-v-aada5b66] .nav-menu-link{color:var(--color-nav-link-color)}[data-v-aada5b66] .nav-menu-link:hover{color:var(--color-nav-link-color-hover);text-decoration:none}.theme-dark[data-v-aada5b66] .nav-menu-link{color:var(--color-nav-dark-link-color)}.theme-dark[data-v-aada5b66] .nav-menu-link:hover{color:var(--color-nav-dark-link-color-hover)}[data-v-aada5b66] .nav-menu-link.current{color:var(--color-nav-current-link);cursor:default}[data-v-aada5b66] .nav-menu-link.current:hover{color:var(--color-nav-current-link)}.theme-dark[data-v-aada5b66] .nav-menu-link.current,.theme-dark[data-v-aada5b66] .nav-menu-link.current:hover{color:var(--color-nav-dark-current-link)} \ No newline at end of file diff --git a/docs/css/index.47bc740e.css b/docs/css/index.47bc740e.css new file mode 100644 index 0000000..71872c3 --- /dev/null +++ b/docs/css/index.47bc740e.css @@ -0,0 +1,9 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */.color-scheme-toggle[data-v-4472ec1e]{--toggle-color-fill:var(--color-button-background);--toggle-color-text:var(--color-fill-blue);font-size:.70588rem;line-height:1.33333;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;border:1px solid var(--toggle-color-fill);border-radius:var(--toggle-border-radius-outer,4px);display:inline-flex;padding:1px}@media screen{[data-color-scheme=dark] .color-scheme-toggle[data-v-4472ec1e]{--toggle-color-text:var(--color-figure-blue)}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .color-scheme-toggle[data-v-4472ec1e]{--toggle-color-text:var(--color-figure-blue)}}input[data-v-4472ec1e]{position:absolute;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(0 0 99.9% 99.9%);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.text[data-v-4472ec1e]{border:1px solid transparent;border-radius:var(--toggle-border-radius-inner,2px);color:var(--toggle-color-text);display:inline-block;text-align:center;padding:1px 6px;min-width:42px;box-sizing:border-box}.text[data-v-4472ec1e]:hover{cursor:pointer}input:checked+.text[data-v-4472ec1e]{--toggle-color-text:var(--color-button-text);background:var(--toggle-color-fill);border-color:var(--toggle-color-fill)}.footer[data-v-67c823d8]{border-top:1px solid var(--color-grid)}.row[data-v-67c823d8]{margin-left:auto;margin-right:auto;width:980px;display:flex;flex-direction:row-reverse;padding:20px 0}@media only screen and (max-width:1068px){.row[data-v-67c823d8]{width:692px}}@media only screen and (max-width:735px){.row[data-v-67c823d8]{width:87.5%}}.InitialLoadingPlaceholder[data-v-47e4ace8]{background:var(--colors-loading-placeholder-background,var(--color-loading-placeholder-background));height:100vh;width:100%}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;background-color:var(--colors-text-background,var(--color-text-background));height:100%}abbr,blockquote,body,button,dd,dl,dt,fieldset,figure,form,h1,h2,h3,h4,h5,h6,hgroup,input,legend,li,ol,p,pre,ul{margin:0;padding:0}address,caption,code,figcaption,pre,th{font-size:1em;font-weight:400;font-style:normal}fieldset,iframe,img{border:0}caption,th{text-align:left}table{border-collapse:collapse;border-spacing:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}button{background:none;border:0;box-sizing:content-box;color:inherit;cursor:pointer;font:inherit;line-height:inherit;overflow:visible;vertical-align:inherit}button:disabled{cursor:default}:focus{outline:4px solid var(--color-focus-color);outline-offset:1px}::-moz-focus-inner{border:0;padding:0}@media print{#content,#main,body{color:#000}a,a:link,a:visited{color:#000;text-decoration:none}.hide,.noprint{display:none}}body{height:100%;min-width:320px}html{font:var(--typography-html-font,17px "Helvetica Neue","Helvetica","Arial",sans-serif);quotes:"“" "”"}body{font-size:1rem;line-height:1.47059;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;background-color:var(--color-fill);color:var(--colors-text,var(--color-text));font-style:normal;word-wrap:break-word}body,button,input,select,textarea{font-synthesis:none;-moz-font-feature-settings:"kern";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;direction:ltr;text-align:left}h1,h2,h3,h4,h5,h6{color:var(--colors-header-text,var(--color-header-text))}h1+*,h2+*,h3+*,h4+*,h5+*,h6+*{margin-top:.8em}h1+h1,h1+h2,h1+h3,h1+h4,h1+h5,h1+h6,h2+h1,h2+h2,h2+h3,h2+h4,h2+h5,h2+h6,h3+h1,h3+h2,h3+h3,h3+h4,h3+h5,h3+h6,h4+h1,h4+h2,h4+h3,h4+h4,h4+h5,h4+h6,h5+h1,h5+h2,h5+h3,h5+h4,h5+h5,h5+h6,h6+h1,h6+h2,h6+h3,h6+h4,h6+h5,h6+h6{margin-top:.4em}ol+h1,ol+h2,ol+h3,ol+h4,ol+h5,ol+h6,p+h1,p+h2,p+h3,p+h4,p+h5,p+h6,ul+h1,ul+h2,ul+h3,ul+h4,ul+h5,ul+h6{margin-top:1.6em}ol+*,p+*,ul+*{margin-top:.8em}ol,ul{margin-left:1.17647em}ol ol,ol ul,ul ol,ul ul{margin-top:0;margin-bottom:0}nav ol,nav ul{margin:0;list-style:none}li li{font-size:1em}a{color:var(--colors-link,var(--color-link))}a:link,a:visited{text-decoration:none}a:hover{text-decoration:underline}a:active{text-decoration:none}p+a{display:inline-block}b,strong{font-weight:600}cite,dfn,em,i{font-style:italic}sup{font-size:.6em;vertical-align:top;position:relative;bottom:-.2em}h1 sup,h2 sup,h3 sup{font-size:.4em}sup a{vertical-align:inherit;color:inherit}sup a:hover{color:var(--figure-blue);text-decoration:none}sub{line-height:1}abbr{border:0}pre{overflow:auto;-webkit-overflow-scrolling:auto;white-space:pre;word-wrap:normal}code{font-family:Menlo,monospace;font-weight:inherit;letter-spacing:0}.syntax-comment{color:var(--syntax-comment,var(--color-syntax-comments))}.syntax-quote{color:var(--syntax-quote,var(--color-syntax-comments))}.syntax-keyword{color:var(--syntax-keyword,var(--color-syntax-keywords))}.syntax-literal{color:var(--syntax-literal,var(--color-syntax-keywords))}.syntax-selector-tag{color:var(--syntax-selector-tag,var(--color-syntax-keywords))}.syntax-string{color:var(--syntax-string,var(--color-syntax-strings))}.syntax-bullet{color:var(--syntax-bullet,var(--color-syntax-characters))}.syntax-meta{color:var(--syntax-meta,var(--color-syntax-characters))}.syntax-number{color:var(--syntax-number,var(--color-syntax-characters))}.syntax-symbol{color:var(--syntax-symbol,var(--color-syntax-characters))}.syntax-tag{color:var(--syntax-tag,var(--color-syntax-characters))}.syntax-attr{color:var(--syntax-attr,var(--color-syntax-other-type-names))}.syntax-built_in{color:var(--syntax-built_in,var(--color-syntax-other-type-names))}.syntax-builtin-name{color:var(--syntax-builtin-name,var(--color-syntax-other-type-names))}.syntax-class{color:var(--syntax-class,var(--color-syntax-other-type-names))}.syntax-params{color:var(--syntax-params,var(--color-syntax-other-type-names))}.syntax-section{color:var(--syntax-section,var(--color-syntax-other-type-names))}.syntax-title{color:var(--syntax-title,var(--color-syntax-other-type-names))}.syntax-type{color:var(--syntax-type,var(--color-syntax-other-type-names))}.syntax-attribute{color:var(--syntax-attribute,var(--color-syntax-plain-text))}.syntax-identifier{color:var(--syntax-identifier,var(--color-syntax-plain-text))}.syntax-subst{color:var(--syntax-subst,var(--color-syntax-plain-text))}.syntax-doctag,.syntax-strong{font-weight:700}.syntax-emphasis,.syntax-link{font-style:italic}[data-syntax=swift] .syntax-meta{color:var(--syntax-meta,var(--color-syntax-keywords))}[data-syntax=swift] .syntax-class,[data-syntax=swift] .syntax-keyword+.syntax-params,[data-syntax=swift] .syntax-params+.syntax-params{color:unset}[data-syntax=json] .syntax-attr{color:var(--syntax-attr,var(--color-syntax-strings))}#skip-nav{position:absolute;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(0 0 99.9% 99.9%);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}#skip-nav:active,#skip-nav:focus{position:relative;float:left;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;color:var(--color-figure-blue);font-size:1em;padding:0 10px;z-index:100000;top:0;left:0;height:44px;line-height:44px;-webkit-clip-path:unset;clip-path:unset}.nav--in-breakpoint-range #skip-nav{display:none}.visuallyhidden{position:absolute;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(0 0 99.9% 99.9%);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}.changed{border:1px solid var(--color-changes-modified);border-radius:4px;position:relative}.changed.has-multiple-lines,.has-multiple-lines .changed{border-radius:4px}.changed:after{right:0;background-image:url(../img/modified-icon.f496e73d.svg);background-repeat:no-repeat;bottom:0;content:" ";margin:auto;margin-right:7px;position:absolute;top:0;width:1.17647rem;height:1.17647rem;margin-top:.41176rem;z-index:2}@media screen{[data-color-scheme=dark] .changed:after{background-image:url(../img/modified-icon.f496e73d.svg)}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .changed:after{background-image:url(../img/modified-icon.f496e73d.svg)}}.changed-added{border-color:var(--color-changes-added)}.changed-added:after{background-image:url(../img/added-icon.d6f7e47d.svg)}@media screen{[data-color-scheme=dark] .changed-added:after{background-image:url(../img/added-icon.d6f7e47d.svg)}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .changed-added:after{background-image:url(../img/added-icon.d6f7e47d.svg)}}.changed-deprecated{border-color:var(--color-changes-deprecated)}.changed-deprecated:after{background-image:url(../img/deprecated-icon.015b4f17.svg)}@media screen{[data-color-scheme=dark] .changed-deprecated:after{background-image:url(../img/deprecated-icon.015b4f17.svg)}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .changed-deprecated:after{background-image:url(../img/deprecated-icon.015b4f17.svg)}}.changed.link-block:after,.changed.relationships-item:after,.link-block .changed:after{margin-top:7px}.change-added,.change-removed{padding:2px 0}.change-removed{background-color:var(--color-highlight-red)}.change-added{background-color:var(--color-highlight-green)}body{color-scheme:light dark}body[data-color-scheme=light]{color-scheme:light}body[data-color-scheme=dark]{color-scheme:dark}body{--color-fill:#fff;--color-fill-secondary:#f7f7f7;--color-fill-tertiary:#f0f0f0;--color-fill-quaternary:#282828;--color-fill-blue:#00f;--color-fill-gray:#ccc;--color-fill-gray-secondary:#f5f5f5;--color-fill-gray-tertiary:#f0f0f0;--color-fill-green-secondary:#f0fff0;--color-fill-orange-secondary:#fffaf6;--color-fill-red-secondary:#fff0f5;--color-figure-blue:#36f;--color-figure-gray:#000;--color-figure-gray-secondary:#666;--color-figure-gray-secondary-alt:#666;--color-figure-gray-tertiary:#666;--color-figure-green:green;--color-figure-light-gray:#666;--color-figure-orange:#c30;--color-figure-red:red;--color-tutorials-teal:#000;--color-article-background:var(--color-fill-tertiary);--color-article-body-background:var(--color-fill);--color-aside-deprecated:var(--color-figure-gray);--color-aside-deprecated-background:var(--color-fill-orange-secondary);--color-aside-deprecated-border:var(--color-figure-orange);--color-aside-experiment:var(--color-figure-gray);--color-aside-experiment-background:var(--color-fill-gray-secondary);--color-aside-experiment-border:var(--color-figure-light-gray);--color-aside-important:var(--color-figure-gray);--color-aside-important-background:var(--color-fill-gray-secondary);--color-aside-important-border:var(--color-figure-light-gray);--color-aside-note:var(--color-figure-gray);--color-aside-note-background:var(--color-fill-gray-secondary);--color-aside-note-border:var(--color-figure-light-gray);--color-aside-tip:var(--color-figure-gray);--color-aside-tip-background:var(--color-fill-gray-secondary);--color-aside-tip-border:var(--color-figure-light-gray);--color-aside-warning:var(--color-figure-gray);--color-aside-warning-background:var(--color-fill-red-secondary);--color-aside-warning-border:var(--color-figure-red);--color-badge-default:var(--color-figure-light-gray);--color-badge-beta:var(--color-figure-gray-tertiary);--color-badge-deprecated:var(--color-figure-orange);--color-badge-dark-default:#b0b0b0;--color-badge-dark-beta:#b0b0b0;--color-badge-dark-deprecated:#f60;--color-button-background:var(--color-fill-blue);--color-button-background-active:#36f;--color-button-background-hover:var(--color-figure-blue);--color-button-text:#fff;--color-call-to-action-background:var(--color-fill-secondary);--color-changes-added:var(--color-figure-light-gray);--color-changes-added-hover:var(--color-figure-light-gray);--color-changes-deprecated:var(--color-figure-light-gray);--color-changes-deprecated-hover:var(--color-figure-light-gray);--color-changes-modified:var(--color-figure-light-gray);--color-changes-modified-hover:var(--color-figure-light-gray);--color-changes-modified-previous-background:var(--color-fill-gray-secondary);--color-code-background:var(--color-fill-secondary);--color-code-collapsible-background:var(--color-fill-tertiary);--color-code-collapsible-text:var(--color-figure-gray-secondary-alt);--color-code-line-highlight:rgba(51,102,255,0.08);--color-code-line-highlight-border:var(--color-figure-blue);--color-code-plain:var(--color-figure-gray);--color-content-table-content-color:var(--color-fill-secondary);--color-dropdown-background:hsla(0,0%,100%,0.8);--color-dropdown-border:#ccc;--color-dropdown-option-text:#666;--color-dropdown-text:#000;--color-dropdown-dark-background:hsla(0,0%,100%,0.1);--color-dropdown-dark-border:hsla(0,0%,94.1%,0.2);--color-dropdown-dark-option-text:#ccc;--color-dropdown-dark-text:#fff;--color-eyebrow:var(--color-figure-gray-secondary);--color-focus-border-color:var(--color-fill-blue);--color-focus-color:rgba(0,125,250,0.6);--color-form-error:var(--color-figure-red);--color-form-error-background:var(--color-fill-red-secondary);--color-form-valid:var(--color-figure-green);--color-form-valid-background:var(--color-fill-green-secondary);--color-generic-modal-background:var(--color-fill);--color-grid:var(--color-fill-gray);--color-header-text:var(--color-figure-gray);--color-hero-eyebrow:#ccc;--color-link:var(--color-figure-blue);--color-loading-placeholder-background:var(--color-fill);--color-nav-color:#666;--color-nav-current-link:rgba(0,0,0,0.6);--color-nav-expanded:#fff;--color-nav-hierarchy-collapse-background:#f0f0f0;--color-nav-hierarchy-collapse-borders:#ccc;--color-nav-hierarchy-item-borders:#ccc;--color-nav-keyline:rgba(0,0,0,0.2);--color-nav-link-color:#000;--color-nav-link-color-hover:#36f;--color-nav-outlines:#ccc;--color-nav-rule:hsla(0,0%,94.1%,0.5);--color-nav-solid-background:#fff;--color-nav-sticking-expanded-keyline:rgba(0,0,0,0.1);--color-nav-stuck:hsla(0,0%,100%,0.9);--color-nav-uiblur-expanded:hsla(0,0%,100%,0.9);--color-nav-uiblur-stuck:hsla(0,0%,100%,0.7);--color-nav-root-subhead:var(--color-tutorials-teal);--color-nav-dark-border-top-color:hsla(0,0%,100%,0.4);--color-nav-dark-color:#b0b0b0;--color-nav-dark-current-link:hsla(0,0%,100%,0.6);--color-nav-dark-expanded:#2a2a2a;--color-nav-dark-hierarchy-collapse-background:#424242;--color-nav-dark-hierarchy-collapse-borders:#666;--color-nav-dark-hierarchy-item-borders:#424242;--color-nav-dark-keyline:rgba(66,66,66,0.95);--color-nav-dark-link-color:#fff;--color-nav-dark-link-color-hover:#09f;--color-nav-dark-outlines:#575757;--color-nav-dark-rule:#575757;--color-nav-dark-solid-background:#000;--color-nav-dark-sticking-expanded-keyline:rgba(66,66,66,0.7);--color-nav-dark-stuck:rgba(42,42,42,0.9);--color-nav-dark-uiblur-expanded:rgba(42,42,42,0.9);--color-nav-dark-uiblur-stuck:rgba(42,42,42,0.7);--color-nav-dark-root-subhead:#fff;--color-runtime-preview-background:var(--color-fill-tertiary);--color-runtime-preview-disabled-text:hsla(0,0%,40%,0.6);--color-runtime-preview-text:var(--color-figure-gray-secondary);--color-secondary-label:var(--color-figure-gray-secondary);--color-step-background:var(--color-fill-secondary);--color-step-caption:var(--color-figure-gray-secondary);--color-step-focused:var(--color-figure-light-gray);--color-step-text:var(--color-figure-gray-secondary);--color-svg-icon:#666;--color-syntax-attributes:#947100;--color-syntax-characters:#272ad8;--color-syntax-comments:#707f8c;--color-syntax-documentation-markup:#506375;--color-syntax-documentation-markup-keywords:#506375;--color-syntax-heading:#ba2da2;--color-syntax-keywords:#ad3da4;--color-syntax-marks:#000;--color-syntax-numbers:#272ad8;--color-syntax-other-class-names:#703daa;--color-syntax-other-constants:#4b21b0;--color-syntax-other-declarations:#047cb0;--color-syntax-other-function-and-method-names:#4b21b0;--color-syntax-other-instance-variables-and-globals:#703daa;--color-syntax-other-preprocessor-macros:#78492a;--color-syntax-other-type-names:#703daa;--color-syntax-param-internal-name:#404040;--color-syntax-plain-text:#000;--color-syntax-preprocessor-statements:#78492a;--color-syntax-project-class-names:#3e8087;--color-syntax-project-constants:#2d6469;--color-syntax-project-function-and-method-names:#2d6469;--color-syntax-project-instance-variables-and-globals:#3e8087;--color-syntax-project-preprocessor-macros:#78492a;--color-syntax-project-type-names:#3e8087;--color-syntax-strings:#d12f1b;--color-syntax-type-declarations:#03638c;--color-syntax-urls:#1337ff;--color-tabnav-item-border-color:var(--color-fill-gray);--color-text:var(--color-figure-gray);--color-text-background:var(--color-fill);--color-tutorial-assessments-background:var(--color-fill-secondary);--color-tutorial-background:var(--color-fill);--color-tutorial-navbar-dropdown-background:var(--color-fill);--color-tutorial-navbar-dropdown-border:var(--color-fill-gray);--color-tutorial-quiz-border-active:var(--color-figure-blue);--color-tutorials-overview-background:#161616;--color-tutorials-overview-content:#fff;--color-tutorials-overview-content-alt:#fff;--color-tutorials-overview-eyebrow:#ccc;--color-tutorials-overview-icon:#b0b0b0;--color-tutorials-overview-link:#09f;--color-tutorials-overview-navigation-link:#ccc;--color-tutorials-overview-navigation-link-active:#fff;--color-tutorials-overview-navigation-link-hover:#fff;--color-tutorial-hero-text:#fff;--color-tutorial-hero-background:#000}@media screen{body[data-color-scheme=dark]{--color-fill:#000;--color-fill-secondary:#161616;--color-fill-tertiary:#2a2a2a;--color-fill-blue:#06f;--color-fill-gray:#575757;--color-fill-gray-secondary:#222;--color-fill-gray-tertiary:#424242;--color-fill-green-secondary:#030;--color-fill-orange-secondary:#472400;--color-fill-red-secondary:#300;--color-figure-blue:#09f;--color-figure-gray:#fff;--color-figure-gray-secondary:#ccc;--color-figure-gray-secondary-alt:#b0b0b0;--color-figure-gray-tertiary:#b0b0b0;--color-figure-green:#090;--color-figure-light-gray:#b0b0b0;--color-figure-orange:#f60;--color-figure-red:#f33;--color-tutorials-teal:#fff;--color-article-body-background:#111;--color-button-background-active:#06f;--color-code-line-highlight:rgba(0,153,255,0.08);--color-dropdown-background:var(--color-dropdown-dark-background);--color-dropdown-border:var(--color-dropdown-dark-border);--color-dropdown-option-text:var(--color-dropdown-dark-option-text);--color-dropdown-text:var(--color-dropdown-dark-text);--color-nav-color:var(--color-nav-dark-color);--color-nav-current-link:var(--color-nav-dark-current-link);--color-nav-expanded:var(--color-nav-dark-expanded);--color-nav-hierarchy-collapse-background:var(--color-nav-dark-hierarchy-collapse-background);--color-nav-hierarchy-collapse-borders:var(--color-nav-dark-hierarchy-collapse-borders);--color-nav-hierarchy-item-borders:var(--color-nav-dark-hierarchy-item-borders);--color-nav-keyline:var(--color-nav-dark-keyline);--color-nav-link-color:var(--color-nav-dark-link-color);--color-nav-link-color-hover:var(--color-nav-dark-link-color-hover);--color-nav-outlines:var(--color-nav-dark-outlines);--color-nav-rule:var(--color-nav-dark-rule);--color-nav-solid-background:var(--color-nav-dark-solid-background);--color-nav-sticking-expanded-keyline:var(--color-nav-dark-sticking-expanded-keyline);--color-nav-stuck:var(--color-nav-dark-stuck);--color-nav-uiblur-expanded:var(--color-nav-dark-uiblur-expanded);--color-nav-uiblur-stuck:var(--color-nav-dark-uiblur-stuck);--color-runtime-preview-disabled-text:hsla(0,0%,80%,0.6);--color-syntax-attributes:#cc9768;--color-syntax-characters:#d9c97c;--color-syntax-comments:#7f8c98;--color-syntax-documentation-markup:#7f8c98;--color-syntax-documentation-markup-keywords:#a3b1bf;--color-syntax-keywords:#ff7ab2;--color-syntax-marks:#fff;--color-syntax-numbers:#d9c97c;--color-syntax-other-class-names:#dabaff;--color-syntax-other-constants:#a7ebdd;--color-syntax-other-declarations:#4eb0cc;--color-syntax-other-function-and-method-names:#b281eb;--color-syntax-other-instance-variables-and-globals:#b281eb;--color-syntax-other-preprocessor-macros:#ffa14f;--color-syntax-other-type-names:#dabaff;--color-syntax-param-internal-name:#bfbfbf;--color-syntax-plain-text:#fff;--color-syntax-preprocessor-statements:#ffa14f;--color-syntax-project-class-names:#acf2e4;--color-syntax-project-constants:#78c2b3;--color-syntax-project-function-and-method-names:#78c2b3;--color-syntax-project-instance-variables-and-globals:#78c2b3;--color-syntax-project-preprocessor-macros:#ffa14f;--color-syntax-project-type-names:#acf2e4;--color-syntax-strings:#ff8170;--color-syntax-type-declarations:#6bdfff;--color-syntax-urls:#69f;--color-tutorial-background:var(--color-fill-tertiary)}}@media screen and (prefers-color-scheme:dark){body[data-color-scheme=auto]{--color-fill:#000;--color-fill-secondary:#161616;--color-fill-tertiary:#2a2a2a;--color-fill-blue:#06f;--color-fill-gray:#575757;--color-fill-gray-secondary:#222;--color-fill-gray-tertiary:#424242;--color-fill-green-secondary:#030;--color-fill-orange-secondary:#472400;--color-fill-red-secondary:#300;--color-figure-blue:#09f;--color-figure-gray:#fff;--color-figure-gray-secondary:#ccc;--color-figure-gray-secondary-alt:#b0b0b0;--color-figure-gray-tertiary:#b0b0b0;--color-figure-green:#090;--color-figure-light-gray:#b0b0b0;--color-figure-orange:#f60;--color-figure-red:#f33;--color-tutorials-teal:#fff;--color-article-body-background:#111;--color-button-background-active:#06f;--color-code-line-highlight:rgba(0,153,255,0.08);--color-dropdown-background:var(--color-dropdown-dark-background);--color-dropdown-border:var(--color-dropdown-dark-border);--color-dropdown-option-text:var(--color-dropdown-dark-option-text);--color-dropdown-text:var(--color-dropdown-dark-text);--color-nav-color:var(--color-nav-dark-color);--color-nav-current-link:var(--color-nav-dark-current-link);--color-nav-expanded:var(--color-nav-dark-expanded);--color-nav-hierarchy-collapse-background:var(--color-nav-dark-hierarchy-collapse-background);--color-nav-hierarchy-collapse-borders:var(--color-nav-dark-hierarchy-collapse-borders);--color-nav-hierarchy-item-borders:var(--color-nav-dark-hierarchy-item-borders);--color-nav-keyline:var(--color-nav-dark-keyline);--color-nav-link-color:var(--color-nav-dark-link-color);--color-nav-link-color-hover:var(--color-nav-dark-link-color-hover);--color-nav-outlines:var(--color-nav-dark-outlines);--color-nav-rule:var(--color-nav-dark-rule);--color-nav-solid-background:var(--color-nav-dark-solid-background);--color-nav-sticking-expanded-keyline:var(--color-nav-dark-sticking-expanded-keyline);--color-nav-stuck:var(--color-nav-dark-stuck);--color-nav-uiblur-expanded:var(--color-nav-dark-uiblur-expanded);--color-nav-uiblur-stuck:var(--color-nav-dark-uiblur-stuck);--color-runtime-preview-disabled-text:hsla(0,0%,80%,0.6);--color-syntax-attributes:#cc9768;--color-syntax-characters:#d9c97c;--color-syntax-comments:#7f8c98;--color-syntax-documentation-markup:#7f8c98;--color-syntax-documentation-markup-keywords:#a3b1bf;--color-syntax-keywords:#ff7ab2;--color-syntax-marks:#fff;--color-syntax-numbers:#d9c97c;--color-syntax-other-class-names:#dabaff;--color-syntax-other-constants:#a7ebdd;--color-syntax-other-declarations:#4eb0cc;--color-syntax-other-function-and-method-names:#b281eb;--color-syntax-other-instance-variables-and-globals:#b281eb;--color-syntax-other-preprocessor-macros:#ffa14f;--color-syntax-other-type-names:#dabaff;--color-syntax-param-internal-name:#bfbfbf;--color-syntax-plain-text:#fff;--color-syntax-preprocessor-statements:#ffa14f;--color-syntax-project-class-names:#acf2e4;--color-syntax-project-constants:#78c2b3;--color-syntax-project-function-and-method-names:#78c2b3;--color-syntax-project-instance-variables-and-globals:#78c2b3;--color-syntax-project-preprocessor-macros:#ffa14f;--color-syntax-project-type-names:#acf2e4;--color-syntax-strings:#ff8170;--color-syntax-type-declarations:#6bdfff;--color-syntax-urls:#69f;--color-tutorial-background:var(--color-fill-tertiary)}}#main{outline-style:none}[data-v-bf0cd418] :focus:not(input):not(textarea):not(select){outline:none}.fromkeyboard[data-v-bf0cd418] :focus:not(input):not(textarea):not(select){outline:4px solid var(--color-focus-color);outline-offset:1px}#app[data-v-bf0cd418]{display:grid;grid-template-rows:auto 1fr auto;min-height:100%}#app[data-v-bf0cd418]>*{min-width:0}#app.hascustomheader[data-v-bf0cd418]{grid-template-rows:auto auto 1fr auto}.container[data-v-790053de]{margin-left:auto;margin-right:auto;width:980px;outline-style:none;margin-top:92px;margin-bottom:140px}@media only screen and (max-width:1068px){.container[data-v-790053de]{width:692px}}@media only screen and (max-width:735px){.container[data-v-790053de]{width:87.5%}}.error-content[data-v-790053de]{box-sizing:border-box;width:502px;margin-left:auto;margin-right:auto;margin-bottom:54px}@media only screen and (max-width:1068px){.error-content[data-v-790053de]{width:420px;margin-bottom:45px}}@media only screen and (max-width:735px){.error-content[data-v-790053de]{max-width:330px;width:auto;margin-bottom:35px}}.title[data-v-790053de]{text-align:center;font-size:2.82353rem;line-height:1.08333;font-weight:400;letter-spacing:-.003em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){.title[data-v-790053de]{font-size:2.35294rem;line-height:1.1;font-weight:400;letter-spacing:0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.title[data-v-790053de]{font-size:1.88235rem;line-height:1.125;font-weight:400;letter-spacing:.013em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}} \ No newline at end of file diff --git a/docs/css/topic.2eb01958.css b/docs/css/topic.2eb01958.css new file mode 100644 index 0000000..8757057 --- /dev/null +++ b/docs/css/topic.2eb01958.css @@ -0,0 +1,9 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */.nav-title-content[data-v-60ea3af8]{max-width:100%}.title[data-v-60ea3af8]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:inline-block;vertical-align:top;max-width:296px}@media only screen and (max-width:1023px){.title[data-v-60ea3af8]{max-width:205px}}@media only screen and (max-width:767px){.title[data-v-60ea3af8]{flex-basis:fill;display:initial;vertical-align:initial;max-width:none}}.subhead[data-v-60ea3af8]{color:var(--color-nav-root-subhead)}.theme-dark .subhead[data-v-60ea3af8]{color:var(--color-nav-dark-root-subhead)}.nav-menu-item[data-v-f44c239a]{margin-left:1.41176rem;list-style:none;min-width:0}.nav--in-breakpoint-range .nav-menu-item[data-v-f44c239a]{margin-left:0;width:100%;height:2.47059rem}.nav--in-breakpoint-range .nav-menu-item[data-v-f44c239a]:first-child .nav-menu-link{border-top:0}.nav--in-breakpoint-range .nav-menu-item--animated[data-v-f44c239a]{opacity:0;transform:none;transition:.5s ease;transition-property:transform,opacity}.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="0"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="1"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="2"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="3"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="4"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="5"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="6"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]{opacity:1;transform:translateZ(0)}.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:first-child,.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(2),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(3),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(4),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(5),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(6),.nav--is-open.nav--in-breakpoint-range [data-previous-menu-children-count="7"] .nav-menu-item--animated[data-v-f44c239a]:nth-child(7){transition-delay:0s}.mobile-dropdown[data-v-3d58f504]{box-sizing:border-box}.nav--in-breakpoint-range .mobile-dropdown[data-v-3d58f504]{padding-left:.23529rem;padding-right:.23529rem}.mobile-dropdown ul[data-v-3d58f504]{list-style:none}.mobile-dropdown .option[data-v-3d58f504]{cursor:pointer;font-size:.70588rem;padding:.5rem 0;display:block;text-decoration:none;color:inherit}.mobile-dropdown .option[data-v-3d58f504]:focus{outline-offset:0}.mobile-dropdown .option.depth1[data-v-3d58f504]{padding-left:.47059rem}.active[data-v-3d58f504],.tutorial.router-link-active[data-v-3d58f504]{font-weight:600}.active[data-v-3d58f504]:focus,.tutorial.router-link-active[data-v-3d58f504]:focus{outline:none}.chapter-list[data-v-3d58f504]:not(:first-child){margin-top:1rem}.chapter-name[data-v-3d58f504],.tutorial[data-v-3d58f504]{padding:.5rem 0;font-size:1rem;line-height:1.47059;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.section-list[data-v-3d58f504],.tutorial-list[data-v-3d58f504]{padding:0 .58824rem}.chapter-list:last-child .tutorial-list[data-v-3d58f504]:last-child{padding-bottom:10em}.chapter-list[data-v-3d58f504]{display:inline-block}.form-element[data-v-998803d8]{position:relative}.form-dropdown[data-v-998803d8]{font-size:1rem;line-height:1.23529;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;display:block;box-sizing:border-box;width:100%;height:3.3em;color:var(--color-dropdown-text);padding:1.11765rem 2.35294rem 0 .94118rem;text-align:left;border:1px solid var(--color-dropdown-border);border-radius:4px;background-clip:padding-box;margin-bottom:.82353rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;min-height:32px}.form-dropdown[data-v-998803d8]:focus{box-shadow:0 0 0 4px var(--color-focus-color);outline:none;border-color:var(--color-focus-border-color)}.form-dropdown.no-eyebrow[data-v-998803d8]{padding-top:0}.form-dropdown[data-v-998803d8]:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--color-dropdown-text)}.form-dropdown[data-v-998803d8]::-ms-expand{opacity:0}.form-dropdown~.form-icon[data-v-998803d8]{position:absolute;display:block;pointer-events:none;fill:var(--color-figure-gray-tertiary);right:14px;width:13px;height:auto;top:50%;transform:translateY(-50%)}.is-open .form-dropdown~.form-icon[data-v-998803d8]{transform:translateY(-50%) scale(-1)}@media only screen and (max-width:735px){.form-dropdown~.form-icon[data-v-998803d8]{right:14px}}.form-dropdown~.form-label[data-v-998803d8]{font-size:.70588rem;line-height:1.75;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;position:absolute;top:.47059rem;left:17px;color:var(--color-figure-gray-secondary);pointer-events:none;padding:0;z-index:1}.form-dropdown[data-v-998803d8] option{color:var(--color-dropdown-text)}.form-dropdown-selectnone[data-v-998803d8]{color:transparent}.form-dropdown-selectnone~.form-label[data-v-998803d8]{font-size:1rem;line-height:1.23529;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;top:19px;left:17px;color:var(--color-figure-gray-tertiary)}.form-dropdown-selectnone[data-v-998803d8]:-moz-focusring{text-shadow:none}.form-dropdown-selectnone[data-v-998803d8]::-ms-value{display:none}.theme-dark .form-dropdown[data-v-998803d8]{color:var(--color-dropdown-dark-text);background-color:var(--color-dropdown-dark-background);border-color:var(--color-dropdown-dark-border)}.theme-dark .form-dropdown~.form-label[data-v-998803d8]{color:#ccc}.theme-dark .form-dropdown[data-v-998803d8]:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--color-dropdown-dark-text)}.theme-dark .form-dropdown.form-dropdown-selectnone[data-v-998803d8]{color:transparent}.theme-dark .form-dropdown.form-dropdown-selectnone[data-v-998803d8]:-moz-focusring{text-shadow:none}.theme-dark .form-dropdown-selectnone~.form-label[data-v-998803d8]{color:#b0b0b0}.dropdown-small[data-v-47f38161]{height:30px;display:flex;align-items:center;position:relative;background:var(--color-fill)}.dropdown-small .form-dropdown-toggle[data-v-47f38161]{line-height:1.5;font-size:12px;padding-top:0;padding-bottom:0;padding-left:20px;min-height:unset;height:30px;display:flex;align-items:center}.dropdown-small .form-dropdown-toggle[data-v-47f38161]:focus{box-shadow:none;border-color:var(--color-dropdown-border)}.fromkeyboard .dropdown-small .form-dropdown-toggle[data-v-47f38161]:focus{box-shadow:0 0 0 2px var(--color-focus-color);outline:none;border-color:var(--color-focus-border-color)}.form-dropdown-toggle[data-v-47f38161]{margin:0}.is-open .form-dropdown-toggle[data-v-47f38161]{border-radius:4px 4px 0 0;border-bottom:none;padding-bottom:1px}.fromkeyboard .is-open .form-dropdown-toggle[data-v-47f38161]{box-shadow:1px -1px 0 1px var(--color-focus-color),-1px -1px 0 1px var(--color-focus-color);border-color:var(--color-focus-border-color)}.form-dropdown-title[data-v-47f38161]{margin:0;padding:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.dropdown-custom[data-v-47f38161]{border-radius:4px}.dropdown-custom.is-open[data-v-47f38161]{border-radius:4px 4px 0 0}.dropdown-custom[data-v-47f38161] .form-dropdown-content{background:var(--color-fill);position:absolute;right:0;left:0;top:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px;border:1px solid var(--color-dropdown-border);border-top:none;display:none;overflow-y:auto}.dropdown-custom[data-v-47f38161] .form-dropdown-content.is-open{display:block}.fromkeyboard .dropdown-custom[data-v-47f38161] .form-dropdown-content.is-open{box-shadow:1px 1px 0 1px var(--color-focus-color),-1px 1px 0 1px var(--color-focus-color);border-color:var(--color-focus-border-color);border-top-color:transparent}.nav .dropdown-custom[data-v-47f38161] .form-dropdown-content{max-height:calc(100vh - 116px - 3.05882rem)}.nav--is-sticking.nav .dropdown-custom[data-v-47f38161] .form-dropdown-content{max-height:calc(100vh - 3.05882rem - 72px)}.dropdown-custom[data-v-47f38161] .options{list-style:none;margin:0;padding:0 0 20px}.dropdown-custom[data-v-47f38161] .option{cursor:pointer;padding:5px 20px;font-size:12px;line-height:20px;outline:none}.dropdown-custom[data-v-47f38161] .option:hover{background-color:var(--color-fill-tertiary)}.dropdown-custom[data-v-47f38161] .option.option-active{font-weight:600}.fromkeyboard .dropdown-custom[data-v-47f38161] .option:hover{background-color:transparent}.fromkeyboard .dropdown-custom[data-v-47f38161] .option:focus{background-color:var(--color-fill-tertiary);outline:none}.tutorial-dropdown[data-v-4a151342]{grid-column:3}.section-tracker[data-v-4a151342]{font-size:.70588rem;line-height:1.33333;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--color-figure-gray-secondary);margin-left:15px}.tutorial-dropdown[data-v-78dc103f]{grid-column:1/2}.tutorial-dropdown .options[data-v-78dc103f]{padding-top:1rem;padding-bottom:0}.tutorial-dropdown .option[data-v-78dc103f]{padding:5px 20px 5px 30px}.chapter-list[data-v-78dc103f]{padding-bottom:20px}.chapter-name[data-v-78dc103f]{margin:0 20px 5px 20px;line-height:normal;color:var(--color-figure-gray-secondary)}.chevron-icon[data-v-7138b5bf]{padding:0;color:var(--color-nav-outlines);grid-column:2;height:20px;width:20px;margin:0 4px}@media only screen and (min-width:768px){.nav[data-v-7138b5bf] .nav-content{display:grid;grid-template-columns:auto auto 3fr;align-items:center}.nav[data-v-7138b5bf] .nav-menu-tray{width:auto}.nav[data-v-7138b5bf] .nav-menu{padding:0;grid-column:3/5}.nav[data-v-7138b5bf] .nav-menu-item{margin:0}}.dropdown-container[data-v-7138b5bf]{height:3.05882rem;display:grid;grid-template-columns:minmax(230px,285px) auto minmax(230px,1fr);align-items:center}@media only screen and (max-width:1023px){.dropdown-container[data-v-7138b5bf]{grid-template-columns:minmax(173px,216px) auto minmax(173px,1fr)}}.separator[data-v-7138b5bf]{height:20px;border-right:1px solid;border-color:var(--color-nav-outlines);margin:0 20px;grid-column:2}.mobile-dropdown-container[data-v-7138b5bf],.nav--in-breakpoint-range.nav .dropdown-container[data-v-7138b5bf],.nav--in-breakpoint-range.nav .separator[data-v-7138b5bf]{display:none}.nav--in-breakpoint-range.nav .mobile-dropdown-container[data-v-7138b5bf]{display:block}.nav[data-v-7138b5bf] .nav-title{grid-column:1;width:90%;padding-top:0}.primary-dropdown[data-v-7138b5bf],.secondary-dropdown[data-v-7138b5bf]{background:var(--color-tutorial-navbar-dropdown-background);border-color:var(--color-tutorial-navbar-dropdown-border)}.primary-dropdown[data-v-7138b5bf] .form-dropdown,.primary-dropdown[data-v-7138b5bf] .form-dropdown:focus,.secondary-dropdown[data-v-7138b5bf] .form-dropdown,.secondary-dropdown[data-v-7138b5bf] .form-dropdown:focus{border-color:var(--color-tutorial-navbar-dropdown-border)}.primary-dropdown[data-v-7138b5bf] .options,.secondary-dropdown[data-v-7138b5bf] .options{background:var(--color-tutorial-navbar-dropdown-background);border-color:var(--color-tutorial-navbar-dropdown-border)}.replay-button[data-v-7335dbb2]{display:flex;align-items:center;justify-content:center;cursor:pointer;visibility:hidden;margin-top:.5rem;-webkit-tap-highlight-color:transparent}.replay-button.visible[data-v-7335dbb2]{visibility:visible}.replay-button svg.replay-icon[data-v-7335dbb2]{height:12px;width:12px;margin-left:.3em}[data-v-1b5cc854] img,[data-v-1b5cc854] video{display:block;margin-left:auto;margin-right:auto;-o-object-fit:contain;object-fit:contain;max-width:100%}[data-v-3cfe1c35] .code-listing+*,[data-v-3cfe1c35] aside+*,[data-v-3cfe1c35] h2+*,[data-v-3cfe1c35] h3+*,[data-v-3cfe1c35] ol+*,[data-v-3cfe1c35] p+*,[data-v-3cfe1c35] ul+*{margin-top:20px}[data-v-3cfe1c35] ol ol,[data-v-3cfe1c35] ol ul,[data-v-3cfe1c35] ul ol,[data-v-3cfe1c35] ul ul{margin-top:0}[data-v-3cfe1c35] h2{font-size:1.88235rem;line-height:1.25;font-weight:400;letter-spacing:.004em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){[data-v-3cfe1c35] h2{font-size:1.64706rem;line-height:1.28571;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){[data-v-3cfe1c35] h2{font-size:1.41176rem;line-height:1.33333;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}[data-v-3cfe1c35] h3{font-size:1.41176rem;line-height:1.16667;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){[data-v-3cfe1c35] h3{font-size:1.23529rem;line-height:1.19048;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}[data-v-3cfe1c35] .code-listing{background:var(--color-code-background);border-color:var(--colors-grid,var(--color-grid));border-style:solid;border-width:1px}[data-v-3cfe1c35] .code-listing pre{font-size:.70588rem;line-height:1.83333;font-weight:400;letter-spacing:-.01em;font-family:Menlo,monospace;padding:20px 0}.columns[data-v-30edf911]{display:grid;grid-template-rows:repeat(2,auto)}.columns.cols-2[data-v-30edf911]{gap:20px 8.33333%;grid-template-columns:repeat(2,1fr)}.columns.cols-3[data-v-30edf911]{gap:20px 4.16667%;grid-template-columns:repeat(3,1fr)}.asset[data-v-30edf911]{align-self:end;grid-row:1}.content[data-v-30edf911]{grid-row:2}@media only screen and (max-width:735px){.columns.cols-2[data-v-30edf911],.columns.cols-3[data-v-30edf911]{grid-template-columns:unset}.asset[data-v-30edf911],.content[data-v-30edf911]{grid-row:auto}}.content-and-media[data-v-3fa44f9e]{display:flex}.content-and-media.media-leading[data-v-3fa44f9e]{flex-direction:row-reverse}.content-and-media.media-trailing[data-v-3fa44f9e]{flex-direction:row}@media only screen and (min-width:736px){.content-and-media[data-v-3fa44f9e]{align-items:center;justify-content:center}}.content[data-v-3fa44f9e]{width:62.5%}.asset[data-v-3fa44f9e]{width:29.16667%}.media-leading .asset[data-v-3fa44f9e]{margin-right:8.33333%}.media-trailing .asset[data-v-3fa44f9e]{margin-left:8.33333%}@media only screen and (max-width:735px){.content-and-media.media-leading[data-v-3fa44f9e],.content-and-media.media-trailing[data-v-3fa44f9e]{flex-direction:column}.asset[data-v-3fa44f9e],.content[data-v-3fa44f9e]{width:100%}.media-leading .asset[data-v-3fa44f9e],.media-trailing .asset[data-v-3fa44f9e]{margin:20px 0 0 0}}.group[id][data-v-1f2be54b]{margin-top:20px;padding-top:20px}[data-v-1f2be54b] img,[data-v-1f2be54b] video{display:block;margin:0 auto;max-width:100%}.layout+[data-v-4d5a806e]{margin-top:40px}@media only screen and (max-width:735px){.layout[data-v-4d5a806e]:first-child>:not(.group[id]){margin-top:40px}}.body[data-v-6499e2f2]{background:var(--colors-text-background,var(--color-article-body-background));margin-left:auto;margin-right:auto;width:980px;border-radius:10px;transform:translateY(-120px)}@media only screen and (max-width:1068px){.body[data-v-6499e2f2]{width:692px}}@media only screen and (max-width:735px){.body[data-v-6499e2f2]{width:87.5%;border-radius:0;transform:none}}.body[data-v-6499e2f2]~*{margin-top:-40px}.body-content[data-v-6499e2f2]{padding:40px 8.33333% 80px 8.33333%}@media only screen and (max-width:735px){.body-content[data-v-6499e2f2]{padding:0 0 40px 0}}.call-to-action[data-v-2016b288]{padding:65px 0;background:var(--color-call-to-action-background)}.theme-dark .call-to-action[data-v-2016b288]{--color-call-to-action-background:#424242}.row[data-v-2016b288]{margin-left:auto;margin-right:auto;width:980px;display:flex;align-items:center}@media only screen and (max-width:1068px){.row[data-v-2016b288]{width:692px}}@media only screen and (max-width:735px){.row[data-v-2016b288]{width:87.5%}}[data-v-2016b288] img,[data-v-2016b288] video{max-height:560px}h2[data-v-2016b288]{font-size:1.88235rem;line-height:1.25;font-weight:400;letter-spacing:.004em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){h2[data-v-2016b288]{font-size:1.64706rem;line-height:1.28571;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){h2[data-v-2016b288]{font-size:1.41176rem;line-height:1.33333;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.label[data-v-2016b288]{display:block;font-size:1.23529rem;line-height:1.19048;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;margin-bottom:.4em;color:var(--color-eyebrow)}@media only screen and (max-width:735px){.label[data-v-2016b288]{font-size:1.11765rem;line-height:1.21053;font-weight:400;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.content[data-v-2016b288]{margin-bottom:1.5rem}.right-column[data-v-2016b288]{margin-left:auto}@media only screen and (max-width:735px){.row[data-v-2016b288]{display:block}.col+.col[data-v-2016b288]{margin-top:40px}}@media only screen and (max-width:735px){.call-to-action[data-v-426a965c]{margin-top:0}}.headline[data-v-1898f592]{margin-bottom:.8em}.heading[data-v-1898f592]{font-size:2.82353rem;line-height:1.08333;font-weight:400;letter-spacing:-.003em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--color-header-text)}@media only screen and (max-width:1068px){.heading[data-v-1898f592]{font-size:2.35294rem;line-height:1.1;font-weight:400;letter-spacing:0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.heading[data-v-1898f592]{font-size:1.88235rem;line-height:1.125;font-weight:400;letter-spacing:.013em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.dark .heading[data-v-1898f592]{color:#fff}.eyebrow[data-v-1898f592]{font-size:1.41176rem;line-height:1.16667;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;display:block;margin-bottom:.4em;color:var(--color-eyebrow)}@media only screen and (max-width:1068px){.eyebrow[data-v-1898f592]{font-size:1.23529rem;line-height:1.19048;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.generic-modal[data-v-0e383dfa]{position:fixed;top:0;left:0;right:0;bottom:0;margin:0;z-index:11000;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;background:none;overflow:auto}.modal-fullscreen[data-v-0e383dfa]{align-items:stretch}.modal-fullscreen .container[data-v-0e383dfa]{margin:0;flex:1;width:100%;height:100%;padding-top:env(safe-area-inset-top);padding-right:env(safe-area-inset-right);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left)}.modal-standard[data-v-0e383dfa]{padding:20px}.modal-standard.modal-with-close .container[data-v-0e383dfa]{padding-top:80px}.modal-standard .container[data-v-0e383dfa]{padding:50px;border-radius:4px}@media screen{[data-color-scheme=dark] .modal-standard .container[data-v-0e383dfa]{background:#1d1d1f}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .modal-standard .container[data-v-0e383dfa]{background:#1d1d1f}}@media only screen and (max-width:735px){.modal-standard[data-v-0e383dfa]{padding:0;align-items:stretch}.modal-standard .container[data-v-0e383dfa]{margin:20px 0 0;padding:50px 30px;flex:1;width:100%;border-bottom-left-radius:0;border-bottom-right-radius:0}}.backdrop[data-v-0e383dfa]{overflow:auto;background:rgba(0,0,0,.4);-webkit-overflow-scrolling:touch;width:100%;height:100%;position:fixed}.container[data-v-0e383dfa]{margin-left:auto;margin-right:auto;width:980px;background:var(--colors-generic-modal-background,var(--color-generic-modal-background));z-index:1;position:relative;overflow:auto;max-width:100%}@media only screen and (max-width:1068px){.container[data-v-0e383dfa]{width:692px}}@media only screen and (max-width:735px){.container[data-v-0e383dfa]{width:87.5%}}.close[data-v-0e383dfa]{position:absolute;z-index:9999;top:22px;left:22px;width:30px;height:30px;color:#666;cursor:pointer;background:none;border:0;display:flex;align-items:center}.close .close-icon[data-v-0e383dfa]{fill:currentColor;width:100%;height:100%}.theme-dark .container[data-v-0e383dfa]{background:#000}.theme-dark .container .close[data-v-0e383dfa]{color:#b0b0b0}.theme-code .container[data-v-0e383dfa]{background-color:var(--background,var(--color-code-background))}.metadata[data-v-2fa6f125]{display:flex}.item[data-v-2fa6f125]{font-size:.70588rem;line-height:1.33333;font-weight:600;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;border-right:1px solid #fff;padding:0 27.5px}@media only screen and (max-width:735px){.item[data-v-2fa6f125]{font-size:.64706rem;line-height:1.63636;font-weight:600;letter-spacing:-.008em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:0 8px}}.item[data-v-2fa6f125]:first-of-type{padding-left:0}.item[data-v-2fa6f125]:last-of-type{border:none}@media only screen and (max-width:735px){.item[data-v-2fa6f125]:last-of-type{padding-right:0}}.content[data-v-2fa6f125]{color:#fff}.icon[data-v-2fa6f125]{font-size:2.82353rem;line-height:1.08333;font-weight:400;letter-spacing:-.003em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){.icon[data-v-2fa6f125]{font-size:2.35294rem;line-height:1.1;font-weight:400;letter-spacing:0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.icon[data-v-2fa6f125]{font-size:1.88235rem;line-height:1.125;font-weight:400;letter-spacing:.013em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.small-icon[data-v-2fa6f125]{width:1em;height:1em;margin-left:.2rem}.small-icon.xcode-icon[data-v-2fa6f125]{width:.8em;height:.8em}.content-link[data-v-2fa6f125]{display:flex;align-items:center}a[data-v-2fa6f125]{color:var(--colors-link,var(--color-tutorials-overview-link))}.duration[data-v-2fa6f125]{display:flex;align-items:baseline;font-size:2.35294rem;line-height:1;font-weight:400;letter-spacing:0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1.8rem}@media only screen and (max-width:735px){.duration[data-v-2fa6f125]{font-size:1.64706rem;line-height:1;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1.3rem}}.minutes[data-v-2fa6f125]{display:inline-block;font-size:1.64706rem;line-height:1;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1.3rem}@media only screen and (max-width:735px){.minutes[data-v-2fa6f125]{font-size:1rem;line-height:1.23529;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:.8rem}}.item-large-icon[data-v-2fa6f125]{height:2.3rem;max-width:100%}@media only screen and (max-width:735px){.item-large-icon[data-v-2fa6f125]{height:1.5rem;max-width:100%}}.bottom[data-v-2fa6f125]{margin-top:13px}@media only screen and (max-width:735px){.bottom[data-v-2fa6f125]{margin-top:8px}}.hero[data-v-cb87b2d0]{color:var(--color-tutorial-hero-text);position:relative}.bg[data-v-cb87b2d0],.hero[data-v-cb87b2d0]{background-color:var(--color-tutorial-hero-background)}.bg[data-v-cb87b2d0]{background-position:top;background-repeat:no-repeat;background-size:cover;content:"";height:100%;left:0;opacity:.3;position:absolute;top:0;width:100%}.row[data-v-cb87b2d0]{margin-left:auto;margin-right:auto;width:980px;padding:80px 0}@media only screen and (max-width:1068px){.row[data-v-cb87b2d0]{width:692px}}@media only screen and (max-width:735px){.row[data-v-cb87b2d0]{width:87.5%}}.col[data-v-cb87b2d0]{z-index:1}[data-v-cb87b2d0] .eyebrow{font-size:1.41176rem;line-height:1.16667;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--color-hero-eyebrow)}@media only screen and (max-width:1068px){[data-v-cb87b2d0] .eyebrow{font-size:1.23529rem;line-height:1.19048;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.headline[data-v-cb87b2d0]{font-size:2.82353rem;line-height:1.08333;font-weight:400;letter-spacing:-.003em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;margin-bottom:2rem}@media only screen and (max-width:1068px){.headline[data-v-cb87b2d0]{font-size:2.35294rem;line-height:1.1;font-weight:400;letter-spacing:0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.headline[data-v-cb87b2d0]{font-size:1.88235rem;line-height:1.125;font-weight:400;letter-spacing:.013em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.intro[data-v-cb87b2d0]{font-size:1.23529rem;line-height:1.38095;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:735px){.intro[data-v-cb87b2d0]{font-size:1.11765rem;line-height:1.42105;font-weight:400;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.content+p[data-v-cb87b2d0]{margin-top:.8em}@media only screen and (max-width:735px){.content+p[data-v-cb87b2d0]{margin-top:8px}}.call-to-action[data-v-cb87b2d0]{display:flex;align-items:center}.call-to-action .cta-icon[data-v-cb87b2d0]{margin-left:.4rem;width:1em;height:1em}.metadata[data-v-cb87b2d0]{margin-top:2rem}.video-asset[data-v-cb87b2d0]{display:grid;height:100vh;margin:0;place-items:center center}.video-asset[data-v-cb87b2d0] video{max-width:1280px;min-width:320px;width:100%}@media only screen and (max-width:735px){.headline[data-v-cb87b2d0]{margin-bottom:19px}}.tutorial-hero[data-v-35a9482f]{margin-bottom:80px}@media only screen and (max-width:735px){.tutorial-hero[data-v-35a9482f]{margin-bottom:0}}.title[data-v-8ec95972]{font-size:.70588rem;line-height:1.33333;letter-spacing:-.01em;color:var(--colors-secondary-label,var(--color-secondary-label))}.title[data-v-8ec95972],.title[data-v-71da656d]{font-weight:400;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.title[data-v-71da656d]{font-size:1.11765rem;line-height:1.21053;letter-spacing:.012em;color:var(--colors-header-text,var(--color-header-text));margin:25px 0}.question-content[data-v-71da656d] code{font-size:.76471rem;line-height:1.84615;font-weight:400;letter-spacing:-.013em;font-family:Menlo,monospace}.choices[data-v-71da656d]{display:flex;flex-direction:column;padding:0;list-style:none;margin:25px 0}.choice[data-v-71da656d]{font-size:.82353rem;line-height:1.42857;font-weight:400;letter-spacing:-.016em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;flex:1;border-radius:4px;margin:8px 0;padding:1.5rem 40px;cursor:pointer;background:var(--colors-text-background,var(--color-text-background));display:flex;flex-direction:column;justify-content:center;border-width:1px;border-style:solid;border-color:var(--colors-grid,var(--color-grid));position:relative}.choice[data-v-71da656d] img{max-height:23.52941rem}.choice[data-v-71da656d]:first-of-type{margin-top:0}.choice[data-v-71da656d] code{font-size:.76471rem;line-height:1.84615;font-weight:400;letter-spacing:-.013em;font-family:Menlo,monospace}.controls[data-v-71da656d]{text-align:center;margin-bottom:40px}.controls .button-cta[data-v-71da656d]{margin:.5rem;margin-top:0;padding:.3rem 3rem;min-width:8rem}input[type=radio][data-v-71da656d]{position:absolute;width:100%;left:0;height:100%;opacity:0;z-index:-1}.active[data-v-71da656d]{border-color:var(--color-tutorial-quiz-border-active);box-shadow:0 0 0 4px var(--color-focus-color);outline:none}.active [data-v-71da656d]{color:var(--colors-text,var(--color-text))}.correct[data-v-71da656d]{background:var(--color-form-valid-background);border-color:var(--color-form-valid)}.correct .choice-icon[data-v-71da656d]{fill:var(--color-form-valid)}.incorrect[data-v-71da656d]{background:var(--color-form-error-background);border-color:var(--color-form-error)}.incorrect .choice-icon[data-v-71da656d]{fill:var(--color-form-error)}.correct[data-v-71da656d],.incorrect[data-v-71da656d]{position:relative}.correct .choice-icon[data-v-71da656d],.incorrect .choice-icon[data-v-71da656d]{position:absolute;top:11px;left:10px;font-size:20px;width:1.05em}.disabled[data-v-71da656d]{pointer-events:none}.answer[data-v-71da656d]{margin:.5rem 1.5rem .5rem 0;font-size:.70588rem;line-height:1.33333;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.answer[data-v-71da656d]:last-of-type{margin-bottom:0}[data-v-71da656d] .question>.code-listing{padding:unset}[data-v-71da656d] pre{padding:0}[data-v-71da656d] img{display:block;margin-left:auto;margin-right:auto;max-width:100%}.title[data-v-6bd5c4e9]{font-size:1.88235rem;line-height:1.25;font-weight:400;letter-spacing:.004em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--colors-header-text,var(--color-header-text))}@media only screen and (max-width:1068px){.title[data-v-6bd5c4e9]{font-size:1.64706rem;line-height:1.28571;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.title[data-v-6bd5c4e9]{font-size:1.41176rem;line-height:1.33333;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.title p[data-v-6bd5c4e9]{color:var(--colors-text,var(--color-text))}.assessments[data-v-6bd5c4e9]{box-sizing:content-box;padding:0 1rem;background:var(--color-tutorial-assessments-background);margin-left:auto;margin-right:auto;width:980px;margin-bottom:80px}@media only screen and (max-width:1068px){.assessments[data-v-6bd5c4e9]{width:692px}}@media only screen and (max-width:735px){.assessments[data-v-6bd5c4e9]{width:87.5%}}.banner[data-v-6bd5c4e9]{padding:40px 0;border-bottom:1px solid;margin-bottom:40px;border-color:var(--colors-grid,var(--color-grid));text-align:center}.success[data-v-6bd5c4e9]{text-align:center;padding-bottom:40px;font-size:1.88235rem;line-height:1.25;font-weight:400;letter-spacing:.004em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--colors-text,var(--color-text))}@media only screen and (max-width:1068px){.success[data-v-6bd5c4e9]{font-size:1.64706rem;line-height:1.28571;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.success[data-v-6bd5c4e9]{font-size:1.41176rem;line-height:1.33333;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.assessments-wrapper[data-v-6bd5c4e9]{padding-top:80px}.assessments-wrapper[data-v-3c94366b]{padding-bottom:40px;padding-top:0}@media only screen and (max-width:735px){.assessments-wrapper[data-v-3c94366b]{padding-top:80px}}.article[data-v-5f5888a5]{background:var(--colors-article-background,var(--color-article-background))}@media only screen and (max-width:735px){.article[data-v-5f5888a5]{background:var(--colors-text-background,var(--color-article-body-background))}}.intro-container[data-v-54daa228]{margin-bottom:80px}.intro[data-v-54daa228]{display:flex;align-items:center}@media only screen and (max-width:735px){.intro[data-v-54daa228]{padding-bottom:0;flex-direction:column}}.intro.ide .media[data-v-54daa228] img{background-color:var(--colors-text-background,var(--color-text-background))}.col.left[data-v-54daa228]{padding-right:40px}@media only screen and (max-width:1068px){.col.left[data-v-54daa228]{padding-right:28px}}@media only screen and (max-width:735px){.col.left[data-v-54daa228]{margin-left:auto;margin-right:auto;width:980px;padding-right:0}}@media only screen and (max-width:735px) and (max-width:1068px){.col.left[data-v-54daa228]{width:692px}}@media only screen and (max-width:735px) and (max-width:735px){.col.left[data-v-54daa228]{width:87.5%}}.col.right[data-v-54daa228]{padding-left:40px}@media only screen and (max-width:1068px){.col.right[data-v-54daa228]{padding-left:28px}}@media only screen and (max-width:735px){.col.right[data-v-54daa228]{padding-left:0}}.content[data-v-54daa228]{font-size:1rem;line-height:1.47059;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.media[data-v-54daa228] img{width:auto;max-height:560px;min-height:18.82353rem;-o-object-fit:scale-down;object-fit:scale-down}@media only screen and (max-width:735px){.media[data-v-54daa228]{margin:0;margin-top:3rem}.media[data-v-54daa228] img,.media[data-v-54daa228] video{max-height:80vh}}.media[data-v-54daa228] .asset{padding:0 20px}.headline[data-v-54daa228]{color:var(--colors-header-text,var(--color-header-text))}[data-v-54daa228] .eyebrow{font-size:1.23529rem;line-height:1.19048;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:735px){[data-v-54daa228] .eyebrow{font-size:1.11765rem;line-height:1.21053;font-weight:400;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}[data-v-54daa228] .eyebrow a{color:inherit}[data-v-54daa228] .heading{font-size:1.88235rem;line-height:1.25;font-weight:400;letter-spacing:.004em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:1068px){[data-v-54daa228] .heading{font-size:1.64706rem;line-height:1.28571;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){[data-v-54daa228] .heading{font-size:1.41176rem;line-height:1.33333;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.expanded-intro[data-v-54daa228]{margin-left:auto;margin-right:auto;width:980px;margin-top:40px}@media only screen and (max-width:1068px){.expanded-intro[data-v-54daa228]{width:692px}}@media only screen and (max-width:735px){.expanded-intro[data-v-54daa228]{width:87.5%}}[data-v-54daa228] .cols-2{gap:20px 16.66667%}[data-v-54daa228] .cols-3 .column{gap:20px 12.5%}.code-preview[data-v-1890a2ba]{position:sticky;overflow-y:auto;-webkit-overflow-scrolling:touch;background-color:var(--background,var(--color-step-background));height:calc(100vh - 3.05882rem)}.code-preview.ide[data-v-1890a2ba]{height:100vh}.code-preview[data-v-1890a2ba] .code-listing{color:var(--text,var(--color-code-plain))}.code-preview[data-v-1890a2ba] pre{font-size:.70588rem;line-height:1.83333;font-weight:400;letter-spacing:-.01em;font-family:Menlo,monospace}.header[data-v-1890a2ba]{font-size:.70588rem;line-height:1.33333;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;position:relative;display:flex;justify-content:space-between;align-items:center;width:-webkit-fill-available;width:-moz-available;width:stretch;cursor:pointer;font-weight:600;padding:8px 12px;border-radius:4px 4px 0 0;z-index:1;background:var(--color-runtime-preview-background);color:var(--colors-runtime-preview-text,var(--color-runtime-preview-text))}.header[data-v-1890a2ba]:focus{outline-style:none}#app.fromkeyboard .header[data-v-1890a2ba]:focus{box-shadow:0 0 0 4px var(--color-focus-color);outline:none;border-color:var(--color-focus-border-color)}.runtime-preview[data-v-1890a2ba]{--color-runtime-preview-shadow:rgba(0,0,0,0.4);position:absolute;top:0;right:0;background:var(--color-runtime-preview-background);border-radius:4px;margin:1rem;margin-left:0;transition:width .2s ease-in,height .2s ease-in}@media screen{[data-color-scheme=dark] .runtime-preview[data-v-1890a2ba]{--color-runtime-preview-shadow:hsla(0,0%,100%,0.4)}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .runtime-preview[data-v-1890a2ba]{--color-runtime-preview-shadow:hsla(0,0%,100%,0.4)}}@supports not ((width:-webkit-fill-available) or (width:-moz-available) or (width:stretch)){.runtime-preview[data-v-1890a2ba]{display:flex;flex-direction:column}}.runtime-preview[data-v-1890a2ba]:before{box-shadow:0 0 3px 0 var(--color-runtime-preview-shadow);border-radius:4px;content:"";position:absolute;top:0;right:0;left:0;bottom:0}@media screen{[data-color-scheme=dark] .runtime-preview[data-v-1890a2ba]:before{mix-blend-mode:difference}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .runtime-preview[data-v-1890a2ba]:before{mix-blend-mode:difference}}.runtime-preview-ide[data-v-1890a2ba]{top:0}.runtime-preview-ide .runtime-preview-asset[data-v-1890a2ba] img{background-color:var(--color-runtime-preview-background)}.runtime-preview.collapsed[data-v-1890a2ba]{box-shadow:0 0 3px 0 var(--color-runtime-preview-shadow);width:102px;height:28px}.runtime-preview.collapsed .header[data-v-1890a2ba]{border-radius:4px}.runtime-preview.disabled[data-v-1890a2ba]{box-shadow:0 0 3px 0 transparent}.runtime-preview.disabled .header[data-v-1890a2ba]{color:var(--color-runtime-preview-disabled-text);cursor:auto}.runtime-preview-asset[data-v-1890a2ba]{border-radius:0 0 4px 4px}.runtime-preview-asset[data-v-1890a2ba] img{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.preview-icon[data-v-1890a2ba]{height:.8em;width:.8em;-webkit-user-select:none;-moz-user-select:none;user-select:none}.preview-show[data-v-1890a2ba]{transform:scale(-1)}[data-v-5ad4e037] pre{padding:10px 0}.toggle-preview[data-v-d0709828]{color:var(--color-runtime-preview-disabled-text);display:flex;align-items:center}a[data-v-d0709828]{color:var(--url,var(--color-link))}.toggle-text[data-v-d0709828]{display:flex;align-items:center}svg.toggle-icon[data-v-d0709828]{width:1em;height:1em;margin-left:.5em}.mobile-code-preview[data-v-b130569c]{background-color:var(--background,var(--color-step-background));padding:14px 0}@media only screen and (max-width:735px){.mobile-code-preview[data-v-b130569c]{display:flex;flex-direction:column}}.runtime-preview-modal-content[data-v-b130569c]{padding:45px 60px 0 60px;min-width:200px}.runtime-preview-modal-content[data-v-b130569c] img:not(.file-icon){border-radius:4px;box-shadow:0 0 3px rgba(0,0,0,.4);min-height:320px;max-height:80vh;width:auto;display:block;margin-bottom:1rem}.runtime-preview-modal-content .runtime-preview-label[data-v-b130569c]{font-size:.70588rem;line-height:1.33333;font-weight:400;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--color-runtime-preview-text);display:block;text-align:center;padding:.5em}[data-v-b130569c] .code-listing{color:var(--text,var(--color-code-plain))}[data-v-b130569c] .full-code-listing{padding-top:60px;min-height:calc(100vh - 60px)}[data-v-b130569c] pre{font-size:.70588rem;line-height:1.83333;font-weight:400;letter-spacing:-.01em;font-family:Menlo,monospace}.preview-toggle-container[data-v-b130569c]{align-self:flex-end;margin-right:20px}.step-container[data-v-4abdd121]{margin:0}.step-container[data-v-4abdd121]:not(:last-child){margin-bottom:100px}@media only screen and (max-width:735px){.step-container[data-v-4abdd121]:not(:last-child){margin-bottom:80px}}.step[data-v-4abdd121]{position:relative;border-radius:4px;padding:1rem 2rem;background-color:var(--color-step-background);overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(#fff,#000)}.step[data-v-4abdd121]:before{content:"";position:absolute;top:0;left:0;border:1px solid var(--color-step-focused);background-color:var(--color-step-focused);height:calc(100% - 2px);width:4px;opacity:0;transition:opacity .15s ease-in}.step.focused[data-v-4abdd121],.step[data-v-4abdd121]:focus{outline:none}.step.focused[data-v-4abdd121]:before,.step[data-v-4abdd121]:focus:before{opacity:1}@media only screen and (max-width:735px){.step[data-v-4abdd121]{padding-left:2rem}.step[data-v-4abdd121]:before{opacity:1}}.step-label[data-v-4abdd121]{font-size:.70588rem;line-height:1.33333;font-weight:600;letter-spacing:-.01em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--colors-text,var(--color-step-text));margin-bottom:.4em}.caption[data-v-4abdd121]{border-top:1px solid;border-color:var(--color-step-caption);padding:1rem 0 0 0;margin-top:1rem}.media-container[data-v-4abdd121]{display:none}@media only screen and (max-width:735px){.step[data-v-4abdd121]{margin:0 .58824rem 1.17647rem .58824rem}.step.focused[data-v-4abdd121],.step[data-v-4abdd121]:focus{outline:none}.media-container[data-v-4abdd121]{display:block;position:relative}.media-container[data-v-4abdd121] img,.media-container[data-v-4abdd121] video{max-height:80vh}[data-v-4abdd121] .asset{padding:0 20px}}.steps[data-v-25d30c2c]{position:relative;font-size:.82353rem;line-height:1.42857;font-weight:400;letter-spacing:-.016em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;color:var(--colors-text,var(--color-text))}@media only screen and (max-width:735px){.steps[data-v-25d30c2c]{padding-top:80px}.steps[data-v-25d30c2c]:before{position:absolute;top:0;border-top:1px solid var(--color-fill-gray-tertiary);content:"";width:calc(100% - 2.35294rem);margin:0 1.17647rem}}.content-container[data-v-25d30c2c]{flex:none;margin-right:4.16667%;width:37.5%;margin-top:140px;margin-bottom:94vh}@media only screen and (max-width:735px){.content-container[data-v-25d30c2c]{margin-top:0;margin-bottom:0;height:100%;margin-left:0;margin-right:0;position:relative;width:100%}}.asset-container[data-v-25d30c2c]{flex:none;height:calc(100vh - 3.05882rem);background-color:var(--background,var(--color-step-background));max-width:921px;width:calc(50vw + 8.33333%);position:sticky;top:3.05882rem;transition:margin .1s ease-in-out}@media only screen and (max-width:767px){.asset-container[data-v-25d30c2c]{top:2.82353rem;height:calc(100vh - 2.82353rem)}}.asset-container[data-v-25d30c2c]:not(.for-step-code){overflow-y:auto;-webkit-overflow-scrolling:touch}.asset-container.ide[data-v-25d30c2c]{height:100vh;top:0}@media only screen and (min-width:736px){.asset-container[data-v-25d30c2c]{display:grid}.asset-container>[data-v-25d30c2c]{grid-row:1;grid-column:1;height:calc(100vh - 3.05882rem)}.asset-container.ide>[data-v-25d30c2c]{height:100vh}}.asset-container .step-asset[data-v-25d30c2c]{box-sizing:border-box;padding:0;padding-left:40px;min-height:320px;height:100%}.asset-container .step-asset[data-v-25d30c2c],.asset-container .step-asset[data-v-25d30c2c] picture{height:100%;display:flex;align-items:center}.asset-container .step-asset[data-v-25d30c2c] .video-replay-container{height:100%;display:flex;flex-direction:column;justify-content:center}.asset-container .step-asset[data-v-25d30c2c] img,.asset-container .step-asset[data-v-25d30c2c] video{width:auto;max-height:calc(100vh - 3.05882rem - 80px);max-width:531.6634px;margin:0}@media only screen and (max-width:1068px){.asset-container .step-asset[data-v-25d30c2c] img,.asset-container .step-asset[data-v-25d30c2c] video{max-width:363.66436px}}.asset-container .step-asset[data-v-25d30c2c] .video-replay-container,.asset-container .step-asset[data-v-25d30c2c] img{min-height:320px}.asset-container .step-asset[data-v-25d30c2c] .video-replay-container video{min-height:280px}@media only screen and (max-width:735px){.asset-container[data-v-25d30c2c]{display:none}}.asset-wrapper[data-v-25d30c2c]{width:63.2%;align-self:center;transition:transform .25s ease-out;will-change:transform}.asset-wrapper.ide .step-asset[data-v-25d30c2c] img{background-color:var(--background,var(--color-step-background))}[data-v-25d30c2c] .runtime-preview-asset{display:grid}[data-v-25d30c2c] .runtime-preview-asset>*{grid-row:1;grid-column:1}.interstitial[data-v-25d30c2c]{padding:0 2rem}.interstitial[data-v-25d30c2c]:not(:first-child){margin-top:5.88235rem}.interstitial[data-v-25d30c2c]:not(:last-child){margin-bottom:30px}@media only screen and (max-width:735px){.interstitial[data-v-25d30c2c]{margin-left:auto;margin-right:auto;width:980px;padding:0}}@media only screen and (max-width:735px) and (max-width:1068px){.interstitial[data-v-25d30c2c]{width:692px}}@media only screen and (max-width:735px) and (max-width:735px){.interstitial[data-v-25d30c2c]{width:87.5%}}@media only screen and (max-width:735px){.interstitial[data-v-25d30c2c]:not(:first-child){margin-top:0}}.fade-enter-active[data-v-25d30c2c],.fade-leave-active[data-v-25d30c2c]{transition:opacity .3s ease-in-out}.fade-enter[data-v-25d30c2c],.fade-leave-to[data-v-25d30c2c]{opacity:0}.section[data-v-6b3a0b3a]{padding-top:80px}.sections[data-v-79a75e9e]{margin-left:auto;margin-right:auto;width:980px}@media only screen and (max-width:1068px){.sections[data-v-79a75e9e]{width:692px}}@media only screen and (max-width:735px){.sections[data-v-79a75e9e]{width:87.5%;margin:0;width:100%}}.tutorial[data-v-6e17d3d0]{background-color:var(--colors-text-background,var(--color-tutorial-background))} \ No newline at end of file diff --git a/docs/css/tutorials-overview.8754eb09.css b/docs/css/tutorials-overview.8754eb09.css new file mode 100644 index 0000000..5691d1b --- /dev/null +++ b/docs/css/tutorials-overview.8754eb09.css @@ -0,0 +1,9 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */.replay-button[data-v-7335dbb2]{display:flex;align-items:center;justify-content:center;cursor:pointer;visibility:hidden;margin-top:.5rem;-webkit-tap-highlight-color:transparent}.replay-button.visible[data-v-7335dbb2]{visibility:visible}.replay-button svg.replay-icon[data-v-7335dbb2]{height:12px;width:12px;margin-left:.3em}[data-v-1b5cc854] img,[data-v-1b5cc854] video{display:block;margin-left:auto;margin-right:auto;-o-object-fit:contain;object-fit:contain;max-width:100%}.hero[data-v-fc7f508c]{margin-left:auto;margin-right:auto;width:980px;padding-bottom:4.70588rem;padding-top:4.70588rem}@media only screen and (max-width:1068px){.hero[data-v-fc7f508c]{width:692px}}@media only screen and (max-width:735px){.hero[data-v-fc7f508c]{width:87.5%}}.copy-container[data-v-fc7f508c]{margin:0 auto;text-align:center;width:720px}.title[data-v-fc7f508c]{font-size:2.82353rem;line-height:1.08333;font-weight:400;letter-spacing:-.003em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--color-tutorials-overview-content)}@media only screen and (max-width:1068px){.title[data-v-fc7f508c]{font-size:2.35294rem;line-height:1.1;font-weight:400;letter-spacing:0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.title[data-v-fc7f508c]{font-size:1.88235rem;line-height:1.125;font-weight:400;letter-spacing:.013em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.content[data-v-fc7f508c]{font-size:1.23529rem;line-height:1.38095;font-weight:400;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--color-tutorials-overview-content)}@media only screen and (max-width:735px){.content[data-v-fc7f508c]{font-size:1.11765rem;line-height:1.42105;font-weight:400;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.meta[data-v-fc7f508c]{color:var(--color-tutorials-overview-content-alt);align-items:center;display:flex;justify-content:center}.meta-content[data-v-fc7f508c]{font-size:.82353rem;line-height:1.42857;font-weight:400;letter-spacing:-.016em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.meta .timer-icon[data-v-fc7f508c]{margin-right:.35294rem;height:.94118rem;width:.94118rem;fill:var(--color-tutorials-overview-icon)}@media only screen and (max-width:735px){.meta .timer-icon[data-v-fc7f508c]{margin-right:.29412rem;height:.82353rem;width:.82353rem}}.meta .time[data-v-fc7f508c]{font-size:1.11765rem;line-height:1.21053;font-weight:600;letter-spacing:.012em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media only screen and (max-width:735px){.meta .time[data-v-fc7f508c]{font-size:1rem;line-height:1.11765;font-weight:600;letter-spacing:.019em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.title+.content[data-v-fc7f508c]{margin-top:1.47059rem}.content+.meta[data-v-fc7f508c]{margin-top:1.17647rem}.button-cta[data-v-fc7f508c]{margin-top:1.76471rem}*+.asset[data-v-fc7f508c]{margin-top:4.11765rem}@media only screen and (max-width:1068px){.copy-container[data-v-fc7f508c]{width:636px}}@media only screen and (max-width:735px){.hero[data-v-fc7f508c]{padding-bottom:1.76471rem;padding-top:2.35294rem}.copy-container[data-v-fc7f508c]{width:100%}.title+.content[data-v-fc7f508c]{margin-top:.88235rem}.button-cta[data-v-fc7f508c]{margin-top:1.41176rem}*+.asset[data-v-fc7f508c]{margin-top:2.23529rem}}.image[data-v-14577284]{margin-bottom:10px}.name[data-v-14577284]{font-size:1.88235rem;line-height:1.125;font-weight:400;letter-spacing:.013em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#f0f0f0;word-break:break-word}@media only screen and (max-width:1068px){.name[data-v-14577284]{font-size:1.64706rem;line-height:1.14286;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.name[data-v-14577284]{font-size:1.41176rem;line-height:1.16667;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.content[data-v-14577284]{font-size:1rem;line-height:1.23529;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--color-tutorials-overview-content-alt);margin-top:10px}.volume-name[data-v-14577284]{padding:50px 60px;text-align:center;background:#161616;margin:2px 0}@media only screen and (max-width:735px){.volume-name[data-v-14577284]{padding:40px 20px}}.document-icon[data-v-56114692]{margin-left:-3px}.tile[data-v-86db603a]{background:#161616;padding:40px 30px;color:var(--color-tutorials-overview-content-alt)}.content[data-v-86db603a] a,a[data-v-86db603a]{color:var(--colors-link,var(--color-tutorials-overview-link))}.icon[data-v-86db603a]{display:block;height:1.47059rem;line-height:1.47059rem;margin-bottom:.58824rem;width:1.47059rem}.icon[data-v-86db603a] svg.svg-icon{width:100%;max-height:100%;fill:var(--color-tutorials-overview-icon)}.icon[data-v-86db603a] svg.svg-icon .svg-icon-stroke{stroke:var(--color-tutorials-overview-content-alt)}.title[data-v-86db603a]{font-size:1.23529rem;line-height:1.19048;font-weight:600;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;margin-bottom:.8em}.content[data-v-86db603a],.link[data-v-86db603a]{font-size:.82353rem;line-height:1.42857;font-weight:400;letter-spacing:-.016em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.content[data-v-86db603a]{color:var(--color-tutorials-overview-content-alt)}.link[data-v-86db603a]{display:block;margin-top:1.17647rem}.link .link-icon[data-v-86db603a]{margin-left:.2em;width:.6em;height:.6em}[data-v-86db603a] .content ul{list-style-type:none;margin-left:0;font-size:.82353rem;line-height:1.28571;font-weight:400;letter-spacing:-.016em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}[data-v-86db603a] .content ul li:before{content:"\200B";position:absolute}[data-v-86db603a] .content li+li{margin-top:8px}@media only screen and (max-width:735px){.tile[data-v-86db603a]{padding:1.76471rem 1.17647rem}}.tile-group[data-v-015f9f13]{display:grid;grid-column-gap:2px;grid-row-gap:2px}.tile-group.count-1[data-v-015f9f13]{grid-template-columns:1fr;text-align:center}.tile-group.count-1[data-v-015f9f13] .icon{margin-left:auto;margin-right:auto}.tile-group.count-2[data-v-015f9f13]{grid-template-columns:repeat(2,1fr)}.tile-group.count-3[data-v-015f9f13]{grid-template-columns:repeat(3,1fr)}.tile-group.count-4[data-v-015f9f13]{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,auto)}.tile-group.count-5[data-v-015f9f13]{grid-template-columns:repeat(6,1fr);grid-template-rows:repeat(2,auto)}.tile-group.count-5 .tile[data-v-015f9f13]{grid-column-end:span 2}.tile-group.count-5 .tile[data-v-015f9f13]:nth-of-type(-n+2){grid-column-end:span 3}.tile-group.count-6[data-v-015f9f13]{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(3,auto)}@media only screen and (min-width:768px) and (max-width:1068px){.tile-group.tile-group[data-v-015f9f13]{grid-template-columns:1fr;grid-template-rows:auto}}@media only screen and (max-width:735px){.tile-group.count-1[data-v-015f9f13],.tile-group.count-2[data-v-015f9f13],.tile-group.count-3[data-v-015f9f13],.tile-group.count-4[data-v-015f9f13],.tile-group.count-5[data-v-015f9f13],.tile-group.count-6[data-v-015f9f13]{grid-template-columns:1fr;grid-template-rows:auto}}.title[data-v-49ba6f62]{font-size:1.88235rem;line-height:1.125;font-weight:400;letter-spacing:.013em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#f0f0f0}@media only screen and (max-width:1068px){.title[data-v-49ba6f62]{font-size:1.64706rem;line-height:1.14286;font-weight:400;letter-spacing:.007em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}@media only screen and (max-width:735px){.title[data-v-49ba6f62]{font-size:1.41176rem;line-height:1.16667;font-weight:400;letter-spacing:.009em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.content[data-v-49ba6f62]{font-size:1rem;line-height:1.23529;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#b0b0b0;margin-top:10px}.tutorials-navigation-link[data-v-6bb99205]{color:var(--color-tutorials-overview-navigation-link);transition:color .3s linear}.tutorials-navigation-link[data-v-6bb99205]:hover{text-decoration:none;transition:none;color:var(--color-tutorials-overview-navigation-link-hover)}.tutorials-navigation-link.active[data-v-6bb99205]{color:var(--color-tutorials-overview-navigation-link-active)}.tutorials-navigation-list[data-v-6f2800d1]{list-style-type:none;margin:0}.tutorials-navigation-list li+li[data-v-6f2800d1]:not(.volume--named){margin-top:24px}.tutorials-navigation-list .volume--named+.volume--named[data-v-6f2800d1]{margin-top:12px}.expand-enter-active,.expand-leave-active{transition:height .3s ease-in-out;overflow:hidden}.expand-enter,.expand-leave-to{height:0}.toggle[data-v-6513d652]{color:#f0f0f0;line-height:21px;display:flex;align-items:center;width:100%;font-weight:600;padding:6px 6px 6px 0;border-bottom:1px solid #2a2a2a;text-decoration:none;box-sizing:border-box}@media only screen and (max-width:767px){.toggle[data-v-6513d652]{padding-right:6px;border-bottom-color:hsla(0,0%,100%,.1)}}.toggle .text[data-v-6513d652]{word-break:break-word}.toggle[data-v-6513d652]:hover{text-decoration:none}.toggle .toggle-icon[data-v-6513d652]{display:inline-block;transition:transform .2s ease-in;height:.4em;width:.4em;margin-left:auto;margin-right:.2em}.collapsed .toggle .toggle-icon[data-v-6513d652]{transform:rotate(45deg)}.collapsed .toggle[data-v-6513d652],.collapsed .toggle[data-v-6513d652]:hover{color:#b0b0b0}.tutorials-navigation-menu-content[data-v-6513d652]{opacity:1;transition:height .2s ease-in,opacity .2s ease-in}.collapsed .tutorials-navigation-menu-content[data-v-6513d652]{height:0;opacity:0}.tutorials-navigation-menu-content .tutorials-navigation-list[data-v-6513d652]{padding:24px 0 12px 0}.tutorials-navigation[data-v-0cbd8adb]{font-size:1rem;line-height:1.23529;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.topic-list[data-v-9a8371c6]{list-style-type:none;margin:50px 0 0 0;position:relative}.topic-list li[data-v-9a8371c6]:before{content:"\200B";position:absolute}.topic-list[data-v-9a8371c6]:before{content:"";border-left:1px solid var(--color-fill-quaternary);display:block;height:calc(100% - .88235rem);left:.88235rem;position:absolute;top:50%;transform:translateY(-50%);width:0}.topic[data-v-9a8371c6]{font-size:1rem;line-height:1.47059;font-weight:400;letter-spacing:-.022em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;align-items:flex-start}@media only screen and (max-width:735px){.topic[data-v-9a8371c6]{font-size:.82353rem;line-height:1.28571;font-weight:400;letter-spacing:-.016em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}}.topic+.topic[data-v-9a8371c6]{margin-top:.58824rem}.topic .topic-icon[data-v-9a8371c6]{background-color:var(--color-fill-quaternary);border-radius:50%;flex-shrink:0;height:1.76471rem;width:1.76471rem;margin-right:1.17647rem;position:relative;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:.47059rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center}.topic .topic-icon svg[data-v-9a8371c6]{fill:var(--color-tutorials-overview-icon);max-width:100%;max-height:100%;width:100%}.container[data-v-9a8371c6]{align-items:baseline;display:flex;justify-content:space-between;width:100%;padding-top:.11765rem}.container[data-v-9a8371c6]:hover{text-decoration:none}.container:hover .link[data-v-9a8371c6]{text-decoration:underline}.timer-icon[data-v-9a8371c6]{margin-right:.29412rem;height:.70588rem;width:.70588rem;fill:var(--color-tutorials-overview-icon)}.time[data-v-9a8371c6]{font-size:.82353rem;line-height:1.28571;font-weight:400;letter-spacing:-.016em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--color-tutorials-overview-content-alt);align-items:center;display:inline-flex}.link[data-v-9a8371c6]{padding-right:.58824rem;color:var(--colors-link,var(--color-tutorials-overview-link))}@media only screen and (min-width:768px) and (max-width:1068px){.topic-list[data-v-9a8371c6]{margin-top:2.35294rem}}@media only screen and (max-width:735px){.topic-list[data-v-9a8371c6]{margin-top:1.76471rem}.topic[data-v-9a8371c6]{height:auto;align-items:flex-start}.topic+.topic[data-v-9a8371c6]{margin-top:1.17647rem}.topic .topic-icon[data-v-9a8371c6]{top:.29412rem;margin-right:.76471rem}.container[data-v-9a8371c6]{flex-wrap:wrap;padding-top:0}.link[data-v-9a8371c6],.time[data-v-9a8371c6]{flex-basis:100%}.time[data-v-9a8371c6]{margin-top:.29412rem}}.chapter[data-v-1d13969f]:focus{outline:none!important}.info[data-v-1d13969f]{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between}.name[data-v-1d13969f]{font-size:1.23529rem;line-height:1.19048;font-weight:600;letter-spacing:.011em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#f0f0f0}.name-text[data-v-1d13969f]{word-break:break-word}.eyebrow[data-v-1d13969f]{font-size:1rem;line-height:1.23529;font-weight:400;letter-spacing:-.022em;color:var(--color-tutorials-overview-eyebrow);display:block;font-weight:600;margin-bottom:5px}.content[data-v-1d13969f],.eyebrow[data-v-1d13969f]{font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.content[data-v-1d13969f]{font-size:.82353rem;line-height:1.42857;font-weight:400;letter-spacing:-.016em;color:var(--color-tutorials-overview-content-alt)}.asset[data-v-1d13969f]{flex:0 0 190px}.intro[data-v-1d13969f]{flex:0 1 360px}@media only screen and (min-width:768px) and (max-width:1068px){.asset[data-v-1d13969f]{flex:0 0 130px}.intro[data-v-1d13969f]{flex:0 1 260px}}@media only screen and (max-width:767px){.intro[data-v-1d13969f]{flex:0 1 340px}}@media only screen and (max-width:735px){.info[data-v-1d13969f]{display:block;text-align:center}.asset[data-v-1d13969f]{margin:0 45px}.eyebrow[data-v-1d13969f]{margin-bottom:7px}.intro[data-v-1d13969f]{margin-top:40px}}.tile[data-v-2129f58c]{background:#161616;margin:2px 0;padding:50px 60px}.asset[data-v-2129f58c]{margin-bottom:10px}@media only screen and (min-width:768px) and (max-width:1068px){.tile[data-v-2129f58c]{padding:40px 30px}}@media only screen and (max-width:735px){.volume[data-v-2129f58c]{border-radius:0}.tile[data-v-2129f58c]{padding:40px 20px}}.learning-path[data-v-48bfa85c]{background:#000;padding:4.70588rem 0}.main-container[data-v-48bfa85c]{margin-left:auto;margin-right:auto;width:980px;align-items:stretch;display:flex;justify-content:space-between}@media only screen and (max-width:1068px){.main-container[data-v-48bfa85c]{width:692px}}@media only screen and (max-width:735px){.main-container[data-v-48bfa85c]{width:87.5%}}.ide .main-container[data-v-48bfa85c]{justify-content:center}.secondary-content-container[data-v-48bfa85c]{flex:0 0 200px;width:200px}.tutorials-navigation[data-v-48bfa85c]{position:sticky;top:7.76471rem}.primary-content-container[data-v-48bfa85c]{flex:0 1 720px;max-width:100%}.content-sections-container .content-section[data-v-48bfa85c]{border-radius:12px;overflow:hidden}.content-sections-container .content-section+.content-section[data-v-48bfa85c]{margin-top:1.17647rem}@media only screen and (min-width:768px) and (max-width:1068px){.learning-path[data-v-48bfa85c]{padding:2.35294rem 0}.primary-content-container[data-v-48bfa85c]{flex-basis:auto;margin-left:1.29412rem}.secondary-content-container[data-v-48bfa85c]{flex:0 0 180px;width:180px}}@media only screen and (max-width:767px){.secondary-content-container[data-v-48bfa85c]{display:none}}@media only screen and (max-width:735px){.content-sections-container .content-section[data-v-48bfa85c]{border-radius:0}.content-sections-container .content-section.volume[data-v-48bfa85c]{margin-top:1.17647rem}.learning-path[data-v-48bfa85c]{padding:0}.main-container[data-v-48bfa85c]{width:100%}}.nav-title-content[data-v-60ea3af8]{max-width:100%}.title[data-v-60ea3af8]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:inline-block;vertical-align:top;max-width:296px}@media only screen and (max-width:1023px){.title[data-v-60ea3af8]{max-width:205px}}@media only screen and (max-width:767px){.title[data-v-60ea3af8]{flex-basis:fill;display:initial;vertical-align:initial;max-width:none}}.subhead[data-v-60ea3af8]{color:var(--color-nav-root-subhead)}.theme-dark .subhead[data-v-60ea3af8]{color:var(--color-nav-dark-root-subhead)}.tutorials-navigation[data-v-07700f98]{display:none}@media only screen and (max-width:767px){.tutorials-navigation[data-v-07700f98]{display:block}}.nav[data-v-07700f98] .nav-menu .nav-menu-items{padding:12px 0 44px 0}@media only screen and (min-width:768px){.nav[data-v-07700f98] .nav-menu .nav-menu-items{display:none}}@media only screen and (min-width:736px) and (max-width:1068px){.nav[data-v-07700f98] .nav-menu .nav-menu-items{padding-top:25px}}@media only screen and (min-width:320px) and (max-width:735px){.nav[data-v-07700f98] .nav-menu .nav-menu-items{padding-top:18px;padding-bottom:40px}}.tutorials-overview[data-v-0c0b1eea]{height:100%}.tutorials-overview .radial-gradient[data-v-0c0b1eea]{margin-top:-3.05882rem;padding-top:3.05882rem;background:var(--color-tutorials-overview-background)}@media only screen and (max-width:735px){.tutorials-overview .radial-gradient[data-v-0c0b1eea]{margin-top:-2.82353rem;padding-top:2.82353rem}}@-moz-document url-prefix(){.tutorials-overview .radial-gradient{background:#111!important}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain.json b/docs/data/documentation/simplekeychain.json new file mode 100644 index 0000000..9e1ddc0 --- /dev/null +++ b/docs/data/documentation/simplekeychain.json @@ -0,0 +1 @@ +{"variants":[{"paths":["\/documentation\/simplekeychain"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":""}],"kind":"symbol","metadata":{"roleHeading":"Framework","externalID":"SimpleKeychain","title":"SimpleKeychain","symbolKind":"module","role":"collection","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[[]]},"topicSections":[{"title":"Structures","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]},{"title":"Enumerations","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"]}],"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility.json b/docs/data/documentation/simplekeychain/accessibility.json new file mode 100644 index 0000000..9cebcdc --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/com.auth0.SimpleKeychain\/SQ","doc:\/\/com.auth0.SimpleKeychain\/SH","doc:\/\/com.auth0.SimpleKeychain\/SY"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"title":"Accessibility","roleHeading":"Enumeration","role":"symbol","symbolKind":"enum","externalID":"s:14SimpleKeychain13AccessibilityO","modules":[{"name":"SimpleKeychain"}],"navigatorTitle":[{"kind":"identifier","text":"Accessibility"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain"]]},"topicSections":[{"title":"Enumeration Cases","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/afterFirstUnlock","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/afterFirstUnlockThisDeviceOnly","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenPasscodeSetThisDeviceOnly","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenUnlocked","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenUnlockedThisDeviceOnly"]},{"title":"Initializers","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/init(rawValue:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/rawValue"]},{"title":"Default Implementations","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/Equatable-Implementations","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/RawRepresentable-Implementations"],"generated":true}],"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/RawRepresentable-Implementations":{"role":"collectionGroup","title":"RawRepresentable Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/RawRepresentable-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/rawrepresentable-implementations"},"doc://com.auth0.SimpleKeychain/SY":{"type":"unresolvable","title":"Swift.RawRepresentable","identifier":"doc:\/\/com.auth0.SimpleKeychain\/SY"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/whenPasscodeSetThisDeviceOnly":{"role":"symbol","title":"Accessibility.whenPasscodeSetThisDeviceOnly","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenPasscodeSetThisDeviceOnly"}],"abstract":[{"type":"text","text":"The data in the Keychain can only be accessed when the device is unlocked. Only available if a passcode is set on the device."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenPasscodeSetThisDeviceOnly","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/whenpasscodesetthisdeviceonly"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/equatable-implementations"},"doc://com.auth0.SimpleKeychain/SH":{"type":"unresolvable","title":"Swift.Hashable","identifier":"doc:\/\/com.auth0.SimpleKeychain\/SH"},"https://developer.apple.com/documentation/security/ksecattraccessiblewhenunlocked":{"title":"kSecAttrAccessibleWhenUnlocked","titleInlineContent":[{"type":"text","text":"kSecAttrAccessibleWhenUnlocked"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenunlocked","url":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenunlocked"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/whenUnlocked":{"role":"symbol","title":"Accessibility.whenUnlocked","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenUnlocked"}],"abstract":[{"type":"text","text":"The data in the Keychain item can be accessed only while the device is unlocked by the user."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenunlocked"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenUnlocked","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/whenunlocked"},"https://developer.apple.com/documentation/security/ksecattraccessibleafterfirstunlock":{"title":"kSecAttrAccessibleAfterFirstUnlock","titleInlineContent":[{"type":"text","text":"kSecAttrAccessibleAfterFirstUnlock"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlock","url":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlock"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/afterFirstUnlockThisDeviceOnly":{"role":"symbol","title":"Accessibility.afterFirstUnlockThisDeviceOnly","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"afterFirstUnlockThisDeviceOnly"}],"abstract":[{"type":"text","text":"The data in the Keychain item cannot be accessed after a restart until the device has been unlocked once by the user."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlockthisdeviceonly"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/afterFirstUnlockThisDeviceOnly","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/afterfirstunlockthisdeviceonly"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/rawValue":{"role":"symbol","title":"rawValue","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"rawValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFString","preciseIdentifier":"c:@T@CFStringRef"}],"abstract":[{"type":"text","text":"The "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" value of a given accessibility type."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/rawValue","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/rawvalue"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/whenUnlockedThisDeviceOnly":{"role":"symbol","title":"Accessibility.whenUnlockedThisDeviceOnly","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenUnlockedThisDeviceOnly"}],"abstract":[{"type":"text","text":"The data in the Keychain can only be accessed when the device is unlocked. Only available if a passcode is set on the device."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenUnlockedThisDeviceOnly","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/whenunlockedthisdeviceonly"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/init(rawValue:)":{"role":"symbol","title":"init(rawValue:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"rawValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFString","preciseIdentifier":"c:@T@CFStringRef"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Maps a "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" value to an accessibility type."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/init(rawValue:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/init(rawvalue:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/afterFirstUnlock":{"role":"symbol","title":"Accessibility.afterFirstUnlock","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"afterFirstUnlock"}],"abstract":[{"type":"text","text":"The data in the Keychain item cannot be accessed after a restart until the device has been unlocked once by the user."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlock"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/afterFirstUnlock","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/afterfirstunlock"},"https://developer.apple.com/documentation/security/ksecattraccessibleafterfirstunlockthisdeviceonly":{"title":"kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly","titleInlineContent":[{"type":"text","text":"kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlockthisdeviceonly","url":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlockthisdeviceonly"},"doc://com.auth0.SimpleKeychain/SQ":{"type":"unresolvable","title":"Swift.Equatable","identifier":"doc:\/\/com.auth0.SimpleKeychain\/SQ"},"https://developer.apple.com/documentation/security/ksecattraccessiblewhenpasscodesetthisdeviceonly":{"title":"kSecAttrAccessibleWhenUnlockedThisDeviceOnly","titleInlineContent":[{"type":"text","text":"kSecAttrAccessibleWhenUnlockedThisDeviceOnly"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly","url":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/!=(_:_:).json b/docs/data/documentation/simplekeychain/accessibility/!=(_:_:).json new file mode 100644 index 0000000..a6947c8 --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/!=(_:_:).json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:14SimpleKeychain13AccessibilityO","extendedModule":"Swift","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/Equatable-Implementations"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/equatable-implementations"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/!=(_:_:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/afterfirstunlock.json b/docs/data/documentation/simplekeychain/accessibility/afterfirstunlock.json new file mode 100644 index 0000000..2c58a4f --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/afterfirstunlock.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"afterFirstUnlock"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/afterfirstunlock"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/afterFirstUnlock","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The data in the Keychain item cannot be accessed after a restart until the device has been unlocked once by the user."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlock"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"afterFirstUnlock"}],"title":"Accessibility.afterFirstUnlock","roleHeading":"Case","role":"symbol","symbolKind":"case","externalID":"s:14SimpleKeychain13AccessibilityO16afterFirstUnlockyA2CmF","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/afterFirstUnlock":{"role":"symbol","title":"Accessibility.afterFirstUnlock","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"afterFirstUnlock"}],"abstract":[{"type":"text","text":"The data in the Keychain item cannot be accessed after a restart until the device has been unlocked once by the user."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlock"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/afterFirstUnlock","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/afterfirstunlock"},"https://developer.apple.com/documentation/security/ksecattraccessibleafterfirstunlock":{"title":"kSecAttrAccessibleAfterFirstUnlock","titleInlineContent":[{"type":"text","text":"kSecAttrAccessibleAfterFirstUnlock"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlock","url":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlock"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/afterfirstunlockthisdeviceonly.json b/docs/data/documentation/simplekeychain/accessibility/afterfirstunlockthisdeviceonly.json new file mode 100644 index 0000000..5a11bc3 --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/afterfirstunlockthisdeviceonly.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"afterFirstUnlockThisDeviceOnly"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/afterfirstunlockthisdeviceonly"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/afterFirstUnlockThisDeviceOnly","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The data in the Keychain item cannot be accessed after a restart until the device has been unlocked once by the user."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlockthisdeviceonly"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"afterFirstUnlockThisDeviceOnly"}],"title":"Accessibility.afterFirstUnlockThisDeviceOnly","roleHeading":"Case","role":"symbol","symbolKind":"case","externalID":"s:14SimpleKeychain13AccessibilityO30afterFirstUnlockThisDeviceOnlyyA2CmF","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"]]},"references":{"https://developer.apple.com/documentation/security/ksecattraccessibleafterfirstunlockthisdeviceonly":{"title":"kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly","titleInlineContent":[{"type":"text","text":"kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlockthisdeviceonly","url":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlockthisdeviceonly"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/afterFirstUnlockThisDeviceOnly":{"role":"symbol","title":"Accessibility.afterFirstUnlockThisDeviceOnly","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"afterFirstUnlockThisDeviceOnly"}],"abstract":[{"type":"text","text":"The data in the Keychain item cannot be accessed after a restart until the device has been unlocked once by the user."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlockthisdeviceonly"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/afterFirstUnlockThisDeviceOnly","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/afterfirstunlockthisdeviceonly"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/equatable-implementations.json b/docs/data/documentation/simplekeychain/accessibility/equatable-implementations.json new file mode 100644 index 0000000..8a08026 --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/equatable-implementations.json @@ -0,0 +1 @@ +{"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/Equatable-Implementations","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"No overview available."}],"kind":"article","metadata":{"modules":[{"name":"SimpleKeychain"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"]]},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/!=(_:_:)"],"generated":true}],"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/!=(_:_:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/hash(into:).json b/docs/data/documentation/simplekeychain/accessibility/hash(into:).json new file mode 100644 index 0000000..bfe82da --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/hash(into:).json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":" "},{"kind":"internalParam","text":"hasher"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/hash(into:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/hash(into:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"RawRepresentable.hash(into:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"conformance":{"constraints":[{"type":"codeVoice","code":"Self"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":" and "},{"type":"codeVoice","code":"RawValue"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":"."}],"availabilityPrefix":[{"type":"text","text":"Available when"}],"conformancePrefix":[{"type":"text","text":"Conforms when"}]},"role":"symbol","title":"hash(into:)","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"symbolKind":"method","externalID":"s:SYsSHRzSH8RawValueSYRpzrlE4hash4intoys6HasherVz_tF::SYNTHESIZED::s:14SimpleKeychain13AccessibilityO","extendedModule":"Swift","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/RawRepresentable-Implementations"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/hash(into:)":{"conformance":{"constraints":[{"type":"codeVoice","code":"Self"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":" and "},{"type":"codeVoice","code":"RawValue"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":"."}],"availabilityPrefix":[{"type":"text","text":"Available when"}],"conformancePrefix":[{"type":"text","text":"Conforms when"}]},"role":"symbol","title":"hash(into:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/hash(into:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/hash(into:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/RawRepresentable-Implementations":{"role":"collectionGroup","title":"RawRepresentable Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/RawRepresentable-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/rawrepresentable-implementations"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/hashvalue.json b/docs/data/documentation/simplekeychain/accessibility/hashvalue.json new file mode 100644 index 0000000..94e02be --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/hashvalue.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"hashValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/hashvalue"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/hashValue","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"RawRepresentable.hashValue"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"conformance":{"constraints":[{"type":"codeVoice","code":"Self"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":" and "},{"type":"codeVoice","code":"RawValue"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":"."}],"availabilityPrefix":[{"type":"text","text":"Available when"}],"conformancePrefix":[{"type":"text","text":"Conforms when"}]},"role":"symbol","title":"hashValue","roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"hashValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"symbolKind":"property","externalID":"s:SYsSHRzSH8RawValueSYRpzrlE04hashB0Sivp::SYNTHESIZED::s:14SimpleKeychain13AccessibilityO","extendedModule":"Swift","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/RawRepresentable-Implementations"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/hashValue":{"conformance":{"constraints":[{"type":"codeVoice","code":"Self"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":" and "},{"type":"codeVoice","code":"RawValue"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":"."}],"availabilityPrefix":[{"type":"text","text":"Available when"}],"conformancePrefix":[{"type":"text","text":"Conforms when"}]},"role":"symbol","title":"hashValue","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"hashValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/hashValue","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/hashvalue"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/RawRepresentable-Implementations":{"role":"collectionGroup","title":"RawRepresentable Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/RawRepresentable-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/rawrepresentable-implementations"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/init(rawvalue:).json b/docs/data/documentation/simplekeychain/accessibility/init(rawvalue:).json new file mode 100644 index 0000000..d264197 --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/init(rawvalue:).json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"rawValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFString","preciseIdentifier":"c:@T@CFStringRef"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/init(rawvalue:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/init(rawValue:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Maps a "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" value to an accessibility type."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"rawValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFString","preciseIdentifier":"c:@T@CFStringRef"},{"kind":"text","text":")"}],"title":"init(rawValue:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:14SimpleKeychain13AccessibilityO8rawValueACSo11CFStringRefa_tcfc","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/init(rawValue:)":{"role":"symbol","title":"init(rawValue:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"rawValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFString","preciseIdentifier":"c:@T@CFStringRef"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Maps a "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" value to an accessibility type."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/init(rawValue:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/init(rawvalue:)"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/rawrepresentable-implementations.json b/docs/data/documentation/simplekeychain/accessibility/rawrepresentable-implementations.json new file mode 100644 index 0000000..64dca11 --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/rawrepresentable-implementations.json @@ -0,0 +1 @@ +{"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/rawrepresentable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/RawRepresentable-Implementations","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"No overview available."}],"kind":"article","metadata":{"modules":[{"name":"SimpleKeychain"}],"role":"collectionGroup","title":"RawRepresentable Implementations"},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"]]},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/hashValue"],"generated":true},{"title":"Instance Methods","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/hash(into:)"],"generated":true}],"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/hashValue":{"conformance":{"constraints":[{"type":"codeVoice","code":"Self"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":" and "},{"type":"codeVoice","code":"RawValue"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":"."}],"availabilityPrefix":[{"type":"text","text":"Available when"}],"conformancePrefix":[{"type":"text","text":"Conforms when"}]},"role":"symbol","title":"hashValue","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"hashValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/hashValue","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/hashvalue"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/hash(into:)":{"conformance":{"constraints":[{"type":"codeVoice","code":"Self"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":" and "},{"type":"codeVoice","code":"RawValue"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"Hashable"},{"type":"text","text":"."}],"availabilityPrefix":[{"type":"text","text":"Available when"}],"conformancePrefix":[{"type":"text","text":"Conforms when"}]},"role":"symbol","title":"hash(into:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/hash(into:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/hash(into:)"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/rawvalue.json b/docs/data/documentation/simplekeychain/accessibility/rawvalue.json new file mode 100644 index 0000000..2f0019d --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/rawvalue.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"rawValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFString","preciseIdentifier":"c:@T@CFStringRef"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/rawvalue"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/rawValue","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" value of a given accessibility type."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"rawValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFString","preciseIdentifier":"c:@T@CFStringRef"}],"title":"rawValue","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain13AccessibilityO8rawValueSo11CFStringRefavp","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/rawValue":{"role":"symbol","title":"rawValue","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"rawValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFString","preciseIdentifier":"c:@T@CFStringRef"}],"abstract":[{"type":"text","text":"The "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" value of a given accessibility type."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/rawValue","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/rawvalue"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/whenpasscodesetthisdeviceonly.json b/docs/data/documentation/simplekeychain/accessibility/whenpasscodesetthisdeviceonly.json new file mode 100644 index 0000000..a37306a --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/whenpasscodesetthisdeviceonly.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenPasscodeSetThisDeviceOnly"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/whenpasscodesetthisdeviceonly"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenPasscodeSetThisDeviceOnly","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The data in the Keychain can only be accessed when the device is unlocked. Only available if a passcode is set on the device."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenPasscodeSetThisDeviceOnly"}],"title":"Accessibility.whenPasscodeSetThisDeviceOnly","roleHeading":"Case","role":"symbol","symbolKind":"case","externalID":"s:14SimpleKeychain13AccessibilityO29whenPasscodeSetThisDeviceOnlyyA2CmF","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/whenPasscodeSetThisDeviceOnly":{"role":"symbol","title":"Accessibility.whenPasscodeSetThisDeviceOnly","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenPasscodeSetThisDeviceOnly"}],"abstract":[{"type":"text","text":"The data in the Keychain can only be accessed when the device is unlocked. Only available if a passcode is set on the device."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenPasscodeSetThisDeviceOnly","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/whenpasscodesetthisdeviceonly"},"https://developer.apple.com/documentation/security/ksecattraccessiblewhenpasscodesetthisdeviceonly":{"title":"kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly","titleInlineContent":[{"type":"text","text":"kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly","url":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/whenunlocked.json b/docs/data/documentation/simplekeychain/accessibility/whenunlocked.json new file mode 100644 index 0000000..8255266 --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/whenunlocked.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenUnlocked"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/whenunlocked"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenUnlocked","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The data in the Keychain item can be accessed only while the device is unlocked by the user."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenunlocked"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenUnlocked"}],"title":"Accessibility.whenUnlocked","roleHeading":"Case","role":"symbol","symbolKind":"case","externalID":"s:14SimpleKeychain13AccessibilityO12whenUnlockedyA2CmF","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/whenUnlocked":{"role":"symbol","title":"Accessibility.whenUnlocked","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenUnlocked"}],"abstract":[{"type":"text","text":"The data in the Keychain item can be accessed only while the device is unlocked by the user."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenunlocked"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenUnlocked","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/whenunlocked"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"https://developer.apple.com/documentation/security/ksecattraccessiblewhenunlocked":{"title":"kSecAttrAccessibleWhenUnlocked","titleInlineContent":[{"type":"text","text":"kSecAttrAccessibleWhenUnlocked"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenunlocked","url":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenunlocked"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/accessibility/whenunlockedthisdeviceonly.json b/docs/data/documentation/simplekeychain/accessibility/whenunlockedthisdeviceonly.json new file mode 100644 index 0000000..892a9ec --- /dev/null +++ b/docs/data/documentation/simplekeychain/accessibility/whenunlockedthisdeviceonly.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenUnlockedThisDeviceOnly"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/accessibility\/whenunlockedthisdeviceonly"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenUnlockedThisDeviceOnly","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The data in the Keychain can only be accessed when the device is unlocked. Only available if a passcode is set on the device."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenUnlockedThisDeviceOnly"}],"title":"Accessibility.whenUnlockedThisDeviceOnly","roleHeading":"Case","role":"symbol","symbolKind":"case","externalID":"s:14SimpleKeychain13AccessibilityO26whenUnlockedThisDeviceOnlyyA2CmF","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"]]},"references":{"https://developer.apple.com/documentation/security/ksecattraccessiblewhenpasscodesetthisdeviceonly":{"title":"kSecAttrAccessibleWhenUnlockedThisDeviceOnly","titleInlineContent":[{"type":"text","text":"kSecAttrAccessibleWhenUnlockedThisDeviceOnly"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly","url":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/whenUnlockedThisDeviceOnly":{"role":"symbol","title":"Accessibility.whenUnlockedThisDeviceOnly","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"whenUnlockedThisDeviceOnly"}],"abstract":[{"type":"text","text":"The data in the Keychain can only be accessed when the device is unlocked. Only available if a passcode is set on the device."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessiblewhenpasscodesetthisdeviceonly"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/whenUnlockedThisDeviceOnly","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/whenunlockedthisdeviceonly"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychain.json b/docs/data/documentation/simplekeychain/simplekeychain.json new file mode 100644 index 0000000..6dbf6fd --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychain.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychain"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"title":"SimpleKeychain","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:14SimpleKeychainAAV","modules":[{"name":"SimpleKeychain"}],"navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain"]]},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/init(service:accessGroup:accessibility:accessControlFlags:context:synchronizable:attributes:)"]},{"title":"Instance Methods","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/data(forKey:)","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/deleteAll()","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/deleteItem(forKey:)","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/hasItem(forKey:)","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/keys()","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/set(_:forKey:)-618u7","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/set(_:forKey:)-n98i","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/string(forKey:)"]}],"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/set(_:forKey:)-618u7":{"role":"symbol","title":"set(_:forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"set"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"},{"kind":"text","text":", "},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"abstract":[{"type":"text","text":"Saves a "},{"type":"codeVoice","code":"Data"},{"type":"text","text":" value with the type "},{"type":"codeVoice","code":"kSecClassGenericPassword"},{"type":"text","text":" in the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/set(_:forKey:)-618u7","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/set(_:forkey:)-618u7"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/set(_:forKey:)-n98i":{"role":"symbol","title":"set(_:forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"set"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"abstract":[{"type":"text","text":"Saves a "},{"type":"codeVoice","code":"String"},{"type":"text","text":" value with the type "},{"type":"codeVoice","code":"kSecClassGenericPassword"},{"type":"text","text":" in the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/set(_:forKey:)-n98i","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/set(_:forkey:)-n98i"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/string(forKey:)":{"role":"symbol","title":"string(forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"string"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[{"type":"text","text":"Retrieves a "},{"type":"codeVoice","code":"String"},{"type":"text","text":" value from the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/string(forKey:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/string(forkey:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/deleteAll()":{"role":"symbol","title":"deleteAll()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"deleteAll"},{"kind":"text","text":"() "},{"kind":"keyword","text":"throws"}],"abstract":[{"type":"text","text":"Deletes all items from the Keychain for the service and access group values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/deleteAll()","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/deleteall()"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/deleteItem(forKey:)":{"role":"symbol","title":"deleteItem(forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"deleteItem"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"abstract":[{"type":"text","text":"Deletes an item from the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/deleteItem(forKey:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/deleteitem(forkey:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/keys()":{"role":"symbol","title":"keys()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"keys"},{"kind":"text","text":"() "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"]"}],"abstract":[{"type":"text","text":"Retrieves the keys of all the items stored in the Keychain for the service and access group values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/keys()","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/keys()"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/init(service:accessGroup:accessibility:accessControlFlags:context:synchronizable:attributes:)":{"role":"symbol","title":"init(service:accessGroup:accessibility:accessControlFlags:context:synchronizable:attributes:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"service"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"externalParam","text":"accessGroup"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?, "},{"kind":"externalParam","text":"accessibility"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Accessibility","preciseIdentifier":"s:14SimpleKeychain13AccessibilityO"},{"kind":"text","text":", "},{"kind":"externalParam","text":"accessControlFlags"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SecAccessControlCreateFlags","preciseIdentifier":"c:@E@SecAccessControlCreateFlags"},{"kind":"text","text":"?, "},{"kind":"externalParam","text":"context"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"LAContext","preciseIdentifier":"c:objc(cs)LAContext"},{"kind":"text","text":"?, "},{"kind":"externalParam","text":"synchronizable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":", "},{"kind":"externalParam","text":"attributes"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"])"}],"abstract":[{"type":"text","text":"Initializes a "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain"},{"type":"text","text":" instance."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/init(service:accessGroup:accessibility:accessControlFlags:context:synchronizable:attributes:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/data(forKey:)":{"role":"symbol","title":"data(forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"data"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"}],"abstract":[{"type":"text","text":"Retrieves a "},{"type":"codeVoice","code":"Data"},{"type":"text","text":" value from the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/data(forKey:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/data(forkey:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/hasItem(forKey:)":{"role":"symbol","title":"hasItem(forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasItem"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Checks if an item is stored in the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/hasItem(forKey:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/hasitem(forkey:)"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychain/data(forkey:).json b/docs/data/documentation/simplekeychain/simplekeychain/data(forkey:).json new file mode 100644 index 0000000..c1913f6 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychain/data(forkey:).json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"data"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":" "},{"kind":"internalParam","text":"key"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"content","content":[{"anchor":"return-value","level":2,"type":"heading","text":"Return Value"},{"type":"paragraph","inlineContent":[{"type":"text","text":"The "},{"type":"codeVoice","code":"Data"},{"type":"text","text":" value."}]}]},{"kind":"parameters","parameters":[{"name":"key","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Key of the Keychain item to retrieve."}]}]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"codeListing","syntax":"swift","code":["let value = try simpleKeychain.data(forKey: \"your_key\")"]},{"style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"},{"type":"text","text":" when the SimpleKeychain operation fails."}]}],"type":"aside","name":"Throws"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychain\/data(forkey:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/data(forKey:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Retrieves a "},{"type":"codeVoice","code":"Data"},{"type":"text","text":" value from the Keychain."}],"kind":"symbol","metadata":{"role":"symbol","title":"data(forKey:)","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"data"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"}],"symbolKind":"method","externalID":"s:14SimpleKeychainAAV4data6forKey10Foundation4DataVSS_tKF","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/data(forKey:)":{"role":"symbol","title":"data(forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"data"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"}],"abstract":[{"type":"text","text":"Retrieves a "},{"type":"codeVoice","code":"Data"},{"type":"text","text":" value from the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/data(forKey:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/data(forkey:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychain/deleteall().json b/docs/data/documentation/simplekeychain/simplekeychain/deleteall().json new file mode 100644 index 0000000..44e681f --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychain/deleteall().json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"deleteAll"},{"kind":"text","text":"() "},{"kind":"keyword","text":"throws"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"codeListing","syntax":"swift","code":["try simpleKeychain.deleteAll()"]},{"style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"},{"type":"text","text":" when the SimpleKeychain operation fails."}]}],"type":"aside","name":"Throws"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychain\/deleteall()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/deleteAll()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Deletes all items from the Keychain for the service and access group values."}],"kind":"symbol","metadata":{"role":"symbol","title":"deleteAll()","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"deleteAll"},{"kind":"text","text":"() "},{"kind":"keyword","text":"throws"}],"symbolKind":"method","externalID":"s:14SimpleKeychainAAV9deleteAllyyKF","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/deleteAll()":{"role":"symbol","title":"deleteAll()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"deleteAll"},{"kind":"text","text":"() "},{"kind":"keyword","text":"throws"}],"abstract":[{"type":"text","text":"Deletes all items from the Keychain for the service and access group values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/deleteAll()","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/deleteall()"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychain/deleteitem(forkey:).json b/docs/data/documentation/simplekeychain/simplekeychain/deleteitem(forkey:).json new file mode 100644 index 0000000..edf2a7c --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychain/deleteitem(forkey:).json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"deleteItem"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":" "},{"kind":"internalParam","text":"key"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"parameters","parameters":[{"name":"key","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Key of the Keychain item to delete.."}]}]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"codeListing","syntax":"swift","code":["try simpleKeychain.deleteItem(forKey: \"your_key\")"]},{"style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"},{"type":"text","text":" when the SimpleKeychain operation fails."}]}],"type":"aside","name":"Throws"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychain\/deleteitem(forkey:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/deleteItem(forKey:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Deletes an item from the Keychain."}],"kind":"symbol","metadata":{"role":"symbol","title":"deleteItem(forKey:)","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"deleteItem"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"symbolKind":"method","externalID":"s:14SimpleKeychainAAV10deleteItem6forKeyySS_tKF","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/deleteItem(forKey:)":{"role":"symbol","title":"deleteItem(forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"deleteItem"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"abstract":[{"type":"text","text":"Deletes an item from the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/deleteItem(forKey:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/deleteitem(forkey:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychain/hasitem(forkey:).json b/docs/data/documentation/simplekeychain/simplekeychain/hasitem(forkey:).json new file mode 100644 index 0000000..ca66c3e --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychain/hasitem(forkey:).json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasItem"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":" "},{"kind":"internalParam","text":"key"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"content","content":[{"anchor":"return-value","level":2,"type":"heading","text":"Return Value"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Whether the item is stored in the Keychain or not."}]}]},{"kind":"parameters","parameters":[{"name":"key","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Key of the Keychain item to check."}]}]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"codeListing","syntax":"swift","code":["let isStored = try simpleKeychain.hasItem(forKey: \"your_key\")"]},{"style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"},{"type":"text","text":" when the SimpleKeychain operation fails."}]}],"type":"aside","name":"Throws"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychain\/hasitem(forkey:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/hasItem(forKey:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Checks if an item is stored in the Keychain."}],"kind":"symbol","metadata":{"role":"symbol","title":"hasItem(forKey:)","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasItem"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"method","externalID":"s:14SimpleKeychainAAV7hasItem6forKeySbSS_tKF","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/hasItem(forKey:)":{"role":"symbol","title":"hasItem(forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasItem"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Checks if an item is stored in the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/hasItem(forKey:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/hasitem(forkey:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychain/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:).json b/docs/data/documentation/simplekeychain/simplekeychain/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:).json new file mode 100644 index 0000000..1962aa1 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychain/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:).json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"service"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" = Bundle.main.bundleIdentifier!, "},{"kind":"externalParam","text":"accessGroup"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"? = nil, "},{"kind":"externalParam","text":"accessibility"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","preciseIdentifier":"s:14SimpleKeychain13AccessibilityO","text":"Accessibility"},{"kind":"text","text":" = .afterFirstUnlock, "},{"kind":"externalParam","text":"accessControlFlags"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SecAccessControlCreateFlags","preciseIdentifier":"c:@E@SecAccessControlCreateFlags"},{"kind":"text","text":"? = nil, "},{"kind":"externalParam","text":"context"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"LAContext","preciseIdentifier":"c:objc(cs)LAContext"},{"kind":"text","text":"? = nil, "},{"kind":"externalParam","text":"synchronizable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":" = false, "},{"kind":"externalParam","text":"attributes"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"] = [:])"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"content","content":[{"anchor":"return-value","level":2,"type":"heading","text":"Return Value"},{"type":"paragraph","inlineContent":[{"type":"text","text":"A "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain"},{"type":"text","text":" instance."}]}]},{"kind":"parameters","parameters":[{"name":"service","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Name of the service under which to save items. Defaults to the bundle identifier."}]}]},{"name":"accessGroup","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"access group for sharing Keychain items. Defaults to "},{"type":"codeVoice","code":"nil"},{"type":"text","text":"."}]}]},{"name":"accessibility","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":""},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility"},{"type":"text","text":" type the stored items will have. Defaults to "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/afterFirstUnlock"},{"type":"text","text":"."}]}]},{"name":"accessControlFlags","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Access control conditions for "},{"type":"codeVoice","code":"kSecAttrAccessControl"},{"type":"text","text":". Defaults to "},{"type":"codeVoice","code":"nil"},{"type":"text","text":"."}]}]},{"name":"context","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":""},{"type":"codeVoice","code":"LAContext"},{"type":"text","text":" used to access Keychain items. Defaults to "},{"type":"codeVoice","code":"nil"},{"type":"text","text":"."}]}]},{"name":"synchronizable","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Whether the items should be synchronized through iCloud. Defaults to "},{"type":"codeVoice","code":"false"},{"type":"text","text":"."}]}]},{"name":"attributes","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Additional attributes to include in every query. Defaults to an empty dictionary."}]}]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychain\/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/init(service:accessGroup:accessibility:accessControlFlags:context:synchronizable:attributes:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Initializes a "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain"},{"type":"text","text":" instance."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"service"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"externalParam","text":"accessGroup"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?, "},{"kind":"externalParam","text":"accessibility"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Accessibility","preciseIdentifier":"s:14SimpleKeychain13AccessibilityO"},{"kind":"text","text":", "},{"kind":"externalParam","text":"accessControlFlags"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SecAccessControlCreateFlags","preciseIdentifier":"c:@E@SecAccessControlCreateFlags"},{"kind":"text","text":"?, "},{"kind":"externalParam","text":"context"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"LAContext","preciseIdentifier":"c:objc(cs)LAContext"},{"kind":"text","text":"?, "},{"kind":"externalParam","text":"synchronizable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":", "},{"kind":"externalParam","text":"attributes"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"])"}],"title":"init(service:accessGroup:accessibility:accessControlFlags:context:synchronizable:attributes:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:14SimpleKeychainAAV7service11accessGroup13accessibility0D12ControlFlags7context14synchronizable10attributesABSS_SSSgAA13AccessibilityOSo09SecAccessg6CreateH0VSgSo9LAContextCSgSbSDySSypGtcfc","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain"]]},"references":{"https://developer.apple.com/documentation/security/ksecattraccessibleafterfirstunlock":{"title":"kSecAttrAccessibleAfterFirstUnlock","titleInlineContent":[{"type":"text","text":"kSecAttrAccessibleAfterFirstUnlock"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlock","url":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlock"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility":{"role":"symbol","title":"Accessibility","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Accessibility"}],"abstract":[{"type":"text","text":"Represents the accessibility types of Keychain items. It’s a mirror of "},{"type":"codeVoice","code":"kSecAttrAccessible"},{"type":"text","text":" values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Accessibility"}],"url":"\/documentation\/simplekeychain\/accessibility"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/init(service:accessGroup:accessibility:accessControlFlags:context:synchronizable:attributes:)":{"role":"symbol","title":"init(service:accessGroup:accessibility:accessControlFlags:context:synchronizable:attributes:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"service"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"externalParam","text":"accessGroup"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?, "},{"kind":"externalParam","text":"accessibility"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Accessibility","preciseIdentifier":"s:14SimpleKeychain13AccessibilityO"},{"kind":"text","text":", "},{"kind":"externalParam","text":"accessControlFlags"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SecAccessControlCreateFlags","preciseIdentifier":"c:@E@SecAccessControlCreateFlags"},{"kind":"text","text":"?, "},{"kind":"externalParam","text":"context"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"LAContext","preciseIdentifier":"c:objc(cs)LAContext"},{"kind":"text","text":"?, "},{"kind":"externalParam","text":"synchronizable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":", "},{"kind":"externalParam","text":"attributes"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"])"}],"abstract":[{"type":"text","text":"Initializes a "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain"},{"type":"text","text":" instance."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/init(service:accessGroup:accessibility:accessControlFlags:context:synchronizable:attributes:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/Accessibility/afterFirstUnlock":{"role":"symbol","title":"Accessibility.afterFirstUnlock","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"afterFirstUnlock"}],"abstract":[{"type":"text","text":"The data in the Keychain item cannot be accessed after a restart until the device has been unlocked once by the user."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/ksecattraccessibleafterfirstunlock"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/Accessibility\/afterFirstUnlock","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/accessibility\/afterfirstunlock"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychain/keys().json b/docs/data/documentation/simplekeychain/simplekeychain/keys().json new file mode 100644 index 0000000..3908a75 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychain/keys().json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"keys"},{"kind":"text","text":"() "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"]"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"content","content":[{"anchor":"return-value","level":2,"type":"heading","text":"Return Value"},{"type":"paragraph","inlineContent":[{"type":"text","text":"A "},{"type":"codeVoice","code":"String"},{"type":"text","text":" array containing the keys."}]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"codeListing","syntax":"swift","code":["let keys = try simpleKeychain.keys()"]},{"style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"},{"type":"text","text":" when the SimpleKeychain operation fails."}]}],"type":"aside","name":"Throws"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychain\/keys()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/keys()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Retrieves the keys of all the items stored in the Keychain for the service and access group values."}],"kind":"symbol","metadata":{"role":"symbol","title":"keys()","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"keys"},{"kind":"text","text":"() "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"]"}],"symbolKind":"method","externalID":"s:14SimpleKeychainAAV4keysSaySSGyKF","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/keys()":{"role":"symbol","title":"keys()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"keys"},{"kind":"text","text":"() "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"]"}],"abstract":[{"type":"text","text":"Retrieves the keys of all the items stored in the Keychain for the service and access group values."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/keys()","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/keys()"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychain/set(_:forkey:)-618u7.json b/docs/data/documentation/simplekeychain/simplekeychain/set(_:forkey:)-618u7.json new file mode 100644 index 0000000..1510530 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychain/set(_:forkey:)-618u7.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"set"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"},{"kind":"text","text":", "},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":" "},{"kind":"internalParam","text":"key"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"parameters","parameters":[{"name":"data","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Value to save in the Keychain."}]}]},{"name":"key","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Key for the Keychain item."}]}]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"codeListing","syntax":"swift","code":["try simpleKeychain.set(data, forKey: \"your_key\")"]},{"style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"},{"type":"text","text":" when the SimpleKeychain operation fails."}]}],"type":"aside","name":"Throws"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychain\/set(_:forkey:)-618u7"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/set(_:forKey:)-618u7","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Saves a "},{"type":"codeVoice","code":"Data"},{"type":"text","text":" value with the type "},{"type":"codeVoice","code":"kSecClassGenericPassword"},{"type":"text","text":" in the Keychain."}],"kind":"symbol","metadata":{"role":"symbol","title":"set(_:forKey:)","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"set"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"},{"kind":"text","text":", "},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"symbolKind":"method","externalID":"s:14SimpleKeychainAAV3set_6forKeyy10Foundation4DataV_SStKF","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/set(_:forKey:)-618u7":{"role":"symbol","title":"set(_:forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"set"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"},{"kind":"text","text":", "},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"abstract":[{"type":"text","text":"Saves a "},{"type":"codeVoice","code":"Data"},{"type":"text","text":" value with the type "},{"type":"codeVoice","code":"kSecClassGenericPassword"},{"type":"text","text":" in the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/set(_:forKey:)-618u7","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/set(_:forkey:)-618u7"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychain/set(_:forkey:)-n98i.json b/docs/data/documentation/simplekeychain/simplekeychain/set(_:forkey:)-n98i.json new file mode 100644 index 0000000..5628321 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychain/set(_:forkey:)-n98i.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"set"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"string"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":" "},{"kind":"internalParam","text":"key"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"parameters","parameters":[{"name":"string","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Value to save in the Keychain."}]}]},{"name":"key","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Key for the Keychain item."}]}]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"codeListing","syntax":"swift","code":["try simpleKeychain.set(\"some string\", forKey: \"your_key\")"]},{"style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"},{"type":"text","text":" when the SimpleKeychain operation fails."}]}],"type":"aside","name":"Throws"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychain\/set(_:forkey:)-n98i"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/set(_:forKey:)-n98i","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Saves a "},{"type":"codeVoice","code":"String"},{"type":"text","text":" value with the type "},{"type":"codeVoice","code":"kSecClassGenericPassword"},{"type":"text","text":" in the Keychain."}],"kind":"symbol","metadata":{"role":"symbol","title":"set(_:forKey:)","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"set"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"symbolKind":"method","externalID":"s:14SimpleKeychainAAV3set_6forKeyySS_SStKF","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/set(_:forKey:)-n98i":{"role":"symbol","title":"set(_:forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"set"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"}],"abstract":[{"type":"text","text":"Saves a "},{"type":"codeVoice","code":"String"},{"type":"text","text":" value with the type "},{"type":"codeVoice","code":"kSecClassGenericPassword"},{"type":"text","text":" in the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/set(_:forKey:)-n98i","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/set(_:forkey:)-n98i"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychain/string(forkey:).json b/docs/data/documentation/simplekeychain/simplekeychain/string(forkey:).json new file mode 100644 index 0000000..5d640cf --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychain/string(forkey:).json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"string"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":" "},{"kind":"internalParam","text":"key"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"content","content":[{"anchor":"return-value","level":2,"type":"heading","text":"Return Value"},{"type":"paragraph","inlineContent":[{"type":"text","text":"The "},{"type":"codeVoice","code":"String"},{"type":"text","text":" value."}]}]},{"kind":"parameters","parameters":[{"name":"key","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Key of the Keychain item to retrieve."}]}]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"codeListing","syntax":"swift","code":["let value = try simpleKeychain.string(forKey: \"your_key\")"]},{"style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"},{"type":"text","text":" when the SimpleKeychain operation fails."}]}],"type":"aside","name":"Throws"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychain\/string(forkey:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/string(forKey:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Retrieves a "},{"type":"codeVoice","code":"String"},{"type":"text","text":" value from the Keychain."}],"kind":"symbol","metadata":{"role":"symbol","title":"string(forKey:)","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"string"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"symbolKind":"method","externalID":"s:14SimpleKeychainAAV6string6forKeyS2S_tKF","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain/string(forKey:)":{"role":"symbol","title":"string(forKey:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"string"},{"kind":"text","text":"("},{"kind":"externalParam","text":"forKey"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[{"type":"text","text":"Retrieves a "},{"type":"codeVoice","code":"String"},{"type":"text","text":" value from the Keychain."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain\/string(forKey:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychain\/string(forkey:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychain":{"role":"symbol","title":"SimpleKeychain","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychain"}],"abstract":[{"type":"text","text":"A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS."},{"type":"text","text":" "},{"type":"text","text":"Supports sharing credentials with an "},{"type":"strong","inlineContent":[{"type":"text","text":"access group"}]},{"type":"text","text":" or through "},{"type":"strong","inlineContent":[{"type":"text","text":"iCloud"}]},{"type":"text","text":", and integrating "},{"type":"strong","inlineContent":[{"type":"text","text":"Touch ID \/ Face ID"}]},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychain","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychain"}],"url":"\/documentation\/simplekeychain\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror.json b/docs/data/documentation/simplekeychain/simplekeychainerror.json new file mode 100644 index 0000000..4bc408f --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/com.auth0.SimpleKeychain\/10Foundation14LocalizedErrorP","doc:\/\/com.auth0.SimpleKeychain\/s28CustomDebugStringConvertibleP","doc:\/\/com.auth0.SimpleKeychain\/SQ","doc:\/\/com.auth0.SimpleKeychain\/s5ErrorP","doc:\/\/com.auth0.SimpleKeychain\/s8SendableP"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"title":"SimpleKeychainError","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:14SimpleKeychain0aB5ErrorV","modules":[{"name":"SimpleKeychain"}],"navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain"]]},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/~=(_:_:)-41lv0","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/~=(_:_:)-7uptb"]},{"title":"Instance Properties","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/debugDescription","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/errorDescription-31jbz","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/localizedDescription-6p7yv","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/status"]},{"title":"Type Properties","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/authFailed","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/decodeFailed","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/duplicateItem","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/interactionNotAllowed","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/invalidParameters","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/itemNotAvailable","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/itemNotFound","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/operationNotImplemented","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/other","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/unknown","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/userCanceled"]},{"title":"Default Implementations","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Equatable-Implementations","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Error-Implementations","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations"],"generated":true}],"references":{"https://developer.apple.com/documentation/security/errsecparam":{"title":"errSecParam","titleInlineContent":[{"type":"text","text":"errSecParam"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecparam","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecparam"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/localizedDescription-6p7yv":{"role":"symbol","title":"localizedDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"localizedDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[{"type":"text","text":"Description of the error."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/localizedDescription-6p7yv","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/localizeddescription-6p7yv"},"https://developer.apple.com/documentation/security/errsecauthfailed":{"title":"errSecAuthFailed","titleInlineContent":[{"type":"text","text":"errSecAuthFailed"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecauthfailed","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecauthfailed"},"https://developer.apple.com/documentation/security/errsecduplicateitem":{"title":"errSecDuplicateItem","titleInlineContent":[{"type":"text","text":"errSecDuplicateItem"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecduplicateitem","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecduplicateitem"},"doc://com.auth0.SimpleKeychain/s28CustomDebugStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomDebugStringConvertible","identifier":"doc:\/\/com.auth0.SimpleKeychain\/s28CustomDebugStringConvertibleP"},"https://developer.apple.com/documentation/security/errsecitemnotfound":{"title":"errSecItemNotFound","titleInlineContent":[{"type":"text","text":"errSecItemNotFound"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecitemnotfound","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecitemnotfound"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/itemNotFound":{"role":"symbol","title":"itemNotFound","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"itemNotFound"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"The item cannot be found."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecitemnotfound"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/itemNotFound","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/itemnotfound"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/unknown":{"role":"symbol","title":"unknown","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"unknown"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"Unknown error. This is not a Keychain error but a SimpleKeychain failure. For example, being unable to cast the retrieved item."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/unknown","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/unknown"},"https://developer.apple.com/documentation/security/errsecinteractionnotallowed":{"title":"errSecInteractionNotAllowed","titleInlineContent":[{"type":"text","text":"errSecInteractionNotAllowed"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecinteractionnotallowed","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecinteractionnotallowed"},"https://developer.apple.com/documentation/security/errsecnotavailable":{"title":"errSecNotAvailable","titleInlineContent":[{"type":"text","text":"errSecNotAvailable"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecnotavailable","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecnotavailable"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/decodeFailed":{"role":"symbol","title":"decodeFailed","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"decodeFailed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"Unable to decode the provided data."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecdecode"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/decodeFailed","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/decodefailed"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/other":{"role":"symbol","title":"other","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"other"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"Other Keychain error."},{"type":"text","text":" "},{"type":"text","text":"The "},{"type":"codeVoice","code":"OSStatus"},{"type":"text","text":" of the Keychain operation can be accessed via the "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/status"},{"type":"text","text":" property."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/other","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/other"},"doc://com.auth0.SimpleKeychain/s8SendableP":{"type":"unresolvable","title":"Swift.Sendable","identifier":"doc:\/\/com.auth0.SimpleKeychain\/s8SendableP"},"doc://com.auth0.SimpleKeychain/s5ErrorP":{"type":"unresolvable","title":"Swift.Error","identifier":"doc:\/\/com.auth0.SimpleKeychain\/s5ErrorP"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/authFailed":{"role":"symbol","title":"authFailed","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"authFailed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"Authorization and\/or authentication failed."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecauthfailed"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/authFailed","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/authfailed"},"doc://com.auth0.SimpleKeychain/10Foundation14LocalizedErrorP":{"type":"unresolvable","title":"Foundation.LocalizedError","identifier":"doc:\/\/com.auth0.SimpleKeychain\/10Foundation14LocalizedErrorP"},"https://developer.apple.com/documentation/security/errsecdecode":{"title":"errSecDecode","titleInlineContent":[{"type":"text","text":"errSecDecode"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecdecode","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecdecode"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/userCanceled":{"role":"symbol","title":"userCanceled","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"userCanceled"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"User canceled the operation."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecusercanceled"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/userCanceled","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/usercanceled"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/interactionNotAllowed":{"role":"symbol","title":"interactionNotAllowed","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"interactionNotAllowed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"Interaction with the Security Server is not allowed."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecinteractionnotallowed"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/interactionNotAllowed","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/interactionnotallowed"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/equatable-implementations"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/status":{"role":"symbol","title":"status","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"status"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"OSStatus","preciseIdentifier":"c:@T@OSStatus"}],"abstract":[{"type":"text","text":"The "},{"type":"codeVoice","code":"OSStatus"},{"type":"text","text":" of the Keychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/status","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/status"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/invalidParameters":{"role":"symbol","title":"invalidParameters","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"invalidParameters"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"One or more parameters passed to the function are not valid."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecparam"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/invalidParameters","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/invalidparameters"},"doc://com.auth0.SimpleKeychain/SQ":{"type":"unresolvable","title":"Swift.Equatable","identifier":"doc:\/\/com.auth0.SimpleKeychain\/SQ"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/itemNotAvailable":{"role":"symbol","title":"itemNotAvailable","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"itemNotAvailable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"No trust results are available."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecnotavailable"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/itemNotAvailable","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/itemnotavailable"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/debugDescription":{"role":"symbol","title":"debugDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[{"type":"text","text":"Description of the error."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/debugDescription","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/debugdescription"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/duplicateItem":{"role":"symbol","title":"duplicateItem","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"duplicateItem"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"The item already exists."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecduplicateitem"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/duplicateItem","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/duplicateitem"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/~=(_:_:)-7uptb":{"role":"symbol","title":"~=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"~="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Error","preciseIdentifier":"s:s5ErrorP"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Matches "},{"type":"codeVoice","code":"Error"},{"type":"text","text":" values in a switch statement."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/~=(_:_:)-7uptb","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/~=(_:_:)-7uptb"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/operationNotImplemented":{"role":"symbol","title":"operationNotImplemented","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"operationNotImplemented"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"A function or operation is not implemented."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecunimplemented"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/operationNotImplemented","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/operationnotimplemented"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/errorDescription-31jbz":{"role":"symbol","title":"errorDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"errorDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"abstract":[{"type":"text","text":"Description of the error."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/errorDescription-31jbz","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/errordescription-31jbz"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/Error-Implementations":{"role":"collectionGroup","title":"Error Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Error-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/error-implementations"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/LocalizedError-Implementations":{"role":"collectionGroup","title":"LocalizedError Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/localizederror-implementations"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/~=(_:_:)-41lv0":{"role":"symbol","title":"~=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"~="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Matches "},{"type":"codeVoice","code":"SimpleKeychainError"},{"type":"text","text":" values in a switch statement."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/~=(_:_:)-41lv0","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/~=(_:_:)-41lv0"},"https://developer.apple.com/documentation/security/errsecusercanceled":{"title":"errSecUserCanceled","titleInlineContent":[{"type":"text","text":"errSecUserCanceled"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecusercanceled","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecusercanceled"},"https://developer.apple.com/documentation/security/errsecunimplemented":{"title":"errSecUnimplemented","titleInlineContent":[{"type":"text","text":"errSecUnimplemented"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecunimplemented","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecunimplemented"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/!=(_:_:).json b/docs/data/documentation/simplekeychain/simplekeychainerror/!=(_:_:).json new file mode 100644 index 0000000..d93e489 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/!=(_:_:).json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:14SimpleKeychain0aB5ErrorV","extendedModule":"Swift","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Equatable-Implementations"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/!=(_:_:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/equatable-implementations"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/==(_:_:).json b/docs/data/documentation/simplekeychain/simplekeychainerror/==(_:_:).json new file mode 100644 index 0000000..079dd80 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/==(_:_:).json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Conformance to "},{"type":"codeVoice","code":"Equatable"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:14SimpleKeychain0aB5ErrorV2eeoiySbAC_ACtFZ","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Equatable-Implementations"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/equatable-implementations"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Conformance to "},{"type":"codeVoice","code":"Equatable"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/==(_:_:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/authfailed.json b/docs/data/documentation/simplekeychain/simplekeychainerror/authfailed.json new file mode 100644 index 0000000..3c8663c --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/authfailed.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"authFailed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/authfailed"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/authFailed","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Authorization and\/or authentication failed."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecauthfailed"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"authFailed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"authFailed","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV10authFailedACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"https://developer.apple.com/documentation/security/errsecauthfailed":{"title":"errSecAuthFailed","titleInlineContent":[{"type":"text","text":"errSecAuthFailed"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecauthfailed","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecauthfailed"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/authFailed":{"role":"symbol","title":"authFailed","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"authFailed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"Authorization and\/or authentication failed."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecauthfailed"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/authFailed","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/authfailed"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/debugdescription.json b/docs/data/documentation/simplekeychain/simplekeychainerror/debugdescription.json new file mode 100644 index 0000000..146cd05 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/debugdescription.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"aside","style":"important","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"You should avoid displaying the error description to the user, it’s meant for "},{"type":"strong","inlineContent":[{"type":"text","text":"debugging"}]},{"type":"text","text":" only."}]}]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/debugdescription"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/debugDescription","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Description of the error."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"debugDescription","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV16debugDescriptionSSvp","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/debugDescription":{"role":"symbol","title":"debugDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[{"type":"text","text":"Description of the error."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/debugDescription","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/debugdescription"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/decodefailed.json b/docs/data/documentation/simplekeychain/simplekeychainerror/decodefailed.json new file mode 100644 index 0000000..74b0d32 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/decodefailed.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"decodeFailed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/decodefailed"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/decodeFailed","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Unable to decode the provided data."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecdecode"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"decodeFailed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"decodeFailed","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV12decodeFailedACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/decodeFailed":{"role":"symbol","title":"decodeFailed","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"decodeFailed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"Unable to decode the provided data."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecdecode"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/decodeFailed","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/decodefailed"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"https://developer.apple.com/documentation/security/errsecdecode":{"title":"errSecDecode","titleInlineContent":[{"type":"text","text":"errSecDecode"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecdecode","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecdecode"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/duplicateitem.json b/docs/data/documentation/simplekeychain/simplekeychainerror/duplicateitem.json new file mode 100644 index 0000000..177f178 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/duplicateitem.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"duplicateItem"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/duplicateitem"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/duplicateItem","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The item already exists."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecduplicateitem"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"duplicateItem"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"duplicateItem","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV13duplicateItemACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/duplicateItem":{"role":"symbol","title":"duplicateItem","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"duplicateItem"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"The item already exists."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecduplicateitem"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/duplicateItem","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/duplicateitem"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"https://developer.apple.com/documentation/security/errsecduplicateitem":{"title":"errSecDuplicateItem","titleInlineContent":[{"type":"text","text":"errSecDuplicateItem"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecduplicateitem","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecduplicateitem"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/equatable-implementations.json b/docs/data/documentation/simplekeychain/simplekeychainerror/equatable-implementations.json new file mode 100644 index 0000000..d04cfd4 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/equatable-implementations.json @@ -0,0 +1 @@ +{"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Equatable-Implementations","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"No overview available."}],"kind":"article","metadata":{"modules":[{"name":"SimpleKeychain"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/!=(_:_:)","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/==(_:_:)"],"generated":true}],"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/!=(_:_:)"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Conformance to "},{"type":"codeVoice","code":"Equatable"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/==(_:_:)"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/error-implementations.json b/docs/data/documentation/simplekeychain/simplekeychainerror/error-implementations.json new file mode 100644 index 0000000..96967c6 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/error-implementations.json @@ -0,0 +1 @@ +{"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/error-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Error-Implementations","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"No overview available."}],"kind":"article","metadata":{"modules":[{"name":"SimpleKeychain"}],"role":"collectionGroup","title":"Error Implementations"},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/localizedDescription-2xh78"],"generated":true}],"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/localizedDescription-2xh78":{"role":"symbol","title":"localizedDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"localizedDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/localizedDescription-2xh78","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/localizeddescription-2xh78"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/errordescription-23ktd.json b/docs/data/documentation/simplekeychain/simplekeychainerror/errordescription-23ktd.json new file mode 100644 index 0000000..2e098bc --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/errordescription-23ktd.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"errorDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"? { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/errordescription-23ktd"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/errorDescription-23ktd","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"LocalizedError.errorDescription"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"errorDescription","roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"errorDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"symbolKind":"property","externalID":"s:10Foundation14LocalizedErrorPAAE16errorDescriptionSSSgvp::SYNTHESIZED::s:14SimpleKeychain0aB5ErrorV","extendedModule":"Foundation","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/LocalizedError-Implementations":{"role":"collectionGroup","title":"LocalizedError Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/localizederror-implementations"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/errorDescription-23ktd":{"role":"symbol","title":"errorDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"errorDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/errorDescription-23ktd","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/errordescription-23ktd"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/errordescription-31jbz.json b/docs/data/documentation/simplekeychain/simplekeychainerror/errordescription-31jbz.json new file mode 100644 index 0000000..c865d86 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/errordescription-31jbz.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"errorDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"? { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"aside","style":"important","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"You should avoid displaying the error description to the user, it’s meant for "},{"type":"strong","inlineContent":[{"type":"text","text":"debugging"}]},{"type":"text","text":" only."}]}]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/errordescription-31jbz"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/errorDescription-31jbz","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Description of the error."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"errorDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"title":"errorDescription","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV16errorDescriptionSSSgvp","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/errorDescription-31jbz":{"role":"symbol","title":"errorDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"errorDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"abstract":[{"type":"text","text":"Description of the error."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/errorDescription-31jbz","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/errordescription-31jbz"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/failurereason.json b/docs/data/documentation/simplekeychain/simplekeychainerror/failurereason.json new file mode 100644 index 0000000..0400e67 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/failurereason.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"failureReason"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"? { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/failurereason"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/failureReason","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"LocalizedError.failureReason"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"failureReason","roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"failureReason"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"symbolKind":"property","externalID":"s:10Foundation14LocalizedErrorPAAE13failureReasonSSSgvp::SYNTHESIZED::s:14SimpleKeychain0aB5ErrorV","extendedModule":"Foundation","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/failureReason":{"role":"symbol","title":"failureReason","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"failureReason"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/failureReason","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/failurereason"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/LocalizedError-Implementations":{"role":"collectionGroup","title":"LocalizedError Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/localizederror-implementations"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/helpanchor.json b/docs/data/documentation/simplekeychain/simplekeychainerror/helpanchor.json new file mode 100644 index 0000000..38787ca --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/helpanchor.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"helpAnchor"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"? { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/helpanchor"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/helpAnchor","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"LocalizedError.helpAnchor"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"helpAnchor","roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"helpAnchor"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"symbolKind":"property","externalID":"s:10Foundation14LocalizedErrorPAAE10helpAnchorSSSgvp::SYNTHESIZED::s:14SimpleKeychain0aB5ErrorV","extendedModule":"Foundation","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/LocalizedError-Implementations":{"role":"collectionGroup","title":"LocalizedError Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/localizederror-implementations"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/helpAnchor":{"role":"symbol","title":"helpAnchor","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"helpAnchor"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/helpAnchor","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/helpanchor"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/interactionnotallowed.json b/docs/data/documentation/simplekeychain/simplekeychainerror/interactionnotallowed.json new file mode 100644 index 0000000..086b1a6 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/interactionnotallowed.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"interactionNotAllowed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/interactionnotallowed"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/interactionNotAllowed","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Interaction with the Security Server is not allowed."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecinteractionnotallowed"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"interactionNotAllowed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"interactionNotAllowed","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV21interactionNotAllowedACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/interactionNotAllowed":{"role":"symbol","title":"interactionNotAllowed","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"interactionNotAllowed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"Interaction with the Security Server is not allowed."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecinteractionnotallowed"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/interactionNotAllowed","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/interactionnotallowed"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"https://developer.apple.com/documentation/security/errsecinteractionnotallowed":{"title":"errSecInteractionNotAllowed","titleInlineContent":[{"type":"text","text":"errSecInteractionNotAllowed"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecinteractionnotallowed","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecinteractionnotallowed"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/invalidparameters.json b/docs/data/documentation/simplekeychain/simplekeychainerror/invalidparameters.json new file mode 100644 index 0000000..f71a3b8 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/invalidparameters.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"invalidParameters"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/invalidparameters"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/invalidParameters","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"One or more parameters passed to the function are not valid."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecparam"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"invalidParameters"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"invalidParameters","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV17invalidParametersACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/invalidParameters":{"role":"symbol","title":"invalidParameters","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"invalidParameters"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"One or more parameters passed to the function are not valid."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecparam"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/invalidParameters","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/invalidparameters"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"https://developer.apple.com/documentation/security/errsecparam":{"title":"errSecParam","titleInlineContent":[{"type":"text","text":"errSecParam"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecparam","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecparam"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/itemnotavailable.json b/docs/data/documentation/simplekeychain/simplekeychainerror/itemnotavailable.json new file mode 100644 index 0000000..463152c --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/itemnotavailable.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"itemNotAvailable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/itemnotavailable"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/itemNotAvailable","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"No trust results are available."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecnotavailable"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"itemNotAvailable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"itemNotAvailable","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV16itemNotAvailableACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"https://developer.apple.com/documentation/security/errsecnotavailable":{"title":"errSecNotAvailable","titleInlineContent":[{"type":"text","text":"errSecNotAvailable"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecnotavailable","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecnotavailable"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/itemNotAvailable":{"role":"symbol","title":"itemNotAvailable","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"itemNotAvailable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"No trust results are available."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecnotavailable"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/itemNotAvailable","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/itemnotavailable"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/itemnotfound.json b/docs/data/documentation/simplekeychain/simplekeychainerror/itemnotfound.json new file mode 100644 index 0000000..54c34f4 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/itemnotfound.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"itemNotFound"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/itemnotfound"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/itemNotFound","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The item cannot be found."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecitemnotfound"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"itemNotFound"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"itemNotFound","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV12itemNotFoundACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/itemNotFound":{"role":"symbol","title":"itemNotFound","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"itemNotFound"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"The item cannot be found."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecitemnotfound"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/itemNotFound","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/itemnotfound"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"https://developer.apple.com/documentation/security/errsecitemnotfound":{"title":"errSecItemNotFound","titleInlineContent":[{"type":"text","text":"errSecItemNotFound"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecitemnotfound","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecitemnotfound"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/localizeddescription-2xh78.json b/docs/data/documentation/simplekeychain/simplekeychainerror/localizeddescription-2xh78.json new file mode 100644 index 0000000..9c4dc2d --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/localizeddescription-2xh78.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"localizedDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/localizeddescription-2xh78"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/localizedDescription-2xh78","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Error.localizedDescription"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"localizedDescription","roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"localizedDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"symbolKind":"property","externalID":"s:s5ErrorP10FoundationE20localizedDescriptionSSvp::SYNTHESIZED::s:14SimpleKeychain0aB5ErrorV","extendedModule":"Swift","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Error-Implementations"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/localizedDescription-2xh78":{"role":"symbol","title":"localizedDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"localizedDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/localizedDescription-2xh78","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/localizeddescription-2xh78"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/Error-Implementations":{"role":"collectionGroup","title":"Error Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/Error-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/error-implementations"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/localizeddescription-6p7yv.json b/docs/data/documentation/simplekeychain/simplekeychainerror/localizeddescription-6p7yv.json new file mode 100644 index 0000000..e3d29fb --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/localizeddescription-6p7yv.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"localizedDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"aside","style":"important","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"You should avoid displaying the error description to the user, it’s meant for "},{"type":"strong","inlineContent":[{"type":"text","text":"debugging"}]},{"type":"text","text":" only."}]}]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/localizeddescription-6p7yv"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/localizedDescription-6p7yv","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Description of the error."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"localizedDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"localizedDescription","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV20localizedDescriptionSSvp","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/localizedDescription-6p7yv":{"role":"symbol","title":"localizedDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"localizedDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[{"type":"text","text":"Description of the error."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/localizedDescription-6p7yv","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/localizeddescription-6p7yv"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/localizederror-implementations.json b/docs/data/documentation/simplekeychain/simplekeychainerror/localizederror-implementations.json new file mode 100644 index 0000000..c25976c --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/localizederror-implementations.json @@ -0,0 +1 @@ +{"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/localizederror-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"No overview available."}],"kind":"article","metadata":{"modules":[{"name":"SimpleKeychain"}],"role":"collectionGroup","title":"LocalizedError Implementations"},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/errorDescription-23ktd","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/failureReason","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/helpAnchor","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/recoverySuggestion"],"generated":true}],"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/helpAnchor":{"role":"symbol","title":"helpAnchor","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"helpAnchor"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/helpAnchor","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/helpanchor"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/errorDescription-23ktd":{"role":"symbol","title":"errorDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"errorDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/errorDescription-23ktd","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/errordescription-23ktd"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/failureReason":{"role":"symbol","title":"failureReason","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"failureReason"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/failureReason","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/failurereason"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/recoverySuggestion":{"role":"symbol","title":"recoverySuggestion","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"recoverySuggestion"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/recoverySuggestion","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/recoverysuggestion"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/operationnotimplemented.json b/docs/data/documentation/simplekeychain/simplekeychainerror/operationnotimplemented.json new file mode 100644 index 0000000..c41a65d --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/operationnotimplemented.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"operationNotImplemented"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/operationnotimplemented"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/operationNotImplemented","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"A function or operation is not implemented."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecunimplemented"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"operationNotImplemented"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"operationNotImplemented","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV23operationNotImplementedACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"https://developer.apple.com/documentation/security/errsecunimplemented":{"title":"errSecUnimplemented","titleInlineContent":[{"type":"text","text":"errSecUnimplemented"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecunimplemented","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecunimplemented"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/operationNotImplemented":{"role":"symbol","title":"operationNotImplemented","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"operationNotImplemented"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"A function or operation is not implemented."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecunimplemented"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/operationNotImplemented","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/operationnotimplemented"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/other.json b/docs/data/documentation/simplekeychain/simplekeychainerror/other.json new file mode 100644 index 0000000..5c7c905 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/other.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"other"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/other"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/other","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Other Keychain error."},{"type":"text","text":" "},{"type":"text","text":"The "},{"type":"codeVoice","code":"OSStatus"},{"type":"text","text":" of the Keychain operation can be accessed via the "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/status"},{"type":"text","text":" property."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"other"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"other","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV5otherACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/other":{"role":"symbol","title":"other","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"other"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"Other Keychain error."},{"type":"text","text":" "},{"type":"text","text":"The "},{"type":"codeVoice","code":"OSStatus"},{"type":"text","text":" of the Keychain operation can be accessed via the "},{"type":"reference","isActive":true,"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/status"},{"type":"text","text":" property."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/other","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/other"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/status":{"role":"symbol","title":"status","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"status"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"OSStatus","preciseIdentifier":"c:@T@OSStatus"}],"abstract":[{"type":"text","text":"The "},{"type":"codeVoice","code":"OSStatus"},{"type":"text","text":" of the Keychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/status","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/status"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/recoverysuggestion.json b/docs/data/documentation/simplekeychain/simplekeychainerror/recoverysuggestion.json new file mode 100644 index 0000000..0bd7998 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/recoverysuggestion.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"recoverySuggestion"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"? { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/recoverysuggestion"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/recoverySuggestion","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"LocalizedError.recoverySuggestion"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"recoverySuggestion","roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"recoverySuggestion"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"symbolKind":"property","externalID":"s:10Foundation14LocalizedErrorPAAE18recoverySuggestionSSSgvp::SYNTHESIZED::s:14SimpleKeychain0aB5ErrorV","extendedModule":"Foundation","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/LocalizedError-Implementations":{"role":"collectionGroup","title":"LocalizedError Implementations","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/LocalizedError-Implementations","kind":"article","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/localizederror-implementations"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/recoverySuggestion":{"role":"symbol","title":"recoverySuggestion","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"recoverySuggestion"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/recoverySuggestion","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/recoverysuggestion"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/status.json b/docs/data/documentation/simplekeychain/simplekeychainerror/status.json new file mode 100644 index 0000000..856e665 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/status.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"status"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"OSStatus","preciseIdentifier":"c:@T@OSStatus"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/status"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/status","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The "},{"type":"codeVoice","code":"OSStatus"},{"type":"text","text":" of the Keychain operation."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"status"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"OSStatus","preciseIdentifier":"c:@T@OSStatus"}],"title":"status","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV6statuss5Int32Vvp","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/status":{"role":"symbol","title":"status","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"status"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"OSStatus","preciseIdentifier":"c:@T@OSStatus"}],"abstract":[{"type":"text","text":"The "},{"type":"codeVoice","code":"OSStatus"},{"type":"text","text":" of the Keychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/status","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/status"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/unknown.json b/docs/data/documentation/simplekeychain/simplekeychainerror/unknown.json new file mode 100644 index 0000000..428dc65 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/unknown.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"unknown"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/unknown"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/unknown","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Unknown error. This is not a Keychain error but a SimpleKeychain failure. For example, being unable to cast the retrieved item."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"unknown"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"unknown","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV7unknownACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/unknown":{"role":"symbol","title":"unknown","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"unknown"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"Unknown error. This is not a Keychain error but a SimpleKeychain failure. For example, being unable to cast the retrieved item."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/unknown","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/unknown"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/usercanceled.json b/docs/data/documentation/simplekeychain/simplekeychainerror/usercanceled.json new file mode 100644 index 0000000..f3af275 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/usercanceled.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"userCanceled"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/usercanceled"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/userCanceled","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"User canceled the operation."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecusercanceled"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"userCanceled"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"title":"userCanceled","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:14SimpleKeychain0aB5ErrorV12userCanceledACvpZ","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/userCanceled":{"role":"symbol","title":"userCanceled","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"userCanceled"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"}],"abstract":[{"type":"text","text":"User canceled the operation."},{"type":"text","text":" "},{"type":"text","text":"See "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecusercanceled"},{"type":"text","text":"."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/userCanceled","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/usercanceled"},"https://developer.apple.com/documentation/security/errsecusercanceled":{"title":"errSecUserCanceled","titleInlineContent":[{"type":"text","text":"errSecUserCanceled"}],"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/security\/errsecusercanceled","url":"https:\/\/developer.apple.com\/documentation\/security\/errsecusercanceled"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-41lv0.json b/docs/data/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-41lv0.json new file mode 100644 index 0000000..81ae835 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-41lv0.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"~="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/~=(_:_:)-41lv0"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/~=(_:_:)-41lv0","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Matches "},{"type":"codeVoice","code":"SimpleKeychainError"},{"type":"text","text":" values in a switch statement."}],"kind":"symbol","metadata":{"role":"symbol","title":"~=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"~="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:14SimpleKeychain0aB5ErrorV2teoiySbAC_ACtFZ","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/~=(_:_:)-41lv0":{"role":"symbol","title":"~=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"~="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Matches "},{"type":"codeVoice","code":"SimpleKeychainError"},{"type":"text","text":" values in a switch statement."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/~=(_:_:)-41lv0","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/~=(_:_:)-41lv0"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"}}} \ No newline at end of file diff --git a/docs/data/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-7uptb.json b/docs/data/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-7uptb.json new file mode 100644 index 0000000..2b796b4 --- /dev/null +++ b/docs/data/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-7uptb.json @@ -0,0 +1 @@ +{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"~="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV","text":"SimpleKeychainError"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Error","preciseIdentifier":"s:s5ErrorP"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["iOS"]}]}],"schemaVersion":{"major":0,"minor":2,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/simplekeychain\/simplekeychainerror\/~=(_:_:)-7uptb"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/~=(_:_:)-7uptb","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Matches "},{"type":"codeVoice","code":"Error"},{"type":"text","text":" values in a switch statement."}],"kind":"symbol","metadata":{"role":"symbol","title":"~=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"~="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Error","preciseIdentifier":"s:s5ErrorP"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:14SimpleKeychain0aB5ErrorV2teoiySbAC_s0C0_ptFZ","extendedModule":"SimpleKeychain","modules":[{"name":"SimpleKeychain"}]},"hierarchy":{"paths":[["doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError"]]},"references":{"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain":{"role":"collection","title":"SimpleKeychain","abstract":[],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError/~=(_:_:)-7uptb":{"role":"symbol","title":"~=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"~="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"SimpleKeychainError","preciseIdentifier":"s:14SimpleKeychain0aB5ErrorV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Error","preciseIdentifier":"s:s5ErrorP"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Matches "},{"type":"codeVoice","code":"Error"},{"type":"text","text":" values in a switch statement."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError\/~=(_:_:)-7uptb","kind":"symbol","type":"topic","url":"\/documentation\/simplekeychain\/simplekeychainerror\/~=(_:_:)-7uptb"},"doc://com.auth0.SimpleKeychain/documentation/SimpleKeychain/SimpleKeychainError":{"role":"symbol","title":"SimpleKeychainError","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SimpleKeychainError"}],"abstract":[{"type":"text","text":"Represents an error during a SimpleKeychain operation."}],"identifier":"doc:\/\/com.auth0.SimpleKeychain\/documentation\/SimpleKeychain\/SimpleKeychainError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SimpleKeychainError"}],"url":"\/documentation\/simplekeychain\/simplekeychainerror"}}} \ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/!=(_:_:)/index.html b/docs/documentation/simplekeychain/accessibility/!=(_:_:)/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/!=(_:_:)/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/afterfirstunlock/index.html b/docs/documentation/simplekeychain/accessibility/afterfirstunlock/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/afterfirstunlock/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/afterfirstunlockthisdeviceonly/index.html b/docs/documentation/simplekeychain/accessibility/afterfirstunlockthisdeviceonly/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/afterfirstunlockthisdeviceonly/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/equatable-implementations/index.html b/docs/documentation/simplekeychain/accessibility/equatable-implementations/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/equatable-implementations/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/hash(into:)/index.html b/docs/documentation/simplekeychain/accessibility/hash(into:)/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/hash(into:)/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/hashvalue/index.html b/docs/documentation/simplekeychain/accessibility/hashvalue/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/hashvalue/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/index.html b/docs/documentation/simplekeychain/accessibility/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/init(rawvalue:)/index.html b/docs/documentation/simplekeychain/accessibility/init(rawvalue:)/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/init(rawvalue:)/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/rawrepresentable-implementations/index.html b/docs/documentation/simplekeychain/accessibility/rawrepresentable-implementations/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/rawrepresentable-implementations/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/rawvalue/index.html b/docs/documentation/simplekeychain/accessibility/rawvalue/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/rawvalue/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/whenpasscodesetthisdeviceonly/index.html b/docs/documentation/simplekeychain/accessibility/whenpasscodesetthisdeviceonly/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/whenpasscodesetthisdeviceonly/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/whenunlocked/index.html b/docs/documentation/simplekeychain/accessibility/whenunlocked/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/whenunlocked/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/accessibility/whenunlockedthisdeviceonly/index.html b/docs/documentation/simplekeychain/accessibility/whenunlockedthisdeviceonly/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/accessibility/whenunlockedthisdeviceonly/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/index.html b/docs/documentation/simplekeychain/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychain/data(forkey:)/index.html b/docs/documentation/simplekeychain/simplekeychain/data(forkey:)/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychain/data(forkey:)/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychain/deleteall()/index.html b/docs/documentation/simplekeychain/simplekeychain/deleteall()/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychain/deleteall()/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychain/deleteitem(forkey:)/index.html b/docs/documentation/simplekeychain/simplekeychain/deleteitem(forkey:)/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychain/deleteitem(forkey:)/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychain/hasitem(forkey:)/index.html b/docs/documentation/simplekeychain/simplekeychain/hasitem(forkey:)/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychain/hasitem(forkey:)/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychain/index.html b/docs/documentation/simplekeychain/simplekeychain/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychain/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychain/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:)/index.html b/docs/documentation/simplekeychain/simplekeychain/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:)/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychain/init(service:accessgroup:accessibility:accesscontrolflags:context:synchronizable:attributes:)/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychain/keys()/index.html b/docs/documentation/simplekeychain/simplekeychain/keys()/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychain/keys()/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychain/set(_:forkey:)-618u7/index.html b/docs/documentation/simplekeychain/simplekeychain/set(_:forkey:)-618u7/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychain/set(_:forkey:)-618u7/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychain/set(_:forkey:)-n98i/index.html b/docs/documentation/simplekeychain/simplekeychain/set(_:forkey:)-n98i/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychain/set(_:forkey:)-n98i/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychain/string(forkey:)/index.html b/docs/documentation/simplekeychain/simplekeychain/string(forkey:)/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychain/string(forkey:)/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/!=(_:_:)/index.html b/docs/documentation/simplekeychain/simplekeychainerror/!=(_:_:)/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/!=(_:_:)/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/==(_:_:)/index.html b/docs/documentation/simplekeychain/simplekeychainerror/==(_:_:)/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/==(_:_:)/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/authfailed/index.html b/docs/documentation/simplekeychain/simplekeychainerror/authfailed/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/authfailed/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/debugdescription/index.html b/docs/documentation/simplekeychain/simplekeychainerror/debugdescription/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/debugdescription/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/decodefailed/index.html b/docs/documentation/simplekeychain/simplekeychainerror/decodefailed/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/decodefailed/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/duplicateitem/index.html b/docs/documentation/simplekeychain/simplekeychainerror/duplicateitem/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/duplicateitem/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/equatable-implementations/index.html b/docs/documentation/simplekeychain/simplekeychainerror/equatable-implementations/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/equatable-implementations/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/error-implementations/index.html b/docs/documentation/simplekeychain/simplekeychainerror/error-implementations/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/error-implementations/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/errordescription-23ktd/index.html b/docs/documentation/simplekeychain/simplekeychainerror/errordescription-23ktd/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/errordescription-23ktd/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/errordescription-31jbz/index.html b/docs/documentation/simplekeychain/simplekeychainerror/errordescription-31jbz/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/errordescription-31jbz/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/failurereason/index.html b/docs/documentation/simplekeychain/simplekeychainerror/failurereason/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/failurereason/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/helpanchor/index.html b/docs/documentation/simplekeychain/simplekeychainerror/helpanchor/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/helpanchor/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/index.html b/docs/documentation/simplekeychain/simplekeychainerror/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/interactionnotallowed/index.html b/docs/documentation/simplekeychain/simplekeychainerror/interactionnotallowed/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/interactionnotallowed/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/invalidparameters/index.html b/docs/documentation/simplekeychain/simplekeychainerror/invalidparameters/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/invalidparameters/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/itemnotavailable/index.html b/docs/documentation/simplekeychain/simplekeychainerror/itemnotavailable/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/itemnotavailable/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/itemnotfound/index.html b/docs/documentation/simplekeychain/simplekeychainerror/itemnotfound/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/itemnotfound/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/localizeddescription-2xh78/index.html b/docs/documentation/simplekeychain/simplekeychainerror/localizeddescription-2xh78/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/localizeddescription-2xh78/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/localizeddescription-6p7yv/index.html b/docs/documentation/simplekeychain/simplekeychainerror/localizeddescription-6p7yv/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/localizeddescription-6p7yv/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/localizederror-implementations/index.html b/docs/documentation/simplekeychain/simplekeychainerror/localizederror-implementations/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/localizederror-implementations/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/operationnotimplemented/index.html b/docs/documentation/simplekeychain/simplekeychainerror/operationnotimplemented/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/operationnotimplemented/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/other/index.html b/docs/documentation/simplekeychain/simplekeychainerror/other/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/other/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/recoverysuggestion/index.html b/docs/documentation/simplekeychain/simplekeychainerror/recoverysuggestion/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/recoverysuggestion/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/status/index.html b/docs/documentation/simplekeychain/simplekeychainerror/status/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/status/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/unknown/index.html b/docs/documentation/simplekeychain/simplekeychainerror/unknown/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/unknown/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/usercanceled/index.html b/docs/documentation/simplekeychain/simplekeychainerror/usercanceled/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/usercanceled/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-41lv0/index.html b/docs/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-41lv0/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-41lv0/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-7uptb/index.html b/docs/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-7uptb/index.html new file mode 100644 index 0000000..2500f9e --- /dev/null +++ b/docs/documentation/simplekeychain/simplekeychainerror/~=(_:_:)-7uptb/index.html @@ -0,0 +1,11 @@ + + +Documentation
\ No newline at end of file diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5231da6dc99b41b8c9b720113cc4991529eb215e GIT binary patch literal 15406 zcmeI0eXLhy9l(EZk(V;zI<*U%aPfsugKmE)10f(cwHIH|L9U{ah=EJiM6*Bqr=-%B zThmgUiaYBb7lU3O68JDrPAE|?)})tN@Xd!mX^#urc&8-W~DL~ zA3}(DSI?zd>5t=7SPZK&9IMk-CKECK0-k`U;cFR=)oIfwPriimM=%tA34>uqhGTWw z^!XyhV$KJkAAAL7f)e5#tD6n_=o|X*H*J9*!w=xkaDO&l!&TI))8<%TW5QhB$+!uI zgTK|W+?WyW{SEqf|1Ajfd@f__<&V_U0+&D*$rJDKckKge;Kf=4$g1yzV zevDUKll89O?gaefnyh#KgdEOCSXb^j@flUKe{ri#JZG9=8hAeSq6{S0`EUiecg3+f zZG9m_NO~Q(PhNvAI0l^=j@4OB}1yrjNeH7;BDt zWHdpouphn+qu>SD3}=Ay(+tPz{s`+qUt^3l$7rZUrr_*cu7eQkS-Ka@9VD)=PTM~C zrZ)2K)rVdOADP-OM$Xw7xcdj5kIxhq;`Ko_erfdtCwz5ab>P+hI^p zWY@g<`siy+5ObN+++jY0EnHnEt*{XW2W2+i&GoiO7lwKDwcQT8Anwv1zHlea=$Fm1)sI(CEUl?<>-x#b&fv;*0N?0-z}1g&&lU_V`|9mi=Myc zxnOMGv-X*JZYk~$*X38eNyO)Q1TIeW;kK-PSOZPLIl9{09^9bKRvHMhR+!J{={mSZ}p2hmSQ_*J4%V8!QhMz&m7p^a$ z^Ea%@vFY>ojNl(%&1dX-i1m)OS<~8~eqN2^sc*ib`r1PMD;PT$d2{UC)jR*@Gu9lb z#PdG}W6}C^o%kE#cV3(;%xkO*<7(I6Kmv;PpL@ss=bx5&QdZv>WApZ(=SkRq=Jo9H zOi1N;&!1OGn0Nm8w?sI9tm#?k8t_@A=jET!Ez8mCw>Be<@qQT?o7${ltr-yHM8ALR z<0f#uP6N-~fbUS(;DksQY(6ueUAPZdeT_-qzthm=y?;@6Kc`l%ek0_4e=O1|k)rjd z?=Bb=`SPepAKywB^;;M_*%tm}?1`+Ztu!H^3Y4AhQ*Fos_PR7-If9s>KVyrpLRc&otyT#a6*bmJiTl_eC4Te}Daj`>Vh+L>zB}qp%5jZldfi5@( zof(eRXh;0!C&y zR;NuLeNP6lk6|zgJOl58r@(i`R&ei$V|Ci}(bpJbPta6h`nD1o*f5aCHPx{SnpBrx!(-~ zAeN&3_0e}R82bo>`C!;xVZh`4g&u_3-dw&O(faiBSzn|gW=k0oKhE&S>*S8sr zHOG|@#2VJJrnUVI;TbWkN}BNU`8hx484R&}n44$8Ir9G$ozGNy>fe|xlb-rFW<0o;&1KG1tZfhWVo&x~Ca(Fp;C|c= zE#UKv#d*66Le5iSV>GU&e`A+sxy)(qSgdUi_F_-=W{*WO3WH~`z1;#sau|-z=iLcc z=h#EcMc8&`I1c*sY7TQf1LjWc-hUnJ$#vvAu1H+V`n?6dS02h?1-gCU-ddhx4>7B- zc}9xkpii&nFxOr%cWU?EUj7Z9tBW8{Tx;zR-tS$E^U!{*3O{4@le|2!uG*aDYKL@B zy3Q76b)Mro3$86dyU%-Zfjz`6!0w!i@ses#^MQCh%`y{q#M6>ODD!(GJ)J6Em&9%fBZMfdA(;5Q^kn4DO?Ka7K|+rmv;{ zGl^Lb=C;Qo8HC|iV6XOU@9ORY*WWjwOeSM=udRfSlsRInrGIm+0&|CXWtc0sp|#f^ zg1w&xt3llqD3j|jc7bQwhsqqW)zZJY9tQh&ua?PFjP~#(*t_3K8(}|`t$obh?>}S1 zZ&z0&we%m>fVt-sCCv1$FV7i!w)YXR6?`XordYR#d$IYP?uU<+_!)m0yqe*-D5rXJ zJpktZK9u>|qrKX*y^n-#VC+AjqlAB9^Bv-KXNg}2HhcHIDvmo!Fqh9iPtP`M^u_sUPIK3Kehwn0 z+V|I`_TWA^yc@2xy)J3_rufp#orIy zcK=`MZmv7P9*g8u3~jI-nxRZQ!#gq@mq{~5bDF#C`_1n!dyK!|xb6NwuvV^b!ff!F z6p7!sufrup4w=4|{>^31Uzg;xCwsHU4KNgfXj=$f@I1@{_fZ~e(Radk3+y4Lp1)tr z9pclgJv|5Zcq^oH+=Q+jdA^W=7vMjXm z#SG{E8E_3u{q3TPIJdL$M#?^_GE7(p-37q%mu$sJr7zSU1tN( z-38`*3{HVOsb>EgYYuan)7-IG`;%ZV_GEAUp-dVvhMcPz=dHEr==VSyjDtL>rvLE- z?f`R5gH)_-5B|PK!QQG7<9t>JVF~ygWATiB7PPx((s@JG{SDv2Rs1cf7;^_40&|%& z7Hj%9nfBkoN1+yR&29nrmcPOHcr9JY{oC*d7zL^HH2=*6YzA|fD~L6$Wz9~ohYO)r zaW8xtjCY<_LY!wH_dZi?cZ2g8OIiQ=E(Yh;9OepQjg??tYr9tMr5-WPe6A(Wt{35Y z2=y*t{1Ujgu7UXZ6!ou z4g7WtbCuV>w#k{VF~*vs1ucb-aRa=P;aJ^X(8oAqjCE`- zbDFz1)(dHR6xYY@7ee^YE1DL~HCqmqduHQ*85BwYUDcA^G yVOxe{bx(pm`c4GDf#W^T?Fke6@Nd!6;4Byct_N|fPMba_OV70Of&4$uz<&VCpkVL- literal 0 HcmV?d00001 diff --git a/docs/favicon.svg b/docs/favicon.svg new file mode 100644 index 0000000..c54c53f --- /dev/null +++ b/docs/favicon.svg @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/docs/img/added-icon.d6f7e47d.svg b/docs/img/added-icon.d6f7e47d.svg new file mode 100644 index 0000000..6bb6d89 --- /dev/null +++ b/docs/img/added-icon.d6f7e47d.svg @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/docs/img/deprecated-icon.015b4f17.svg b/docs/img/deprecated-icon.015b4f17.svg new file mode 100644 index 0000000..a0f8008 --- /dev/null +++ b/docs/img/deprecated-icon.015b4f17.svg @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/docs/img/modified-icon.f496e73d.svg b/docs/img/modified-icon.f496e73d.svg new file mode 100644 index 0000000..3e0bd6f --- /dev/null +++ b/docs/img/modified-icon.f496e73d.svg @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..27dfbab --- /dev/null +++ b/docs/index.html @@ -0,0 +1,10 @@ + + + + + +

+ Redirect +

+ + diff --git a/docs/index/availability.index b/docs/index/availability.index new file mode 100644 index 0000000000000000000000000000000000000000..d8ee596e7aa2f529de9eddcf50b352d1865f45ba GIT binary patch literal 201 zcmYc)$jK}&F)+Bo$i&RT%EvDpl9E`G7%w24lbDxYnwXv%k{^(hSdx}slv^AxAe5O` zl3J9On4IbZl`f7ffJt9uV-GaA$iW!{6Y)#TO})g$&BGg#2V{lhCKhK0C+6gcFhIe7 zC|Iyi0H{n*C^Wb{Gp$5`aRG;*n2w{jUqEm|YF2)6OKW@2q$v3C1k>Zz(nAEl~#^^_!ut&ttP@yhRieoUCM{hjq}_c2LoNIM}r zM|tGAB2BB<=ewO)J4boQ@giQc*o$=Y#c$jp1IPd}fD9l5$N(~c3?Ku@05X6KAOpz2 zwPRqXUw&=+|MIS)?V#@*89)Y*0b~Ff zKnAV_17hA@lIEoI(&gH#-5+-!>YnIscg}X+YCqP#yDhb!k-s5#yEdAC0z_60(u7VZu^~ z?)BN3EOMDRP3|wytt#m3!kEm26?IfC)$yrrn1-SnJO`)`)CG>K)McIY$IQPIKsbuV z{~s77ilfmfPD=*0eENX`OR0jj5wdt3_XmED(NP$sl&wcT8^rys=#Bz+>9Dx^xdQ2I zRiq(FQ-47DH89#;NO6`F;&`^9__nJUXLv4OEpmk81M^FQ5lez7Nk=&|yR#%;EU-U! zEwBwy16%bi-!xUvQIyYe#Oy;T1XD02cVljg$u3Mh-7zV5kSg&_%3PuvzU#PJchc?z)FGx%Y*W2$!fyDQVHuvy0v5m%S(H;{3L}K6 zI&*BWm3B(0Z)r?%T>aKbyUXKR)U|mXJ~d%KDxS~tJfKv-ZN)2O&!-e%Cy zB|eFL)@M}uLV*Y8wPIPvaW5Wh#Gfya;0#to8jM1gh-VU^{$kB+canN8ej;ZwJqQ*BL8jq}#s1I$ZbZ>!q@(`FYZ+{{>Bneq#{DGN@>-^J) z!Q?>1hnE6gebVm_HWK&-g7;U2Ac<|%{LDBx`JYg@DjH&(|Z z<55_kiB=b$bQMdN^4F?yTE2CCvN}@Pg7Bu-Pog25m^0SU-ddNw!cpNW|Hta+S?e*0 ztgEZuc6q)3Lv>`zyz$Bevh>eTSYFysRL6Yej#J-S{?_v8Gxm5m@=C<(uK}W=_Scp2 zI=Ze3;!-+FqIl(0Fi7}&^z!Mld>^ld#zwrh0_;reI+1h_M*zkoo;rP3fzhdi5t0-h2_ile02x3AkO5=>89)Y*0b~Ff zKn9QjWZ*+%Aot2|N-#u}-WOB03A4Vi#v{;SyM!wUQdcq!!D?*6~9 z;vN}529N<{02x3AkO5=>89)Y*0b~Ff`1@uc@4FvS|NrXLiXntq{r>}`&c*#9!JKrx z^kVnT?u+RCe|7#a1~PyQAOpw%GJp&q1IPd}fD9l5$N(~M00#D)|Gz2*Xr91|d}4wh zzV?Sr`11?<$1-b!_wMsexD$xqpm30HbJEYH&Dz`DbB#;g-z;2Oe32^w7|qqi_ZmUt zt%YFW&3agG)}O9z)_&0KbB(~qn=dRn-J81e-FG@c^HS%9&QCkv>x7+i9i#I~9+JRXpx>#)nIEg@H3gUJVcf}-7pk|`95__2oS1saJ&yMzFnF$ zOI&0qJQc;G!SZQ=pXa=)C7we-a|qN^q5Xj4O8A);=x%hKgzHDvlNaGjDB;W zdsVbrT9T6ekStun5!BjU`!7b2)K{`L9O6;ANkJmKu);Q+B!?N((%d)OF@6E zD2H5}Jv&{C`xoxa^5OruPoSsSTzuBHNMIRY&x*)X!Ewb>gsea0QikCmna+J9-P#<1 zGLzuI@tMwm1K(G`emDPvP&lrbJ1E1A6P7TN4&pqY@+=HSYjJuZlUFQDpqs=CRBG8I zfB>P?2FDdkaD`HvruRm)sB>AC-e4{E((G0dW#MY3%r;EbHCzG#LJ1g-E0$%ZCY`n! zay79jZZ_;esExB*OK4}okBa%;vB!O2Z?E?T8`&);a)BQebD6r^WQog|5>KNFSGd(c zKUpyAGUj@|uKK2~fa=wB-G^%{!oCnD zE``_SG6nT)&0>~9sj5JLDAmK+6P5HyFYPT&*r`oi#j{n-w$w>`9^Vdo@%AdH0}C8N zb=OceqAH2|H62u3YVDx<;KzJJFcUA5sA$iVojp z37jCXJ>OBZOzp!(0mhi;weP2U5j{X0NRM9-Ss@j;T6y=^V1XdoaYNF z4YXjgoVk54a5o+G#w+5lZmJuqF^QkYU!}b*O$Vh*k#BB~*pS&Pw_RZmSG`{1LGNjI zeCDofP!E(CciX+b>h?mg<@Q$5X1JCS>hSr`RD5SuXP!HG9`o|pW3oBe+~J{o;%#l3 zLuV!H=H)q*A;aMy?1gY@iad5gG%H$9;p9(;#8#|sv#fJDh1OrAmTABRIh|%TM;C0%^+WG{Gov2g7XMdMXVI zqp`OEm;ZDcny!%4x^-5Fug9)(%Zw1RvKFer&9g%E4ci)jW=4n+ZEq_ZaKlcQK)=8? zQzz?yPnBBp2U<9So2^JAOD=PDerwu>LG{V2+ch2jszDvcB^01?Bw2DiVwsBVyB;;+ zbPBs|1zw89)Y*0b~Ff zKn9QjWZS2o1JXC)^4{$l<=j|cUE_5Ut5pX{FR{-N_k=X~dn?Kj)M zYCqe4y#3vF*goHO+9%tM_RI3mpOwfR!>ViVT; z6RZ7+HU9Dy{*vQATIhG`^;bF%b(+n8J@#+MUz@vs?!Tq$T8}Q)+y6WN#_{jBFW0YJ z0q|n?)nono4;t^*8uEAMpKLtI%keY$_0CE8V(VS$hQ@8pqJkg&lY%8g29SZjAOm6) z^zUu`KfZpb={de(6Q)egQK)=2jQWaW>k5GZZ^4g34PA45&G8Hq2I)&XA(mnCv1Qxv zU?Bc{b}n)KzYknXc9u^8>i?nsAHSeLSu+=1uJfw}uIR_tCnSCkNZZz`2=&lS7BS|Ee> z&Vi9XcxCQLc=~~-&!Mr8eg*EhnQ;OCcI*G4{(ngf9v}nA05b4b%)oNfhTRWz786!W!CJ>*ZG^ z;NM#DKD^?q5?x*Owk7z+3PwG_54$2VW!`vYV$Fi=yDGp0AM}ctj}+g3oUu{=|KJ>= z{(qG#5B2|Nj%OXQ{y#rcSJ^&D|L*|$|2v=1gZ|&M-24Ao^!~pJ^%#r{AOpw%GJp&q z1IPd}fD9l5$N(~c3>-BBLiaEC>wsDNe5)7xOf-NWi+Dl@P{b4Iggujo$kOia|D*qZ zK`8E!0c7BBgaP3VcUbRDfpgS;mPhV&cu4O;od2&llZW&FIRB6H|NEN%7tdPs|4$uB|#IeC1Qx_xchK o{r|U?Cci5{|9`(X!~b9O>qS3b^y|euzVPQ4@$&0#?{R`Z19Px?)&Kwi literal 0 HcmV?d00001 diff --git a/docs/index/navigator.index b/docs/index/navigator.index new file mode 100644 index 0000000000000000000000000000000000000000..4f6e4e60eba1dd45b33c28fca3ba5d84e5158529 GIT binary patch literal 9885 zcmchd{cjw_8OM)`f{LKDl-H`H8%)5aF^+ABgQ-c3U%(JZ6w|7_L}n{(Y9}CwC2g|EJ|Qix1oTVMpIZpWmW-A3oH|&-uS6x!n%0 z^&<7AItaRc7|*qnAit(!?dvd!=Q4A1k8l2jy8Mai50=pTSlDS1s?$8sd8)FJ0;jgi z@10s$JOlY3P<_ObFVLm@<3l^f&~fVc6|>KCTQ|%`nkMPU!3-!;=pZAqEp|U^d7j&i zn9QCUs~=&r>Nm-1^U(1g)yFKWJ;1Vm$L(qms4NS2!YI@SqsQV`zj`yg)*`oy&#=EDzg8#KN z$$N6~yj*1iEPFM3$lbLh)@c%LM*eO_T~$zgi!ZOG%Gb)=BzXaSS6$c3-o;hir;l_o zJBWjBn#AD^e1iy( z)1G^oHX?wq50^=hnU>kJ^XKv<@ce_SJvoRJP%fCit(KV_h>-np@W_BuN8bcvC`iQE%qy3CY&U1UI2ltya^IOKrPnBKaxuEeoswb>% zOcuul)<~P64g=53&CL~W+7WP^_8b>y#(9nm>Dc3%wP#KOwKwT5O6iL(rwL7>4v&aB2V#$64n+w0q(d=qOTzKAHJ`sJ z)VE&cw(qB2TkYh#>naP{uw^SKkpV~mU3!Yok|n5eMrKx$4@N~=AR9 zu}jy>Snw;YOA zJU`dnO+SoOo7QOUIJGg>QD+VUJ4PUQ{^jHmH}DE`Re0JeNZM+mM1{yhCii-sWfpM+ zRi?Zbg#iWp2x=x|rnbmLR0B(W>$KF1OeHI)LKV_UBlQDpFK;KBqRwQ0Vv|^r9VePX zQpg77S58VfE6cH(hcQj%kyDBeAfXh#l)mz``K5%_NT}^=v{UadjXPO#i29?-oli7L~1{X;th6$7+%j z1h$2Q5pqNmTXm&$Vl-={kPgzDRBh5zOen-vQr%VQgw|RDS)llflR~2GmzbtPk;i*+ zvJdw^i8asCK+du-n)C*@0Qopsgm^GJK;@;OGb%NeS% zAaa8Pq9|Nj1kc~7-fM+xPcVmsjT;~5bU33F&21CSDG@bWuHIsBpuq~ZX&zx3+24)R zod5}Zw~OLGPKpyuahcnT5~ocFr;OB05IM+oFKO*lwb#xsnMeFeCFkj_`Poqcek~U^ zRq0G?#&pL)4cd`NIBBgEnH!0k0@CRD9dcruVVdbb#5AnE(Xm^NV9xaIpl@#aLiHC; z)l+m8<&C0gIaR;Y4YPHHgy*F=YLdvcKr~5e8%YUC0@lB&+7@|=al|tito^QvFZ)@B zxNTeM@u?uF$ATzHVM8JLY(vQ+k&wQGDkey^n@kZHipf!J*x{B_R@WT95G=nV!xn0=pz0dlH#_Wg0z_%gR99i967fApiAa@}j2Mat%goOb=` z5E&HLk&GEAzd_aB73AQ*!OG>#e(V!fO)rg_95y*d>pTU5h^ifTJj$A1;1;Jyd-M%V zKS#aIxS8?8}Z(7Wma(Xa>z``K*>t;{?+)& z;WnwK8o}}jRXf!vZbaUgaAayyjVF<6R8fa=i}d$4@^vRUnFx$;oEVbvbYZOAnT+QO zL(UK&&an2p$*$tlT@=|Cj=ifmXV4Xg4c&3hfX3&G z2`FxRqptJG7L7c~*HmpY$nJ;V#Go{OlIseOa-YMWVjzZ8?KS%lxTw5XG-lb*Tj4Ip zoLjLT?P2SL=xHJ@DEyMDZ4>#iL%<44n;h%M4s~@+3{v?q1mOBq?N__9r{NnY^4`5W aO}X1-*$d+&*WT+iN|iPW!(o_0#>|hT!PnaW literal 0 HcmV?d00001 diff --git a/docs/js/chunk-2d0d3105.cd72cc8e.js b/docs/js/chunk-2d0d3105.cd72cc8e.js new file mode 100644 index 0000000..74345f0 --- /dev/null +++ b/docs/js/chunk-2d0d3105.cd72cc8e.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0d3105"],{"5abe":function(t,e){(function(){"use strict";if("object"===typeof window)if("IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)"isIntersecting"in window.IntersectionObserverEntry.prototype||Object.defineProperty(window.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}});else{var t=function(t){var e=t,n=i(e);while(n)e=n.ownerDocument,n=i(e);return e}(window.document),e=[],n=null,o=null;s.prototype.THROTTLE_TIMEOUT=100,s.prototype.POLL_INTERVAL=null,s.prototype.USE_MUTATION_OBSERVER=!0,s._setupCrossOriginUpdater=function(){return n||(n=function(t,n){o=t&&n?g(t,n):p(),e.forEach((function(t){t._checkForIntersections()}))}),n},s._resetCrossOriginUpdater=function(){n=null,o=null},s.prototype.observe=function(t){var e=this._observationTargets.some((function(e){return e.element==t}));if(!e){if(!t||1!=t.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:t,entry:null}),this._monitorIntersections(t.ownerDocument),this._checkForIntersections()}},s.prototype.unobserve=function(t){this._observationTargets=this._observationTargets.filter((function(e){return e.element!=t})),this._unmonitorIntersections(t.ownerDocument),0==this._observationTargets.length&&this._unregisterInstance()},s.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorAllIntersections(),this._unregisterInstance()},s.prototype.takeRecords=function(){var t=this._queuedEntries.slice();return this._queuedEntries=[],t},s.prototype._initThresholds=function(t){var e=t||[0];return Array.isArray(e)||(e=[e]),e.sort().filter((function(t,e,n){if("number"!=typeof t||isNaN(t)||t<0||t>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return t!==n[e-1]}))},s.prototype._parseRootMargin=function(t){var e=t||"0px",n=e.split(/\s+/).map((function(t){var e=/^(-?\d*\.?\d+)(px|%)$/.exec(t);if(!e)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(e[1]),unit:e[2]}}));return n[1]=n[1]||n[0],n[2]=n[2]||n[0],n[3]=n[3]||n[1],n},s.prototype._monitorIntersections=function(e){var n=e.defaultView;if(n&&-1==this._monitoringDocuments.indexOf(e)){var o=this._checkForIntersections,r=null,s=null;this.POLL_INTERVAL?r=n.setInterval(o,this.POLL_INTERVAL):(c(n,"resize",o,!0),c(e,"scroll",o,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in n&&(s=new n.MutationObserver(o),s.observe(e,{attributes:!0,childList:!0,characterData:!0,subtree:!0}))),this._monitoringDocuments.push(e),this._monitoringUnsubscribes.push((function(){var t=e.defaultView;t&&(r&&t.clearInterval(r),a(t,"resize",o,!0)),a(e,"scroll",o,!0),s&&s.disconnect()}));var h=this.root&&(this.root.ownerDocument||this.root)||t;if(e!=h){var u=i(e);u&&this._monitorIntersections(u.ownerDocument)}}},s.prototype._unmonitorIntersections=function(e){var n=this._monitoringDocuments.indexOf(e);if(-1!=n){var o=this.root&&(this.root.ownerDocument||this.root)||t,r=this._observationTargets.some((function(t){var n=t.element.ownerDocument;if(n==e)return!0;while(n&&n!=o){var r=i(n);if(n=r&&r.ownerDocument,n==e)return!0}return!1}));if(!r){var s=this._monitoringUnsubscribes[n];if(this._monitoringDocuments.splice(n,1),this._monitoringUnsubscribes.splice(n,1),s(),e!=o){var h=i(e);h&&this._unmonitorIntersections(h.ownerDocument)}}}},s.prototype._unmonitorAllIntersections=function(){var t=this._monitoringUnsubscribes.slice(0);this._monitoringDocuments.length=0,this._monitoringUnsubscribes.length=0;for(var e=0;e=0&&h>=0&&{top:n,bottom:o,left:i,right:r,width:s,height:h}||null}function f(t){var e;try{e=t.getBoundingClientRect()}catch(n){}return e?(e.width&&e.height||(e={top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:e.right-e.left,height:e.bottom-e.top}),e):p()}function p(){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}function d(t){return!t||"x"in t?t:{top:t.top,y:t.top,bottom:t.bottom,left:t.left,x:t.left,right:t.right,width:t.width,height:t.height}}function g(t,e){var n=e.top-t.top,o=e.left-t.left;return{top:n,left:o,height:e.height,width:e.width,bottom:n+e.height,right:o+e.width}}function m(t,e){var n=e;while(n){if(n==t)return!0;n=v(n)}return!1}function v(e){var n=e.parentNode;return 9==e.nodeType&&e!=t?i(e):(n&&n.assignedSlot&&(n=n.assignedSlot.parentNode),n&&11==n.nodeType&&n.host?n.host:n)}function w(t){return t&&9===t.nodeType}})()}}]); \ No newline at end of file diff --git a/docs/js/chunk-vendors.00bf82af.js b/docs/js/chunk-vendors.00bf82af.js new file mode 100644 index 0000000..04c05a6 --- /dev/null +++ b/docs/js/chunk-vendors.00bf82af.js @@ -0,0 +1,21 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-vendors"],{2877:function(t,e,n){"use strict";function r(t,e,n,r,o,i,a,s){var c,u="function"===typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},u._ssrRegister=c):o&&(c=s?function(){o.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:o),c)if(u.functional){u._injectStyles=c;var f=u.render;u.render=function(t,e){return c.call(e),f(t,e)}}else{var l=u.beforeCreate;u.beforeCreate=l?[].concat(l,c):[c]}return{exports:t,options:u}}n.d(e,"a",(function(){return r}))},"2b0e":function(t,e,n){"use strict";n.r(e),function(t){ +/*! + * Vue.js v2.6.14 + * (c) 2014-2021 Evan You + * Released under the MIT License. + */ +var n=Object.freeze({});function r(t){return void 0===t||null===t}function o(t){return void 0!==t&&null!==t}function i(t){return!0===t}function a(t){return!1===t}function s(t){return"string"===typeof t||"number"===typeof t||"symbol"===typeof t||"boolean"===typeof t}function c(t){return null!==t&&"object"===typeof t}var u=Object.prototype.toString;function f(t){return"[object Object]"===u.call(t)}function l(t){return"[object RegExp]"===u.call(t)}function p(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function d(t){return o(t)&&"function"===typeof t.then&&"function"===typeof t.catch}function h(t){return null==t?"":Array.isArray(t)||f(t)&&t.toString===u?JSON.stringify(t,null,2):String(t)}function v(t){var e=parseFloat(t);return isNaN(e)?t:e}function y(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}var _=Object.prototype.hasOwnProperty;function b(t,e){return _.call(t,e)}function w(t){var e=Object.create(null);return function(n){var r=e[n];return r||(e[n]=t(n))}}var C=/-(\w)/g,x=w((function(t){return t.replace(C,(function(t,e){return e?e.toUpperCase():""}))})),$=w((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),A=/\B([A-Z])/g,k=w((function(t){return t.replace(A,"-$1").toLowerCase()}));function O(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function S(t,e){return t.bind(e)}var E=Function.prototype.bind?S:O;function j(t,e){e=e||0;var n=t.length-e,r=new Array(n);while(n--)r[n]=t[n+e];return r}function T(t,e){for(var n in e)t[n]=e[n];return t}function R(t){for(var e={},n=0;n0,nt=Z&&Z.indexOf("edge/")>0,rt=(Z&&Z.indexOf("android"),Z&&/iphone|ipad|ipod|ios/.test(Z)||"ios"===Y),ot=(Z&&/chrome\/\d+/.test(Z),Z&&/phantomjs/.test(Z),Z&&Z.match(/firefox\/(\d+)/)),it={}.watch,at=!1;if(G)try{var st={};Object.defineProperty(st,"passive",{get:function(){at=!0}}),window.addEventListener("test-passive",null,st)}catch($a){}var ct=function(){return void 0===X&&(X=!G&&!Q&&"undefined"!==typeof t&&(t["process"]&&"server"===t["process"].env.VUE_ENV)),X},ut=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ft(t){return"function"===typeof t&&/native code/.test(t.toString())}var lt,pt="undefined"!==typeof Symbol&&ft(Symbol)&&"undefined"!==typeof Reflect&&ft(Reflect.ownKeys);lt="undefined"!==typeof Set&&ft(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var dt=P,ht=0,vt=function(){this.id=ht++,this.subs=[]};vt.prototype.addSub=function(t){this.subs.push(t)},vt.prototype.removeSub=function(t){g(this.subs,t)},vt.prototype.depend=function(){vt.target&&vt.target.addDep(this)},vt.prototype.notify=function(){var t=this.subs.slice();for(var e=0,n=t.length;e-1)if(i&&!b(o,"default"))a=!1;else if(""===a||a===k(t)){var c=ee(String,o.type);(c<0||s0&&(a=Se(a,(e||"")+"_"+n),Oe(a[0])&&Oe(u)&&(f[c]=Ct(u.text+a[0].text),a.shift()),f.push.apply(f,a)):s(a)?Oe(u)?f[c]=Ct(u.text+a):""!==a&&f.push(Ct(a)):Oe(a)&&Oe(u)?f[c]=Ct(u.text+a.text):(i(t._isVList)&&o(a.tag)&&r(a.key)&&o(e)&&(a.key="__vlist"+e+"_"+n+"__"),f.push(a)));return f}function Ee(t){var e=t.$options.provide;e&&(t._provided="function"===typeof e?e.call(t):e)}function je(t){var e=Te(t.$options.inject,t);e&&(Et(!1),Object.keys(e).forEach((function(n){It(t,n,e[n])})),Et(!0))}function Te(t,e){if(t){for(var n=Object.create(null),r=pt?Reflect.ownKeys(t):Object.keys(t),o=0;o0,a=t?!!t.$stable:!i,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==n&&s===r.$key&&!i&&!r.$hasNormal)return r;for(var c in o={},t)t[c]&&"$"!==c[0]&&(o[c]=Ne(e,c,t[c]))}else o={};for(var u in e)u in o||(o[u]=De(e,u));return t&&Object.isExtensible(t)&&(t._normalized=o),z(o,"$stable",a),z(o,"$key",s),z(o,"$hasNormal",i),o}function Ne(t,e,n){var r=function(){var t=arguments.length?n.apply(null,arguments):n({});t=t&&"object"===typeof t&&!Array.isArray(t)?[t]:ke(t);var e=t&&t[0];return t&&(!e||1===t.length&&e.isComment&&!Ie(e))?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:r,enumerable:!0,configurable:!0}),r}function De(t,e){return function(){return t[e]}}function Me(t,e){var n,r,i,a,s;if(Array.isArray(t)||"string"===typeof t)for(n=new Array(t.length),r=0,i=t.length;r1?j(n):n;for(var r=j(arguments,1),o='event handler for "'+t+'"',i=0,a=n.length;idocument.createEvent("Event").timeStamp&&(Jn=function(){return Gn.now()})}function Qn(){var t,e;for(Xn=Jn(),zn=!0,Vn.sort((function(t,e){return t.id-e.id})),Wn=0;WnWn&&Vn[n].id>t.id)n--;Vn.splice(n+1,0,t)}else Vn.push(t);qn||(qn=!0,ve(Qn))}}var nr=0,rr=function(t,e,n,r,o){this.vm=t,o&&(t._watcher=this),t._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++nr,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new lt,this.newDepIds=new lt,this.expression="","function"===typeof e?this.getter=e:(this.getter=K(e),this.getter||(this.getter=P)),this.value=this.lazy?void 0:this.get()};rr.prototype.get=function(){var t;mt(this);var e=this.vm;try{t=this.getter.call(e,e)}catch($a){if(!this.user)throw $a;ne($a,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&&me(t),gt(),this.cleanupDeps()}return t},rr.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},rr.prototype.cleanupDeps=function(){var t=this.deps.length;while(t--){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},rr.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():er(this)},rr.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||c(t)||this.deep){var e=this.value;if(this.value=t,this.user){var n='callback for watcher "'+this.expression+'"';re(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}},rr.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},rr.prototype.depend=function(){var t=this.deps.length;while(t--)this.deps[t].depend()},rr.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||g(this.vm._watchers,this);var t=this.deps.length;while(t--)this.deps[t].removeSub(this);this.active=!1}};var or={enumerable:!0,configurable:!0,get:P,set:P};function ir(t,e,n){or.get=function(){return this[e][n]},or.set=function(t){this[e][n]=t},Object.defineProperty(t,n,or)}function ar(t){t._watchers=[];var e=t.$options;e.props&&sr(t,e.props),e.methods&&vr(t,e.methods),e.data?cr(t):Pt(t._data={},!0),e.computed&&lr(t,e.computed),e.watch&&e.watch!==it&&yr(t,e.watch)}function sr(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$options._propKeys=[],i=!t.$parent;i||Et(!1);var a=function(i){o.push(i);var a=Gt(i,e,n,t);It(r,i,a),i in t||ir(t,"_props",i)};for(var s in e)a(s);Et(!0)}function cr(t){var e=t.$options.data;e=t._data="function"===typeof e?ur(e,t):e||{},f(e)||(e={});var n=Object.keys(e),r=t.$options.props,o=(t.$options.methods,n.length);while(o--){var i=n[o];0,r&&b(r,i)||q(i)||ir(t,"_data",i)}Pt(e,!0)}function ur(t,e){mt();try{return t.call(e,e)}catch($a){return ne($a,e,"data()"),{}}finally{gt()}}var fr={lazy:!0};function lr(t,e){var n=t._computedWatchers=Object.create(null),r=ct();for(var o in e){var i=e[o],a="function"===typeof i?i:i.get;0,r||(n[o]=new rr(t,a||P,P,fr)),o in t||pr(t,o,i)}}function pr(t,e,n){var r=!ct();"function"===typeof n?(or.get=r?dr(e):hr(n),or.set=P):(or.get=n.get?r&&!1!==n.cache?dr(e):hr(n.get):P,or.set=n.set||P),Object.defineProperty(t,e,or)}function dr(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),vt.target&&e.depend(),e.value}}function hr(t){return function(){return t.call(this,this)}}function vr(t,e){t.$options.props;for(var n in e)t[n]="function"!==typeof e[n]?P:E(e[n],t)}function yr(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var o=0;o-1)return this;var n=j(arguments,1);return n.unshift(this),"function"===typeof t.install?t.install.apply(t,n):"function"===typeof t&&t.apply(null,n),e.push(t),this}}function kr(t){t.mixin=function(t){return this.options=Xt(this.options,t),this}}function Or(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=t.name||n.options.name;var a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=Xt(n.options,t),a["super"]=n,a.options.props&&Sr(a),a.options.computed&&Er(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,U.forEach((function(t){a[t]=n[t]})),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=T({},a.options),o[r]=a,a}}function Sr(t){var e=t.options.props;for(var n in e)ir(t.prototype,"_props",n)}function Er(t){var e=t.options.computed;for(var n in e)pr(t.prototype,n,e[n])}function jr(t){U.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&f(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"===typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}function Tr(t){return t&&(t.Ctor.options.name||t.tag)}function Rr(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"===typeof t?t.split(",").indexOf(e)>-1:!!l(t)&&t.test(e)}function Pr(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Ir(n,i,r,o)}}}function Ir(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,g(n,e)}br($r),gr($r),jn($r),In($r),bn($r);var Lr=[String,RegExp,Array],Nr={name:"keep-alive",abstract:!0,props:{include:Lr,exclude:Lr,max:[String,Number]},methods:{cacheVNode:function(){var t=this,e=t.cache,n=t.keys,r=t.vnodeToCache,o=t.keyToCache;if(r){var i=r.tag,a=r.componentInstance,s=r.componentOptions;e[o]={name:Tr(s),tag:i,componentInstance:a},n.push(o),this.max&&n.length>parseInt(this.max)&&Ir(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Ir(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Pr(t,(function(t){return Rr(e,t)}))})),this.$watch("exclude",(function(e){Pr(t,(function(t){return!Rr(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=$n(t),n=e&&e.componentOptions;if(n){var r=Tr(n),o=this,i=o.include,a=o.exclude;if(i&&(!r||!Rr(i,r))||a&&r&&Rr(a,r))return e;var s=this,c=s.cache,u=s.keys,f=null==e.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):e.key;c[f]?(e.componentInstance=c[f].componentInstance,g(u,f),u.push(f)):(this.vnodeToCache=e,this.keyToCache=f),e.data.keepAlive=!0}return e||t&&t[0]}},Dr={KeepAlive:Nr};function Mr(t){var e={get:function(){return B}};Object.defineProperty(t,"config",e),t.util={warn:dt,extend:T,mergeOptions:Xt,defineReactive:It},t.set=Lt,t.delete=Nt,t.nextTick=ve,t.observable=function(t){return Pt(t),t},t.options=Object.create(null),U.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,Dr),Ar(t),kr(t),Or(t),jr(t)}Mr($r),Object.defineProperty($r.prototype,"$isServer",{get:ct}),Object.defineProperty($r.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty($r,"FunctionalRenderContext",{value:Ze}),$r.version="2.6.14";var Fr=y("style,class"),Ur=y("input,textarea,option,select,progress"),Vr=function(t,e,n){return"value"===n&&Ur(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Br=y("contenteditable,draggable,spellcheck"),Hr=y("events,caret,typing,plaintext-only"),qr=function(t,e){return Jr(e)||"false"===e?"false":"contenteditable"===t&&Hr(e)?e:"true"},zr=y("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Wr="http://www.w3.org/1999/xlink",Kr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Xr=function(t){return Kr(t)?t.slice(6,t.length):""},Jr=function(t){return null==t||!1===t};function Gr(t){var e=t.data,n=t,r=t;while(o(r.componentInstance))r=r.componentInstance._vnode,r&&r.data&&(e=Qr(r.data,e));while(o(n=n.parent))n&&n.data&&(e=Qr(e,n.data));return Yr(e.staticClass,e.class)}function Qr(t,e){return{staticClass:Zr(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function Yr(t,e){return o(t)||o(e)?Zr(t,to(e)):""}function Zr(t,e){return t?e?t+" "+e:t:e||""}function to(t){return Array.isArray(t)?eo(t):c(t)?no(t):"string"===typeof t?t:""}function eo(t){for(var e,n="",r=0,i=t.length;r-1?co[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:co[t]=/HTMLUnknownElement/.test(e.toString())}var fo=y("text,number,password,search,email,tel,url");function lo(t){if("string"===typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}function po(t,e){var n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function ho(t,e){return document.createElementNS(ro[t],e)}function vo(t){return document.createTextNode(t)}function yo(t){return document.createComment(t)}function mo(t,e,n){t.insertBefore(e,n)}function go(t,e){t.removeChild(e)}function _o(t,e){t.appendChild(e)}function bo(t){return t.parentNode}function wo(t){return t.nextSibling}function Co(t){return t.tagName}function xo(t,e){t.textContent=e}function $o(t,e){t.setAttribute(e,"")}var Ao=Object.freeze({createElement:po,createElementNS:ho,createTextNode:vo,createComment:yo,insertBefore:mo,removeChild:go,appendChild:_o,parentNode:bo,nextSibling:wo,tagName:Co,setTextContent:xo,setStyleScope:$o}),ko={create:function(t,e){Oo(e)},update:function(t,e){t.data.ref!==e.data.ref&&(Oo(t,!0),Oo(e))},destroy:function(t){Oo(t,!0)}};function Oo(t,e){var n=t.data.ref;if(o(n)){var r=t.context,i=t.componentInstance||t.elm,a=r.$refs;e?Array.isArray(a[n])?g(a[n],i):a[n]===i&&(a[n]=void 0):t.data.refInFor?Array.isArray(a[n])?a[n].indexOf(i)<0&&a[n].push(i):a[n]=[i]:a[n]=i}}var So=new _t("",{},[]),Eo=["create","activate","update","remove","destroy"];function jo(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&o(t.data)===o(e.data)&&To(t,e)||i(t.isAsyncPlaceholder)&&r(e.asyncFactory.error))}function To(t,e){if("input"!==t.tag)return!0;var n,r=o(n=t.data)&&o(n=n.attrs)&&n.type,i=o(n=e.data)&&o(n=n.attrs)&&n.type;return r===i||fo(r)&&fo(i)}function Ro(t,e,n){var r,i,a={};for(r=e;r<=n;++r)i=t[r].key,o(i)&&(a[i]=r);return a}function Po(t){var e,n,a={},c=t.modules,u=t.nodeOps;for(e=0;ev?(l=r(n[g+1])?null:n[g+1].elm,x(t,l,n,h,g,i)):h>g&&A(e,p,v)}function S(t,e,n,r){for(var i=n;i-1?qo(t,e,n):zr(e)?Jr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Br(e)?t.setAttribute(e,qr(e,n)):Kr(e)?Jr(n)?t.removeAttributeNS(Wr,Xr(e)):t.setAttributeNS(Wr,e,n):qo(t,e,n)}function qo(t,e,n){if(Jr(n))t.removeAttribute(e);else{if(tt&&!et&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var zo={create:Bo,update:Bo};function Wo(t,e){var n=e.elm,i=e.data,a=t.data;if(!(r(i.staticClass)&&r(i.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var s=Gr(e),c=n._transitionClasses;o(c)&&(s=Zr(s,to(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ko,Xo={create:Wo,update:Wo},Jo="__r",Go="__c";function Qo(t){if(o(t[Jo])){var e=tt?"change":"input";t[e]=[].concat(t[Jo],t[e]||[]),delete t[Jo]}o(t[Go])&&(t.change=[].concat(t[Go],t.change||[]),delete t[Go])}function Yo(t,e,n){var r=Ko;return function o(){var i=e.apply(null,arguments);null!==i&&ei(t,o,n,r)}}var Zo=se&&!(ot&&Number(ot[1])<=53);function ti(t,e,n,r){if(Zo){var o=Xn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Ko.addEventListener(t,e,at?{capture:n,passive:r}:n)}function ei(t,e,n,r){(r||Ko).removeEventListener(t,e._wrapper||e,n)}function ni(t,e){if(!r(t.data.on)||!r(e.data.on)){var n=e.data.on||{},o=t.data.on||{};Ko=e.elm,Qo(n),we(n,o,ti,ei,Yo,e.context),Ko=void 0}}var ri,oi={create:ni,update:ni};function ii(t,e){if(!r(t.data.domProps)||!r(e.data.domProps)){var n,i,a=e.elm,s=t.data.domProps||{},c=e.data.domProps||{};for(n in o(c.__ob__)&&(c=e.data.domProps=T({},c)),s)n in c||(a[n]="");for(n in c){if(i=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),i===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=i;var u=r(i)?"":String(i);ai(a,u)&&(a.value=u)}else if("innerHTML"===n&&io(a.tagName)&&r(a.innerHTML)){ri=ri||document.createElement("div"),ri.innerHTML=""+i+"";var f=ri.firstChild;while(a.firstChild)a.removeChild(a.firstChild);while(f.firstChild)a.appendChild(f.firstChild)}else if(i!==s[n])try{a[n]=i}catch($a){}}}}function ai(t,e){return!t.composing&&("OPTION"===t.tagName||si(t,e)||ci(t,e))}function si(t,e){var n=!0;try{n=document.activeElement!==t}catch($a){}return n&&t.value!==e}function ci(t,e){var n=t.value,r=t._vModifiers;if(o(r)){if(r.number)return v(n)!==v(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}var ui={create:ii,update:ii},fi=w((function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach((function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}})),e}));function li(t){var e=pi(t.style);return t.staticStyle?T(t.staticStyle,e):e}function pi(t){return Array.isArray(t)?R(t):"string"===typeof t?fi(t):t}function di(t,e){var n,r={};if(e){var o=t;while(o.componentInstance)o=o.componentInstance._vnode,o&&o.data&&(n=li(o.data))&&T(r,n)}(n=li(t.data))&&T(r,n);var i=t;while(i=i.parent)i.data&&(n=li(i.data))&&T(r,n);return r}var hi,vi=/^--/,yi=/\s*!important$/,mi=function(t,e,n){if(vi.test(e))t.style.setProperty(e,n);else if(yi.test(n))t.style.setProperty(k(e),n.replace(yi,""),"important");else{var r=_i(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(Ci).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function $i(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Ci).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";while(n.indexOf(r)>=0)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function Ai(t){if(t){if("object"===typeof t){var e={};return!1!==t.css&&T(e,ki(t.name||"v")),T(e,t),e}return"string"===typeof t?ki(t):void 0}}var ki=w((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),Oi=G&&!et,Si="transition",Ei="animation",ji="transition",Ti="transitionend",Ri="animation",Pi="animationend";Oi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ji="WebkitTransition",Ti="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ri="WebkitAnimation",Pi="webkitAnimationEnd"));var Ii=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Li(t){Ii((function(){Ii(t)}))}function Ni(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),xi(t,e))}function Di(t,e){t._transitionClasses&&g(t._transitionClasses,e),$i(t,e)}function Mi(t,e,n){var r=Ui(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===Si?Ti:Pi,c=0,u=function(){t.removeEventListener(s,f),n()},f=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c0&&(n=Si,f=a,l=i.length):e===Ei?u>0&&(n=Ei,f=u,l=c.length):(f=Math.max(a,u),n=f>0?a>u?Si:Ei:null,l=n?n===Si?i.length:c.length:0);var p=n===Si&&Fi.test(r[ji+"Property"]);return{type:n,timeout:f,propCount:l,hasTransform:p}}function Vi(t,e){while(t.length1}function Ki(t,e){!0!==e.data.show&&Hi(e)}var Xi=G?{create:Ki,activate:Ki,remove:function(t,e){!0!==t.data.show?qi(t,e):e()}}:{},Ji=[zo,Xo,oi,ui,wi,Xi],Gi=Ji.concat(Vo),Qi=Po({nodeOps:Ao,modules:Gi});et&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&ia(t,"input")}));var Yi={inserted:function(t,e,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?Ce(n,"postpatch",(function(){Yi.componentUpdated(t,e,n)})):Zi(t,e,n.context),t._vOptions=[].map.call(t.options,na)):("textarea"===n.tag||fo(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",ra),t.addEventListener("compositionend",oa),t.addEventListener("change",oa),et&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){Zi(t,e,n.context);var r=t._vOptions,o=t._vOptions=[].map.call(t.options,na);if(o.some((function(t,e){return!N(t,r[e])}))){var i=t.multiple?e.value.some((function(t){return ea(t,o)})):e.value!==e.oldValue&&ea(e.value,o);i&&ia(t,"change")}}}};function Zi(t,e,n){ta(t,e,n),(tt||nt)&&setTimeout((function(){ta(t,e,n)}),0)}function ta(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=t.options.length;s-1,a.selected!==i&&(a.selected=i);else if(N(na(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function ea(t,e){return e.every((function(e){return!N(e,t)}))}function na(t){return"_value"in t?t._value:t.value}function ra(t){t.target.composing=!0}function oa(t){t.target.composing&&(t.target.composing=!1,ia(t.target,"input"))}function ia(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function aa(t){return!t.componentInstance||t.data&&t.data.transition?t:aa(t.componentInstance._vnode)}var sa={bind:function(t,e,n){var r=e.value;n=aa(n);var o=n.data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,Hi(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value,o=e.oldValue;if(!r!==!o){n=aa(n);var i=n.data&&n.data.transition;i?(n.data.show=!0,r?Hi(n,(function(){t.style.display=t.__vOriginalDisplay})):qi(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none"}},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}},ca={model:Yi,show:sa},ua={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function fa(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?fa($n(e.children)):t}function la(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var i in o)e[x(i)]=o[i];return e}function pa(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function da(t){while(t=t.parent)if(t.data.transition)return!0}function ha(t,e){return e.key===t.key&&e.tag===t.tag}var va=function(t){return t.tag||Ie(t)},ya=function(t){return"show"===t.name},ma={name:"transition",props:ua,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(va),n.length)){0;var r=this.mode;0;var o=n[0];if(da(this.$vnode))return o;var i=fa(o);if(!i)return o;if(this._leaving)return pa(t,o);var a="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?a+"comment":a+i.tag:s(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var c=(i.data||(i.data={})).transition=la(this),u=this._vnode,f=fa(u);if(i.data.directives&&i.data.directives.some(ya)&&(i.data.show=!0),f&&f.data&&!ha(i,f)&&!Ie(f)&&(!f.componentInstance||!f.componentInstance._vnode.isComment)){var l=f.data.transition=T({},c);if("out-in"===r)return this._leaving=!0,Ce(l,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),pa(t,o);if("in-out"===r){if(Ie(i))return u;var p,d=function(){p()};Ce(c,"afterEnter",d),Ce(c,"enterCancelled",d),Ce(l,"delayLeave",(function(t){p=t}))}}return o}}},ga=T({tag:String,moveClass:String},ua);delete ga.mode;var _a={props:ga,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Rn(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=la(this),s=0;s=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}function j(t){return t.replace(/\/\//g,"/")}var T=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},R=Q,P=M,I=F,L=B,N=G,D=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function M(t,e){var n,r=[],o=0,i=0,a="",s=e&&e.delimiter||"/";while(null!=(n=D.exec(t))){var c=n[0],u=n[1],f=n.index;if(a+=t.slice(i,f),i=f+c.length,u)a+=u[1];else{var l=t[i],p=n[2],d=n[3],h=n[4],v=n[5],y=n[6],m=n[7];a&&(r.push(a),a="");var g=null!=p&&null!=l&&l!==p,_="+"===y||"*"===y,b="?"===y||"*"===y,w=n[2]||s,C=h||v;r.push({name:d||o++,prefix:p||"",delimiter:w,optional:b,repeat:_,partial:g,asterisk:!!m,pattern:C?q(C):m?".*":"[^"+H(w)+"]+?"})}}return i1||!$.length)return 0===$.length?t():t("span",{},$)}if("a"===this.tag)x.on=w,x.attrs={href:c,"aria-current":g};else{var A=st(this.$slots.default);if(A){A.isStatic=!1;var k=A.data=o({},A.data);for(var O in k.on=k.on||{},k.on){var S=k.on[O];O in w&&(k.on[O]=Array.isArray(S)?S:[S])}for(var E in w)E in k.on?k.on[E].push(w[E]):k.on[E]=_;var j=A.data.attrs=o({},A.data.attrs);j.href=c,j["aria-current"]=g}else x.on=w}return t(this.tag,x,this.$slots.default)}};function at(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)&&!t.defaultPrevented&&(void 0===t.button||0===t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function st(t){if(t)for(var e,n=0;n-1&&(s.params[l]=n.params[l]);return s.path=Z(u.path,s.params,'named route "'+c+'"'),p(u,s,a)}if(s.path){s.params={};for(var d=0;d=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}var Ft={redirected:2,aborted:4,cancelled:8,duplicated:16};function Ut(t,e){return qt(t,e,Ft.redirected,'Redirected when going from "'+t.fullPath+'" to "'+Wt(e)+'" via a navigation guard.')}function Vt(t,e){var n=qt(t,e,Ft.duplicated,'Avoided redundant navigation to current location: "'+t.fullPath+'".');return n.name="NavigationDuplicated",n}function Bt(t,e){return qt(t,e,Ft.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function Ht(t,e){return qt(t,e,Ft.aborted,'Navigation aborted from "'+t.fullPath+'" to "'+e.fullPath+'" via a navigation guard.')}function qt(t,e,n,r){var o=new Error(r);return o._isRouter=!0,o.from=t,o.to=e,o.type=n,o}var zt=["params","query","hash"];function Wt(t){if("string"===typeof t)return t;if("path"in t)return t.path;var e={};return zt.forEach((function(n){n in t&&(e[n]=t[n])})),JSON.stringify(e,null,2)}function Kt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Xt(t,e){return Kt(t)&&t._isRouter&&(null==e||t.type===e)}function Jt(t){return function(e,n,r){var o=!1,i=0,a=null;Gt(t,(function(t,e,n,s){if("function"===typeof t&&void 0===t.cid){o=!0,i++;var c,u=te((function(e){Zt(e)&&(e=e.default),t.resolved="function"===typeof e?e:et.extend(e),n.components[s]=e,i--,i<=0&&r()})),f=te((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Kt(t)?t:new Error(e),r(a))}));try{c=t(u,f)}catch(p){f(p)}if(c)if("function"===typeof c.then)c.then(u,f);else{var l=c.component;l&&"function"===typeof l.then&&l.then(u,f)}}})),o||r()}}function Gt(t,e){return Qt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Qt(t){return Array.prototype.concat.apply([],t)}var Yt="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;function Zt(t){return t.__esModule||Yt&&"Module"===t[Symbol.toStringTag]}function te(t){var e=!1;return function(){var n=[],r=arguments.length;while(r--)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var ee=function(t,e){this.router=t,this.base=ne(e),this.current=m,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function ne(t){if(!t)if(ut){var e=document.querySelector("base");t=e&&e.getAttribute("href")||"/",t=t.replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}function re(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=Lt&&n;r&&this.listeners.push(xt());var o=function(){var n=t.current,o=pe(t.base);t.current===m&&o===t._startLocation||t.transitionTo(o,(function(t){r&&$t(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){Nt(j(r.base+t.fullPath)),$t(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){Dt(j(r.base+t.fullPath)),$t(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(pe(this.base)!==this.current.fullPath){var e=j(this.base+this.current.fullPath);t?Nt(e):Dt(e)}},e.prototype.getCurrentLocation=function(){return pe(this.base)},e}(ee);function pe(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(j(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var de=function(t){function e(e,n,r){t.call(this,e,n),r&&he(this.base)||ve()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,n=e.options.scrollBehavior,r=Lt&&n;r&&this.listeners.push(xt());var o=function(){var e=t.current;ve()&&t.transitionTo(ye(),(function(n){r&&$t(t.router,n,e,!0),Lt||_e(n.fullPath)}))},i=Lt?"popstate":"hashchange";window.addEventListener(i,o),this.listeners.push((function(){window.removeEventListener(i,o)}))}},e.prototype.push=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){ge(t.fullPath),$t(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){_e(t.fullPath),$t(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;ye()!==e&&(t?ge(e):_e(e))},e.prototype.getCurrentLocation=function(){return ye()},e}(ee);function he(t){var e=pe(t);if(!/^\/#/.test(e))return window.location.replace(j(t+"/#"+e)),!0}function ve(){var t=ye();return"/"===t.charAt(0)||(_e("/"+t),!1)}function ye(){var t=window.location.href,e=t.indexOf("#");return e<0?"":(t=t.slice(e+1),t)}function me(t){var e=window.location.href,n=e.indexOf("#"),r=n>=0?e.slice(0,n):e;return r+"#"+t}function ge(t){Lt?Nt(me(t)):window.location.hash=t}function _e(t){Lt?Dt(me(t)):window.location.replace(me(t))}var be=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Xt(t,Ft.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(ee),we=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=ht(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!Lt&&!1!==t.fallback,this.fallback&&(e="hash"),ut||(e="abstract"),this.mode=e,e){case"history":this.history=new le(this,t.base);break;case"hash":this.history=new de(this,t.base,this.fallback);break;case"abstract":this.history=new be(this,t.base);break;default:0}},Ce={currentRoute:{configurable:!0}};function xe(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function $e(t,e,n){var r="hash"===n?"#"+e:e;return t?j(t+"/"+r):r}we.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Ce.currentRoute.get=function(){return this.history&&this.history.current},we.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof le||n instanceof de){var r=function(t){var r=n.current,o=e.options.scrollBehavior,i=Lt&&o;i&&"fullPath"in t&&$t(e,t,r,!1)},o=function(t){n.setupListeners(),r(t)};n.transitionTo(n.getCurrentLocation(),o,o)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},we.prototype.beforeEach=function(t){return xe(this.beforeHooks,t)},we.prototype.beforeResolve=function(t){return xe(this.resolveHooks,t)},we.prototype.afterEach=function(t){return xe(this.afterHooks,t)},we.prototype.onReady=function(t,e){this.history.onReady(t,e)},we.prototype.onError=function(t){this.history.onError(t)},we.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!==typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},we.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!==typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},we.prototype.go=function(t){this.history.go(t)},we.prototype.back=function(){this.go(-1)},we.prototype.forward=function(){this.go(1)},we.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},we.prototype.resolve=function(t,e,n){e=e||this.history.current;var r=tt(t,e,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath,a=this.history.base,s=$e(a,i,this.mode);return{location:r,route:o,href:s,normalizedTo:r,resolved:o}},we.prototype.getRoutes=function(){return this.matcher.getRoutes()},we.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==m&&this.history.transitionTo(this.history.getCurrentLocation())},we.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==m&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(we.prototype,Ce),we.install=ct,we.version="3.5.2",we.isNavigationFailure=Xt,we.NavigationFailureType=Ft,we.START_LOCATION=m,ut&&window.Vue&&window.Vue.use(we),e["a"]=we},c8ba:function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}t.exports=n}}]); \ No newline at end of file diff --git a/docs/js/documentation-topic.f5df163e.js b/docs/js/documentation-topic.f5df163e.js new file mode 100644 index 0000000..5c26bca --- /dev/null +++ b/docs/js/documentation-topic.f5df163e.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["documentation-topic"],{"0180":function(e,t,n){"use strict";n("8088")},"03dc":function(e,t,n){},"042f":function(e,t,n){},"0573":function(e,t,n){},"09db":function(e,t,n){"use strict";n("535f")},"0b72":function(e,t,n){},"0d16":function(e,t,n){"use strict";n("10da")},"10da":function(e,t,n){},"179d":function(e,t,n){"use strict";n("90de")},"1a47":function(e,t,n){"use strict";n("042f")},"1d1c":function(e,t,n){"use strict";n("57e3")},"1eff":function(e,t,n){"use strict";n("82d0")},"22f6":function(e,t,n){},"243c":function(e,t,n){"use strict";n("7010")},2521:function(e,t,n){},"252a":function(e,t,n){"use strict";n("8fed")},2822:function(e,t,n){"use strict";n("2521")},2995:function(e,t,n){"use strict";n("8498")},"2f04":function(e,t,n){},"2f87":function(e,t,n){"use strict";n("b0a0")},"374e":function(e,t,n){"use strict";n("0b72")},3825:function(e,t,n){},"395c":function(e,t,n){},"3b96":function(e,t,n){"use strict";var a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"curly-brackets-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M9.987 14h-0.814v-0.916h0.36c0.137 0 0.253-0.038 0.349-0.116 0.099-0.080 0.179-0.188 0.239-0.318 0.064-0.134 0.11-0.298 0.139-0.483 0.031-0.186 0.045-0.38 0.045-0.58v-2.115c0-0.417 0.046-0.781 0.139-1.083 0.092-0.3 0.2-0.554 0.322-0.754 0.127-0.203 0.246-0.353 0.366-0.458 0.087-0.076 0.155-0.131 0.207-0.169-0.052-0.037-0.12-0.093-0.207-0.167-0.12-0.105-0.239-0.255-0.366-0.459-0.122-0.2-0.23-0.453-0.322-0.754-0.093-0.3-0.139-0.665-0.139-1.082v-2.13c0-0.199-0.014-0.392-0.045-0.572-0.029-0.182-0.076-0.345-0.139-0.483-0.060-0.137-0.141-0.246-0.239-0.328-0.095-0.076-0.212-0.115-0.349-0.115h-0.36v-0.916h0.814c0.442 0 0.788 0.18 1.030 0.538 0.238 0.352 0.358 0.826 0.358 1.407v2.236c0 0.3 0.015 0.597 0.044 0.886 0.030 0.287 0.086 0.544 0.164 0.765 0.077 0.216 0.184 0.392 0.318 0.522 0.129 0.124 0.298 0.188 0.503 0.188h0.058v0.916h-0.058c-0.206 0-0.374 0.064-0.503 0.188-0.134 0.129-0.242 0.305-0.318 0.521-0.078 0.223-0.134 0.48-0.164 0.766-0.029 0.288-0.044 0.587-0.044 0.884v2.236c0 0.582-0.12 1.055-0.358 1.409-0.242 0.358-0.588 0.538-1.030 0.538z"}}),n("path",{attrs:{d:"M4.827 14h-0.814c-0.442 0-0.788-0.18-1.030-0.538-0.238-0.352-0.358-0.825-0.358-1.409v-2.221c0-0.301-0.015-0.599-0.045-0.886-0.029-0.287-0.085-0.544-0.163-0.764-0.077-0.216-0.184-0.393-0.318-0.522-0.131-0.127-0.296-0.188-0.503-0.188h-0.058v-0.916h0.058c0.208 0 0.373-0.063 0.503-0.188 0.135-0.129 0.242-0.304 0.318-0.522 0.078-0.22 0.134-0.477 0.163-0.765 0.030-0.286 0.045-0.585 0.045-0.886v-2.251c0-0.582 0.12-1.055 0.358-1.407 0.242-0.358 0.588-0.538 1.030-0.538h0.814v0.916h-0.36c-0.138 0-0.252 0.038-0.349 0.116-0.099 0.079-0.179 0.189-0.239 0.327-0.064 0.139-0.11 0.302-0.141 0.483-0.029 0.18-0.044 0.373-0.044 0.572v2.13c0 0.417-0.046 0.782-0.138 1.082-0.092 0.302-0.201 0.556-0.324 0.754-0.123 0.201-0.246 0.356-0.366 0.459-0.086 0.074-0.153 0.13-0.206 0.167 0.052 0.038 0.12 0.093 0.206 0.169 0.12 0.103 0.243 0.258 0.366 0.458s0.232 0.453 0.324 0.754c0.092 0.302 0.138 0.666 0.138 1.083v2.115c0 0.2 0.015 0.394 0.044 0.58 0.030 0.186 0.077 0.349 0.139 0.482 0.062 0.132 0.142 0.239 0.241 0.32 0.096 0.079 0.21 0.116 0.349 0.116h0.36z"}})])},r=[],s=n("be08"),i={name:"CurlyBracketsIcon",components:{SVGIcon:s["a"]}},o=i,c=n("2877"),l=Object(c["a"])(o,a,r,!1,null,null,null);t["a"]=l.exports},"3d27":function(e,t,n){"use strict";n("8a0a")},"3dca":function(e,t,n){"use strict";n("395c")},4340:function(e,t,n){"use strict";n("a378")},4966:function(e,t,n){"use strict";n("d1af")},"51be":function(e,t,n){},5245:function(e,t,n){"use strict";n("c47b")},"535f":function(e,t,n){},"54bb":function(e,t,n){"use strict";n("e2d5")},"57e3":function(e,t,n){},"61ca":function(e,t,n){"use strict";n("82be")},"64fc":function(e,t,n){},"66c9":function(e,t,n){"use strict";t["a"]={state:{codeColors:null},reset(){this.state.codeColors=null},updateCodeColors(e){const t=e=>e?`rgba(${e.red}, ${e.green}, ${e.blue}, ${e.alpha})`:null;this.state.codeColors=Object.entries(e).reduce((e,[n,a])=>({...e,[n]:t(a)}),{})}}},"67dc":function(e,t,n){"use strict";n("ba38")},"6c70":function(e,t,n){},"6e90":function(e,t,n){},7010:function(e,t,n){},"719b":function(e,t,n){"use strict";n("8b3c")},"76d4":function(e,t,n){"use strict";n("9b11")},"78d5":function(e,t,n){"use strict";n("c9f3")},8088:function(e,t,n){},"812f":function(e,t,n){"use strict";n("a396")},"813b":function(e,t,n){"use strict";n("0573")},"82be":function(e,t,n){},"82d0":function(e,t,n){},"83f0":function(e,t,n){},8427:function(e,t,n){},8498:function(e,t,n){},8590:function(e,t,n){"use strict";var a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{style:e.codeStyle},[e._t("default")],2)},r=[],s=n("66c9");const i=0,o=255;function c(e){const t=e.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d+\.?\d*|\.\d+)\s*\)/);if(!t)throw new Error("invalid rgba() input");const n=10;return{r:parseInt(t[1],n),g:parseInt(t[2],n),b:parseInt(t[3],n),a:parseFloat(t[4])}}function l(e){const{r:t,g:n,b:a}=c(e);return.2126*t+.7152*n+.0722*a}function u(e,t){const n=Math.round(o*t),a=c(e),{a:r}=a,[s,l,u]=[a.r,a.g,a.b].map(e=>Math.max(i,Math.min(o,e+n)));return`rgba(${s}, ${l}, ${u}, ${r})`}function d(e,t){return u(e,t)}function p(e,t){return u(e,-1*t)}var h={name:"CodeTheme",data(){return{codeThemeState:s["a"].state}},computed:{codeStyle(){const{codeColors:e}=this.codeThemeState;return e?{"--text":e.text,"--background":e.background,"--line-highlight":e.lineHighlight,"--url":e.commentURL,"--syntax-comment":e.comment,"--syntax-quote":e.comment,"--syntax-keyword":e.keyword,"--syntax-literal":e.keyword,"--syntax-selector-tag":e.keyword,"--syntax-string":e.stringLiteral,"--syntax-bullet":e.stringLiteral,"--syntax-meta":e.keyword,"--syntax-number":e.stringLiteral,"--syntax-symbol":e.stringLiteral,"--syntax-tag":e.stringLiteral,"--syntax-attr":e.typeAnnotation,"--syntax-built_in":e.typeAnnotation,"--syntax-builtin-name":e.typeAnnotation,"--syntax-class":e.typeAnnotation,"--syntax-params":e.typeAnnotation,"--syntax-section":e.typeAnnotation,"--syntax-title":e.typeAnnotation,"--syntax-type":e.typeAnnotation,"--syntax-attribute":e.keyword,"--syntax-identifier":e.text,"--syntax-subst":e.text,"--color-syntax-param-internal-name":this.internalParamNameColor}:null},internalParamNameColor(){const{background:e,text:t}=this.codeThemeState.codeColors;try{const n=l(e),a=n({"~0":"~","~1":"/"}[e]||e))}function*o(e){const t=1;if(e.lengtht)throw new Error("invalid array index "+e);return n}function*h(e,t,n={strict:!1}){let a=e;for(const r of o(t)){if(n.strict&&!Object.prototype.hasOwnProperty.call(a,r))throw new d(t);a=a[r],yield{node:a,token:r}}}function m(e,t){let n=e;for(const{node:a}of h(e,t,{strict:!0}))n=a;return n}function f(e,t,n){let a=null,r=e,s=null;for(const{node:o,token:c}of h(e,t))a=r,r=o,s=c;if(!a)throw new d(t);if(Array.isArray(a))try{const e=p(s,a);a.splice(e,0,n)}catch(i){throw new d(t)}else Object.assign(a,{[s]:n});return e}function y(e,t){let n=null,a=e,r=null;for(const{node:i,token:o}of h(e,t))n=a,a=i,r=o;if(!n)throw new d(t);if(Array.isArray(n))try{const e=p(r,n);n.splice(e,1)}catch(s){throw new d(t)}else{if(!a)throw new d(t);delete n[r]}return e}function g(e,t,n){return y(e,t),f(e,t,n),e}function b(e,t,n){const a=m(e,t);return y(e,t),f(e,n,a),e}function v(e,t,n){return f(e,n,m(e,t)),e}function C(e,t,n){function a(e,t){const n=typeof e,r=typeof t;if(n!==r)return!1;switch(n){case u:{const n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every((n,s)=>n===r[s]&&a(e[n],t[n]))}default:return e===t}}const r=m(e,t);if(!a(n,r))throw new Error("test failed");return e}const _={add:(e,{path:t,value:n})=>f(e,t,n),copy:(e,{from:t,path:n})=>v(e,t,n),move:(e,{from:t,path:n})=>b(e,t,n),remove:(e,{path:t})=>y(e,t),replace:(e,{path:t,value:n})=>g(e,t,n),test:(e,{path:t,value:n})=>C(e,t,n)};function T(e,{op:t,...n}){const a=_[t];if(!a)throw new Error("unknown operation");return a(e,n)}function k(e,t){return t.reduce(T,e)}var S=n("25a9"),x=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"doc-topic"},[e.isTargetIDE?e._e():n("Nav",{attrs:{title:e.title,diffAvailability:e.diffAvailability,interfaceLanguage:e.interfaceLanguage,objcPath:e.objcPath,swiftPath:e.swiftPath,parentTopicIdentifiers:e.parentTopicIdentifiers,isSymbolDeprecated:e.isSymbolDeprecated,isSymbolBeta:e.isSymbolBeta,currentTopicTags:e.tags}}),n("main",{staticClass:"main",attrs:{id:"main",role:"main",tabindex:"0"}},[e._t("above-title"),n("Title",{attrs:{eyebrow:e.roleHeading}},[e._v(e._s(e.title))]),n("div",{staticClass:"container content-grid",class:{"full-width":e.hideSummary}},[n("Description",{attrs:{hasOverview:e.hasOverview}},[e.abstract?n("Abstract",{attrs:{content:e.abstract}}):e._e(),e.isRequirement?n("RequirementMetadata",{attrs:{defaultImplementationsCount:e.defaultImplementationsCount}}):e._e(),e.deprecationSummary&&e.deprecationSummary.length?n("Aside",{attrs:{kind:"deprecated"}},[n("ContentNode",{attrs:{content:e.deprecationSummary}})],1):e._e(),e.downloadNotAvailableSummary&&e.downloadNotAvailableSummary.length?n("Aside",{attrs:{kind:"note"}},[n("ContentNode",{attrs:{content:e.downloadNotAvailableSummary}})],1):e._e(),e.sampleCodeDownload?n("DownloadButton",{attrs:{action:e.sampleCodeDownload.action}}):e._e()],1),e.hideSummary?e._e():n("Summary",[e.shouldShowLanguageSwitcher?n("LanguageSwitcher",{attrs:{interfaceLanguage:e.interfaceLanguage,objcPath:e.objcPath,swiftPath:e.swiftPath}}):e._e(),e.platforms?n("Availability",{attrs:{platforms:e.platforms}}):e._e(),e.modules?n("TechnologyList",{attrs:{technologies:e.modules}}):e._e(),e.extendsTechnology?n("TechnologyList",{staticClass:"extends-technology",attrs:{title:"Extends",technologies:[{name:e.extendsTechnology}]}}):e._e(),e.onThisPageSections.length>1?n("OnThisPageNav",{attrs:{sections:e.onThisPageSections}}):e._e()],1),e.primaryContentSections&&e.primaryContentSections.length?n("PrimaryContent",{attrs:{conformance:e.conformance,sections:e.primaryContentSections}}):e._e()],1),e.topicSections?n("Topics",{attrs:{sections:e.topicSections,isSymbolDeprecated:e.isSymbolDeprecated,isSymbolBeta:e.isSymbolBeta}}):e._e(),e.defaultImplementationsSections?n("DefaultImplementations",{attrs:{sections:e.defaultImplementationsSections,isSymbolDeprecated:e.isSymbolDeprecated,isSymbolBeta:e.isSymbolBeta}}):e._e(),e.relationshipsSections?n("Relationships",{attrs:{sections:e.relationshipsSections}}):e._e(),e.seeAlsoSections?n("SeeAlso",{attrs:{sections:e.seeAlsoSections}}):e._e(),!e.isTargetIDE&&e.hasBetaContent?n("BetaLegalText"):e._e()],2)],1)},O=[],j=n("8649"),P=n("d8ce"),A=n("6842"),B=n("e3ab"),w=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("NavBase",{staticClass:"documentation-nav",attrs:{breakpoint:e.BreakpointName.medium,hasOverlay:!1,hasSolidBackground:"",hasNoBorder:e.hasNoBorder,isDark:e.isDark,hasFullWidthBorder:"","aria-label":"API Reference"}},[n("template",{slot:"default"},[e._t("title",(function(){return[e.rootLink?n("router-link",{staticClass:"nav-title-link",attrs:{to:e.rootLink}},[e._v(" Documentation ")]):n("span",{staticClass:"nav-title-link inactive"},[e._v("Documentation")])]}),null,{rootLink:e.rootLink,linkClass:"nav-title-link",inactiveClass:"inactive"})],2),n("template",{slot:"tray"},[n("Hierarchy",{attrs:{currentTopicTitle:e.title,isSymbolDeprecated:e.isSymbolDeprecated,isSymbolBeta:e.isSymbolBeta,parentTopicIdentifiers:e.hierarchyItems,currentTopicTags:e.currentTopicTags}}),e._t("tray-after",null,null,{breadcrumbCount:e.breadcrumbCount})],2),n("template",{slot:"after-content"},[e._t("after-content")],2)],2)},q=[],D=n("cbcf"),I=n("63b8"),L=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("NavMenuItems",{staticClass:"hierarchy",class:{"has-badge":e.hasBadge},attrs:{"aria-label":"Breadcrumbs"}},[e._l(e.collapsibleItems,(function(t){return n("HierarchyItem",{key:t.title,attrs:{isCollapsed:e.shouldCollapseItems,url:e.addQueryParamsToUrl(t.url)}},[e._v(" "+e._s(t.title)+" ")])})),e.shouldCollapseItems?n("HierarchyCollapsedItems",{attrs:{topics:e.collapsibleItems}}):e._e(),e._l(e.nonCollapsibleItems,(function(t){return n("HierarchyItem",{key:t.title,attrs:{url:e.addQueryParamsToUrl(t.url)}},[e._v(" "+e._s(t.title)+" ")])})),n("HierarchyItem",[e._v(" "+e._s(e.currentTopicTitle)+" "),n("template",{slot:"tags"},[e.isSymbolDeprecated?n("Badge",{attrs:{variant:"deprecated"}}):e.isSymbolBeta?n("Badge",{attrs:{variant:"beta"}}):e._e(),e._l(e.currentTopicTags,(function(t){return n("Badge",{key:t.type+"-"+t.text,attrs:{variant:t.type}},[e._v(" "+e._s(t.text)+" ")])}))],2)],2)],2)},$=[],E=n("d26a"),M=n("9b30"),R=function(){var e,t=this,n=t.$createElement,a=t._self._c||n;return a("span",{staticClass:"badge",class:(e={},e["badge-"+t.variant]=t.variant,e),attrs:{role:"presentation"}},[t._t("default",(function(){return[t._v(t._s(t.text))]}))],2)},N=[];const V={beta:"Beta",deprecated:"Deprecated"};var H={name:"Badge",props:{variant:{type:String,default:()=>""}},computed:{text:({variant:e})=>V[e]}},z=H,W=(n("3d27"),n("2877")),G=Object(W["a"])(z,R,N,!1,null,"2bfc9463",null),K=G.exports,F=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"hierarchy-collapsed-items"},[n("InlineChevronRightIcon",{staticClass:"hierarchy-item-icon icon-inline"}),n("button",{ref:"btn",staticClass:"toggle",class:{focused:!e.collapsed},on:{click:e.toggleCollapsed}},[n("span",{staticClass:"indicator"},[n("EllipsisIcon",{staticClass:"icon-inline toggle-icon"})],1)]),n("ul",{ref:"dropdown",staticClass:"dropdown",class:{collapsed:e.collapsed}},e._l(e.topicsWithUrls,(function(t){return n("li",{key:t.title,staticClass:"dropdown-item"},[n("router-link",{staticClass:"nav-menu-link",attrs:{to:t.url}},[e._v(e._s(t.title))])],1)})),0)],1)},U=[],Q=n("34b0"),J=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"ellipsis-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"m12.439 7.777v-1.554h-1.554v1.554zm-4.662 0v-1.554h-1.554v1.554zm-4.662 0v-1.554h-1.554v1.554z"}})])},X=[],Y=n("be08"),Z={name:"EllipsisIcon",components:{SVGIcon:Y["a"]}},ee=Z,te=Object(W["a"])(ee,J,X,!1,null,null,null),ne=te.exports,ae={name:"HierarchyCollapsedItems",components:{EllipsisIcon:ne,InlineChevronRightIcon:Q["a"]},data:()=>({collapsed:!0}),props:{topics:{type:Array,required:!0}},watch:{collapsed(e,t){t&&!e?document.addEventListener("click",this.handleDocumentClick,!1):!t&&e&&document.removeEventListener("click",this.handleDocumentClick,!1)}},beforeDestroy(){document.removeEventListener("click",this.handleDocumentClick,!1)},computed:{topicsWithUrls:({$route:e,topics:t})=>t.map(t=>({...t,url:Object(E["b"])(t.url,e.query)}))},methods:{handleDocumentClick(e){const{target:t}=e,{collapsed:n,$refs:{btn:a,dropdown:r}}=this,s=!a.contains(t)&&!r.contains(t);!n&&s&&(this.collapsed=!0)},toggleCollapsed(){this.collapsed=!this.collapsed}}},re=ae,se=(n("78d5"),Object(W["a"])(re,F,U,!1,null,"45c48d1a",null)),ie=se.exports,oe=function(e,t){var n=t._c;return n(t.$options.components.NavMenuItemBase,{tag:"component",staticClass:"hierarchy-item",class:{collapsed:t.props.isCollapsed}},[n(t.$options.components.InlineChevronRightIcon,{tag:"component",staticClass:"hierarchy-item-icon icon-inline"}),t.props.url?n("router-link",{staticClass:"parent item nav-menu-link",attrs:{to:t.props.url}},[t._t("default")],2):[n("span",{staticClass:"current item"},[t._t("default")],2),t._t("tags")]],2)},ce=[],le=n("863d"),ue={name:"HierarchyItem",components:{NavMenuItemBase:le["a"],InlineChevronRightIcon:Q["a"]},props:{isCollapsed:Boolean,url:{type:String,required:!1}}},de=ue,pe=(n("252a"),Object(W["a"])(de,oe,ce,!0,null,"57182fdb",null)),he=pe.exports;const me=3;var fe={name:"Hierarchy",components:{Badge:K,NavMenuItems:M["a"],HierarchyCollapsedItems:ie,HierarchyItem:he},inject:{references:{default:()=>({})}},props:{isSymbolDeprecated:Boolean,isSymbolBeta:Boolean,currentTopicTitle:{type:String,required:!0},parentTopicIdentifiers:{type:Array,default:()=>[]},currentTopicTags:{type:Array,default:()=>[]}},computed:{parentTopics(){return this.parentTopicIdentifiers.map(e=>{const{title:t,url:n}=this.references[e];return{title:t,url:n}})},shouldCollapseItems(){return this.parentTopics.length+1>me},collapsibleItems:({parentTopics:e})=>e.slice(0,-1),nonCollapsibleItems:({parentTopics:e})=>e.slice(-1),hasBadge:({isSymbolDeprecated:e,isSymbolBeta:t,currentTopicTags:n})=>e||t||n.length},methods:{addQueryParamsToUrl(e){return Object(E["b"])(e,this.$route.query)}}},ye=fe,ge=(n("b1e0"),Object(W["a"])(ye,L,$,!1,null,"20e91056",null)),be=ge.exports,ve={name:"DocumentationNav",components:{NavBase:D["a"],Hierarchy:be},props:{title:{type:String,required:!1},parentTopicIdentifiers:{type:Array,required:!1},isSymbolBeta:{type:Boolean,required:!1},isSymbolDeprecated:{type:Boolean,required:!1},isDark:{type:Boolean,default:!1},hasNoBorder:{type:Boolean,default:!1},currentTopicTags:{type:Array,required:!0}},inject:{references:{default:()=>({})}},computed:{BreakpointName:()=>I["a"],breadcrumbCount:({hierarchyItems:e})=>e.length+1,rootHierarchyReference:({parentTopicIdentifiers:e,references:t})=>t[e[0]]||{},isRootTechnologyLink:({rootHierarchyReference:{kind:e}})=>"technologies"===e,rootLink:({isRootTechnologyLink:e,rootHierarchyReference:t,$route:n})=>e?{path:t.url,query:n.query}:null,hierarchyItems:({parentTopicIdentifiers:e,isRootTechnologyLink:t})=>t?e.slice(1):e}},Ce=ve,_e=(n("243c"),Object(W["a"])(Ce,w,q,!1,null,"324c15b2",null)),Te=_e.exports,ke=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"betainfo"},[n("div",{staticClass:"betainfo-container"},[n("GridRow",[n("GridColumn",{attrs:{span:{large:8,medium:8,small:12},isCentered:{large:!0,medium:!0,small:!0}}},[n("p",{staticClass:"betainfo-label"},[e._v("Beta Software")]),n("div",{staticClass:"betainfo-content"},[e._t("content",(function(){return[n("p",[e._v("This documentation refers to beta software and may be changed.")])]}))],2),e._t("after")],2)],1)],1)])},Se=[],xe=n("0f00"),Oe=n("620a"),je={name:"BetaLegalText",components:{GridColumn:Oe["a"],GridRow:xe["a"]}},Pe=je,Ae=(n("99a2"),Object(W["a"])(Pe,ke,Se,!1,null,"4edf30f4",null)),Be=Ae.exports,we=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Section",{staticClass:"language",attrs:{role:"complementary","aria-label":"Language"}},[n("Title",[e._v("Language")]),n("LanguageSwitcherLink",{staticClass:"language-option swift",class:{active:e.swift.active},attrs:{url:e.swift.active?null:e.swift.url},on:{click:function(t){return e.chooseLanguage(e.swift)}}},[e._v(e._s(e.swift.name))]),n("LanguageSwitcherLink",{staticClass:"language-option objc",class:{active:e.objc.active},attrs:{url:e.objc.active?null:e.objc.url},on:{click:function(t){return e.chooseLanguage(e.objc)}}},[e._v(e._s(e.objc.name))])],1)},qe=[],De=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.url?n("a",{attrs:{href:e.url},on:{click:function(t){return t.preventDefault(),e.$emit("click")}}},[e._t("default")],2):n("span",[e._t("default")],2)},Ie=[],Le={name:"LanguageSwitcherLink",props:{url:[String,Object]}},$e=Le,Ee=Object(W["a"])($e,De,Ie,!1,null,null,null),Me=Ee.exports,Re=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"summary-section"},[e._t("default")],2)},Ne=[],Ve={name:"Section"},He=Ve,ze=(n("c292"),Object(W["a"])(He,Re,Ne,!1,null,"6185a550",null)),We=ze.exports,Ge=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("p",{staticClass:"title"},[e._t("default")],2)},Ke=[],Fe={name:"Title"},Ue=Fe,Qe=(n("4966"),Object(W["a"])(Ue,Ge,Ke,!1,null,"b903be56",null)),Je=Qe.exports,Xe={name:"LanguageSwitcher",components:{LanguageSwitcherLink:Me,Section:We,Title:Je},inject:{isTargetIDE:{default:()=>!1},store:{default(){return{setPreferredLanguage(){}}}}},props:{interfaceLanguage:{type:String,required:!0},objcPath:{type:String,required:!0},swiftPath:{type:String,required:!0}},computed:{objc:({interfaceLanguage:e,normalizePath:t,objcPath:n,$route:{query:a}})=>({...j["a"].objectiveC,active:j["a"].objectiveC.key.api===e,url:Object(E["b"])(t(n),{...a,language:j["a"].objectiveC.key.url})}),swift:({interfaceLanguage:e,normalizePath:t,swiftPath:n,$route:{query:a}})=>({...j["a"].swift,active:j["a"].swift.key.api===e,url:Object(E["b"])(t(n),{...a,language:void 0})})},methods:{chooseLanguage(e){this.isTargetIDE||this.store.setPreferredLanguage(e.key.url),this.$router.push(e.url)},normalizePath(e){return e.startsWith("/")?e:"/"+e}}},Ye=Xe,Ze=(n("0180"),Object(W["a"])(Ye,we,qe,!1,null,"0836085b",null)),et=Ze.exports,tt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentNode",e._b({staticClass:"abstract"},"ContentNode",e.$props,!1))},nt=[],at=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("BaseContentNode",e._b({},"BaseContentNode",e.$props,!1))},rt=[],st=n("5677"),it={name:"ContentNode",components:{BaseContentNode:st["a"]},props:st["a"].props,methods:st["a"].methods,BlockType:st["a"].BlockType,InlineType:st["a"].InlineType},ot=it,ct=(n("c18a"),Object(W["a"])(ot,at,rt,!1,null,"002affcc",null)),lt=ct.exports,ut={name:"Abstract",components:{ContentNode:lt},props:lt.props},dt=ut,pt=(n("374e"),Object(W["a"])(dt,tt,nt,!1,null,"702ec04e",null)),ht=pt.exports,mt=n("c081"),ft=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("TopicsTable",{attrs:{anchor:"default-implementations",title:"Default Implementations",isSymbolDeprecated:e.isSymbolDeprecated,isSymbolBeta:e.isSymbolBeta,sections:e.sections,wrapTitle:!0}})},yt=[],gt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentTable",{attrs:{anchor:e.anchor,title:e.title}},e._l(e.sectionsWithTopics,(function(t){return n("ContentTableSection",{key:t.title,attrs:{title:t.title}},[e.wrapTitle?n("template",{slot:"title"},[n("WordBreak",{staticClass:"title",attrs:{tag:"h3"}},[e._v(" "+e._s(t.title)+" ")])],1):e._e(),t.abstract?n("template",{slot:"abstract"},[n("ContentNode",{attrs:{content:t.abstract}})],1):e._e(),t.discussion?n("template",{slot:"discussion"},[n("ContentNode",{attrs:{content:t.discussion.content}})],1):e._e(),e._l(t.topics,(function(t){return n("TopicsLinkBlock",{key:t.identifier,staticClass:"topic",attrs:{topic:t,isSymbolDeprecated:e.isSymbolDeprecated,isSymbolBeta:e.isSymbolBeta}})}))],2)})),1)},bt=[],vt=n("7b1f"),Ct=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("OnThisPageSection",{staticClass:"contenttable alt-light",attrs:{anchor:e.anchor,title:e.title}},[n("div",{staticClass:"container"},[n("h2",{staticClass:"title"},[e._v(e._s(e.title))]),e._t("default")],2)])},_t=[],Tt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("section",{attrs:{id:e.anchor}},[e._t("default")],2)},kt=[],St={name:"OnThisPageSection",inject:{store:{default(){return{addOnThisPageSection(){}}}}},props:{anchor:{type:String,required:!0},title:{type:String,required:!0}},created(){this.store.addOnThisPageSection({anchor:this.anchor,title:this.title})}},xt=St,Ot=Object(W["a"])(xt,Tt,kt,!1,null,null,null),jt=Ot.exports,Pt={name:"ContentTable",components:{OnThisPageSection:jt},props:{anchor:{type:String,required:!0},title:{type:String,required:!0}}},At=Pt,Bt=(n("61ca"),Object(W["a"])(At,Ct,_t,!1,null,"1a780186",null)),wt=Bt.exports,qt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Row",{staticClass:"contenttable-section"},[n("Column",{staticClass:"section-title",attrs:{span:e.span.title}},[e._t("title",(function(){return[n("h3",{staticClass:"title"},[e._v(e._s(e.title))])]}))],2),n("Column",{staticClass:"section-content",attrs:{span:e.span.content}},[e._t("abstract"),e._t("discussion"),e._t("default")],2)],1)},Dt=[],It={name:"ContentTableSection",components:{Column:Oe["a"],Row:xe["a"]},props:{title:{type:String,required:!0}},computed:{span(){return{title:{large:3,medium:3,small:12},content:{large:9,medium:9,small:12}}}}},Lt=It,$t=(n("813b"),Object(W["a"])(Lt,qt,Dt,!1,null,"bedf02be",null)),Et=$t.exports,Mt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"link-block",class:e.linkBlockClasses},[n(e.linkComponent,e._b({ref:"apiChangesDiff",tag:"component",staticClass:"link",class:e.linkClasses},"component",e.linkProps,!1),[e.topic.role?n("TopicLinkBlockIcon",{attrs:{role:e.topic.role}}):e._e(),e.topic.fragments?n("DecoratedTopicTitle",{attrs:{tokens:e.topic.fragments}}):n("WordBreak",{attrs:{tag:e.titleTag}},[e._v(e._s(e.topic.title))]),e.change?n("span",{staticClass:"visuallyhidden"},[e._v("- "+e._s(e.changeName))]):e._e()],1),e.hasAbstractElements?n("div",{staticClass:"abstract"},[e.topic.abstract?n("ContentNode",{attrs:{content:e.topic.abstract}}):e._e(),e.topic.ideTitle?n("div",{staticClass:"topic-keyinfo"},[e.topic.titleStyle===e.titleStyles.title?[n("strong",[e._v("Key:")]),e._v(" "+e._s(e.topic.name)+" ")]:e.topic.titleStyle===e.titleStyles.symbol?[n("strong",[e._v("Name:")]),e._v(" "+e._s(e.topic.ideTitle)+" ")]:e._e()],2):e._e(),e.topic.required||e.topic.defaultImplementations?n("RequirementMetadata",{staticClass:"topic-required",attrs:{defaultImplementationsCount:e.topic.defaultImplementations}}):e._e(),e.topic.conformance?n("ConditionalConstraints",{attrs:{constraints:e.topic.conformance.constraints,prefix:e.topic.conformance.availabilityPrefix}}):e._e()],1):e._e(),e.showDeprecatedBadge?n("Badge",{attrs:{variant:"deprecated"}}):e.showBetaBadge?n("Badge",{attrs:{variant:"beta"}}):e._e(),e._l(e.tags,(function(t){return n("Badge",{key:t.type+"-"+t.text,attrs:{variant:t.type}},[e._v(" "+e._s(t.text)+" ")])}))],2)},Rt=[],Nt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.icon?n("div",{staticClass:"topic-icon-wrapper"},[n(e.icon,{tag:"component",staticClass:"topic-icon"})],1):e._e()},Vt=[],Ht=n("a9f1"),zt=n("3b96"),Wt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"api-reference-icon",attrs:{viewBox:"0 0 14 14"}},[n("title",[e._v("API Reference")]),n("path",{attrs:{d:"M13 1v12h-12v-12zM12 2h-10v10h10z"}}),n("path",{attrs:{d:"M3 4h8v1h-8z"}}),n("path",{attrs:{d:"M3 6.5h8v1h-8z"}}),n("path",{attrs:{d:"M3 9h8v1h-8z"}})])},Gt=[],Kt={name:"APIReferenceIcon",components:{SVGIcon:Y["a"]}},Ft=Kt,Ut=Object(W["a"])(Ft,Wt,Gt,!1,null,null,null),Qt=Ut.exports,Jt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{attrs:{viewBox:"0 0 14 14"}},[n("title",[e._v("Web Service Endpoint")]),n("path",{attrs:{d:"M4.052 8.737h-1.242l-1.878 5.263h1.15l0.364-1.081h1.939l0.339 1.081h1.193zM2.746 12.012l0.678-2.071 0.653 2.071z"}}),n("path",{attrs:{d:"M11.969 8.737h1.093v5.263h-1.093v-5.263z"}}),n("path",{attrs:{d:"M9.198 8.737h-2.295v5.263h1.095v-1.892h1.12c0.040 0.003 0.087 0.004 0.134 0.004 0.455 0 0.875-0.146 1.217-0.394l-0.006 0.004c0.296-0.293 0.48-0.699 0.48-1.148 0-0.060-0.003-0.118-0.010-0.176l0.001 0.007c0.003-0.039 0.005-0.085 0.005-0.131 0-0.442-0.183-0.842-0.476-1.128l-0-0c-0.317-0.256-0.724-0.41-1.168-0.41-0.034 0-0.069 0.001-0.102 0.003l0.005-0zM9.628 11.014c-0.15 0.118-0.341 0.188-0.548 0.188-0.020 0-0.040-0.001-0.060-0.002l0.003 0h-1.026v-1.549h1.026c0.017-0.001 0.037-0.002 0.058-0.002 0.206 0 0.396 0.066 0.551 0.178l-0.003-0.002c0.135 0.13 0.219 0.313 0.219 0.515 0 0.025-0.001 0.050-0.004 0.074l0-0.003c0.002 0.020 0.003 0.044 0.003 0.068 0 0.208-0.083 0.396-0.219 0.534l0-0z"}}),n("path",{attrs:{d:"M13.529 4.981c0-1.375-1.114-2.489-2.489-2.49h-0l-0.134 0.005c-0.526-1.466-1.903-2.496-3.522-2.496-0.892 0-1.711 0.313-2.353 0.835l0.007-0.005c-0.312-0.243-0.709-0.389-1.14-0.389-1.030 0-1.865 0.834-1.866 1.864v0c0 0.001 0 0.003 0 0.004 0 0.123 0.012 0.242 0.036 0.358l-0.002-0.012c-0.94 0.37-1.593 1.27-1.593 2.323 0 1.372 1.11 2.485 2.482 2.49h8.243c1.306-0.084 2.333-1.164 2.333-2.484 0-0.001 0-0.002 0-0.003v0zM11.139 6.535h-8.319c-0.799-0.072-1.421-0.739-1.421-1.551 0-0.659 0.41-1.223 0.988-1.45l0.011-0.004 0.734-0.28-0.148-0.776-0.012-0.082v-0.088c0-0 0-0.001 0-0.001 0-0.515 0.418-0.933 0.933-0.933 0.216 0 0.416 0.074 0.574 0.197l-0.002-0.002 0.584 0.453 0.575-0.467 0.169-0.127c0.442-0.306 0.991-0.489 1.581-0.489 1.211 0 2.243 0.769 2.633 1.846l0.006 0.019 0.226 0.642 0.814-0.023 0.131 0.006c0.805 0.067 1.432 0.736 1.432 1.552 0 0.836-0.659 1.518-1.486 1.556l-0.003 0z"}})])},Xt=[],Yt={name:"EndpointIcon",components:{SVGIcon:Y["a"]}},Zt=Yt,en=Object(W["a"])(Zt,Jt,Xt,!1,null,null,null),tn=en.exports,nn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M0 0.948h2.8v2.8h-2.8z"}}),n("path",{attrs:{d:"M11.2 10.252h2.8v2.8h-2.8z"}}),n("path",{attrs:{d:"M6.533 1.852h0.933v10.267h-0.933z"}}),n("path",{attrs:{d:"M2.8 1.852h4.667v0.933h-4.667z"}}),n("path",{attrs:{d:"M6.533 11.186h4.667v0.933h-4.667z"}})])},an=[],rn={name:"PathIcon",components:{SVGIcon:Y["a"]}},sn=rn,on=Object(W["a"])(sn,nn,an,!1,null,null,null),cn=on.exports,ln=n("8d2d"),un=n("66cd");const dn={[un["a"].article]:Ht["a"],[un["a"].collectionGroup]:Qt,[un["a"].learn]:cn,[un["a"].overview]:cn,[un["a"].project]:ln["a"],[un["a"].tutorial]:ln["a"],[un["a"].resources]:cn,[un["a"].sampleCode]:zt["a"],[un["a"].restRequestSymbol]:tn};var pn,hn,mn,fn,yn,gn,bn,vn,Cn={props:{role:{type:String,required:!0}},computed:{icon:({role:e})=>dn[e]}},_n=Cn,Tn=(n("1a47"),Object(W["a"])(_n,Nt,Vt,!1,null,"4d1e7968",null)),kn=Tn.exports,Sn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("code",{staticClass:"decorated-title"},e._l(e.tokens,(function(t,a){return n(e.componentFor(t),{key:a,tag:"component",class:[e.classFor(t),e.emptyTokenClass(t)]},[e._v(e._s(t.text))])})),1)},xn=[],On={name:"ChangedToken",render(e){const{kind:t,tokens:n}=this;return e("span",{class:["token-"+t,"token-changed"]},n.map(t=>e(Qn,{props:t})))},props:{kind:{type:String,required:!0},tokens:{type:Array,required:!0}}},jn=On,Pn=Object(W["a"])(jn,pn,hn,!1,null,null,null),An=Pn.exports,Bn={name:"RawText",render(e){const{_v:t=(t=>e("span",t)),text:n}=this;return t(n)},props:{text:{type:String,required:!0}}},wn=Bn,qn=Object(W["a"])(wn,mn,fn,!1,null,null,null),Dn=qn.exports,In={name:"SyntaxToken",render(e){return e("span",{class:"token-"+this.kind},this.text)},props:{kind:{type:String,required:!0},text:{type:String,required:!0}}},Ln=In,$n=Object(W["a"])(Ln,yn,gn,!1,null,null,null),En=$n.exports,Mn=n("86d8"),Rn={name:"TypeIdentifierLink",inject:{references:{default(){return{}}}},render(e){const t="type-identifier-link",n=this.references[this.identifier];return n&&n.url?e(Mn["a"],{class:t,props:{url:n.url,kind:n.kind,role:n.role}},this.$slots.default):e("span",{class:t},this.$slots.default)},props:{identifier:{type:String,required:!0,default:()=>""}}},Nn=Rn,Vn=Object(W["a"])(Nn,bn,vn,!1,null,null,null),Hn=Vn.exports;const zn={attribute:"attribute",externalParam:"externalParam",genericParameter:"genericParameter",identifier:"identifier",internalParam:"internalParam",keyword:"keyword",label:"label",number:"number",string:"string",text:"text",typeIdentifier:"typeIdentifier",added:"added",removed:"removed"};var Wn,Gn,Kn={name:"DeclarationToken",render(e){const{kind:t,text:n,tokens:a}=this;switch(t){case zn.text:{const t={text:n};return e(Dn,{props:t})}case zn.typeIdentifier:{const t={identifier:this.identifier};return e(Hn,{props:t},[e(vt["a"],n)])}case zn.added:case zn.removed:return e(An,{props:{tokens:a,kind:t}});default:{const a={kind:t,text:n};return e(En,{props:a})}}},constants:{TokenKind:zn},props:{kind:{type:String,required:!0},identifier:{type:String,required:!1},text:{type:String,required:!1},tokens:{type:Array,required:!1,default:()=>[]}}},Fn=Kn,Un=(n("c36f"),Object(W["a"])(Fn,Wn,Gn,!1,null,"5caf1b5b",null)),Qn=Un.exports;const{TokenKind:Jn}=Qn.constants,Xn={decorator:"decorator",identifier:"identifier",label:"label"};var Yn={name:"DecoratedTopicTitle",components:{WordBreak:vt["a"]},props:{tokens:{type:Array,required:!0,default:()=>[]}},constants:{TokenKind:Jn},methods:{emptyTokenClass:({text:e})=>({"empty-token":" "===e}),classFor({kind:e}){switch(e){case Jn.externalParam:case Jn.identifier:return Xn.identifier;case Jn.label:return Xn.label;default:return Xn.decorator}},componentFor(e){return/^\s+$/.test(e.text)?"span":vt["a"]}}},Zn=Yn,ea=(n("dcf6"),Object(W["a"])(Zn,Sn,xn,!1,null,"06ec7395",null)),ta=ea.exports,na=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentNode",{staticClass:"conditional-constraints",attrs:{content:e.content}})},aa=[],ra={name:"ConditionalConstraints",components:{ContentNode:lt},props:{constraints:lt.props.content,prefix:lt.props.content},computed:{content:({constraints:e,prefix:t,space:n})=>t.concat(n).concat(e),space:()=>({type:lt.InlineType.text,text:" "})}},sa=ra,ia=(n("918a"),Object(W["a"])(sa,na,aa,!1,null,"1548fd90",null)),oa=ia.exports,ca=function(e,t){var n=t._c;return n("p",{staticClass:"requirement-metadata",class:t.data.staticClass},[n("strong",[t._v("Required.")]),t.props.defaultImplementationsCount?[t._v(" Default implementation"+t._s(t.props.defaultImplementationsCount>1?"s":"")+" provided. ")]:t._e()],2)},la=[],ua={name:"RequirementMetadata",props:{defaultImplementationsCount:{type:Number,default:0}}},da=ua,pa=Object(W["a"])(da,ca,la,!0,null,null,null),ha=pa.exports;const ma={added:"added",modified:"modified",deprecated:"deprecated"},fa=(ma.modified,ma.added,ma.deprecated,{[ma.modified]:"Modified",[ma.added]:"Added",[ma.deprecated]:"Deprecated"}),ya="has-multiple-lines";function ga(e){if(!e)return!1;const t=window.getComputedStyle(e.$el||e),n=(e.$el||e).offsetHeight,a=t.lineHeight?parseFloat(t.lineHeight):1,r=t.paddingTop?parseFloat(t.paddingTop):0,s=t.paddingBottom?parseFloat(t.paddingBottom):0,i=t.borderTopWidth?parseFloat(t.borderTopWidth):0,o=t.borderBottomWidth?parseFloat(t.borderBottomWidth):0,c=n-(r+s+i+o),l=c/a;return l>=2}const ba="latest_",va={xcode:{value:"xcode",label:"Xcode"},other:{value:"other",label:"Other"}},Ca={constants:{multipleLinesClass:ya},data(){return{multipleLinesClass:ya}},computed:{hasMultipleLinesAfterAPIChanges:({change:e,changeType:t,$refs:n})=>!(!e&&!t)&&ga(n.apiChangesDiff)}},_a={methods:{toVersionRange({platform:e,versions:t}){return`${e} ${t[0]} – ${e} ${t[1]}`},toOptionValue:e=>`${ba}${e}`,toScope:e=>e.slice(ba.length,e.length),getOptionsForDiffAvailability(e={}){return this.getOptionsForDiffAvailabilities([e])},getOptionsForDiffAvailabilities(e=[]){const t=e.reduce((e,t={})=>Object.keys(t).reduce((e,n)=>({...e,[n]:(e[n]||[]).concat(t[n])}),e),{}),n=Object.keys(t),a=n.reduce((e,n)=>{const a=t[n];return{...e,[n]:a.find(e=>e.platform===va.xcode.label)||a[0]}},{}),r=e=>({label:this.toVersionRange(a[e]),value:this.toOptionValue(e),platform:a[e].platform}),{sdk:s,beta:i,minor:o,major:c,...l}=a,u=[].concat(s?r("sdk"):[]).concat(i?r("beta"):[]).concat(o?r("minor"):[]).concat(c?r("major"):[]).concat(Object.keys(l).map(r));return this.splitOptionsPerPlatform(u)},changesClassesFor(e,t){const n=this.changeFor(e,t);return this.getChangesClasses(n)},getChangesClasses:e=>({["changed changed-"+e]:!!e}),changeFor(e,t){const{change:n}=(t||{})[e]||{};return n},splitOptionsPerPlatform(e){return e.reduce((e,t)=>{const n=t.platform===va.xcode.label?va.xcode.value:va.other.value;return e[n].push(t),e},{[va.xcode.value]:[],[va.other.value]:[]})},getChangeName(e){return fa[e]}},computed:{availableOptions({diffAvailability:e={},toOptionValue:t}){return new Set(Object.keys(e).map(t))}}},Ta={article:"article",symbol:"symbol"},ka={title:"title",symbol:"symbol"},Sa={link:"link"};var xa={name:"TopicsLinkBlock",components:{Badge:K,WordBreak:vt["a"],ContentNode:lt,TopicLinkBlockIcon:kn,DecoratedTopicTitle:ta,RequirementMetadata:ha,ConditionalConstraints:oa},inject:["store"],mixins:[_a,Ca],constants:{ReferenceType:Sa,TopicKind:Ta,TitleStyles:ka},props:{isSymbolBeta:Boolean,isSymbolDeprecated:Boolean,topic:{type:Object,required:!0,validator:e=>(!("abstract"in e)||Array.isArray(e.abstract))&&"string"===typeof e.identifier&&(e.type===Sa.link&&!e.kind||"string"===typeof e.kind)&&(e.type===Sa.link&&!e.role||"string"===typeof e.role)&&"string"===typeof e.title&&"string"===typeof e.url&&(!("defaultImplementations"in e)||"number"===typeof e.defaultImplementations)&&(!("required"in e)||"boolean"===typeof e.required)&&(!("conformance"in e)||"object"===typeof e.conformance)}},data(){return{state:this.store.state}},computed:{linkComponent:({topic:e})=>e.type===Sa.link?"a":"router-link",linkProps({topic:e}){const t=Object(E["b"])(e.url,this.$route.query);return e.type===Sa.link?{href:t}:{to:t}},linkBlockClasses:({changesClasses:e,hasAbstractElements:t,hasMultipleLinesAfterAPIChanges:n,multipleLinesClass:a})=>({"has-inline-element":!t,[a]:n,...!t&&e}),linkClasses:({changesClasses:e,deprecated:t,hasAbstractElements:n})=>({deprecated:t,"has-adjacent-elements":n,...n&&e}),changesClasses:({getChangesClasses:e,change:t})=>e(t),titleTag({topic:e}){if(e.titleStyle===ka.title)return e.ideTitle?"span":"code";switch(e.kind){case Ta.symbol:return"code";default:return"span"}},titleStyles:()=>ka,deprecated:({showDeprecatedBadge:e,topic:t})=>e||t.deprecated,showBetaBadge:({topic:e,isSymbolBeta:t})=>Boolean(!t&&e.beta),showDeprecatedBadge:({topic:e,isSymbolDeprecated:t})=>Boolean(!t&&e.deprecated),change({topic:{identifier:e},state:{apiChanges:t}}){return this.changeFor(e,t)},changeName:({change:e,getChangeName:t})=>t(e),hasAbstractElements:({topic:{abstract:e,conformance:t,required:n,defaultImplementations:a}}={})=>e&&e.length>0||t||n||a,tags:({topic:e})=>(e.tags||[]).slice(0,1)}},Oa=xa,ja=(n("f6d7"),Object(W["a"])(Oa,Mt,Rt,!1,null,"1e5f16e7",null)),Pa=ja.exports,Aa={name:"TopicsTable",inject:{references:{default(){return{}}}},components:{WordBreak:vt["a"],ContentTable:wt,TopicsLinkBlock:Pa,ContentNode:lt,ContentTableSection:Et},props:{isSymbolDeprecated:Boolean,isSymbolBeta:Boolean,sections:{type:Array,required:!0},title:{type:String,required:!1,default(){return"Topics"}},anchor:{type:String,required:!1,default(){return"topics"}},wrapTitle:{type:Boolean,default:!1}},computed:{sectionsWithTopics(){return this.sections.map(e=>({...e,topics:e.identifiers.reduce((e,t)=>this.references[t]?e.concat(this.references[t]):e,[])}))}}},Ba=Aa,wa=(n("0d16"),Object(W["a"])(Ba,gt,bt,!1,null,"3e48ad3a",null)),qa=wa.exports,Da={name:"DefaultImplementations",components:{TopicsTable:qa},props:{isSymbolDeprecated:Boolean,isSymbolBeta:Boolean,sections:qa.props.sections}},Ia=Da,La=Object(W["a"])(Ia,ft,yt,!1,null,null,null),$a=La.exports,Ea=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"description"},[e.$slots.default||e.hasOverview?e._e():n("p",{staticClass:"nodocumentation"},[e._v(" No overview available. ")]),e._t("default")],2)},Ma=[],Ra={name:"Description",props:{hasOverview:{type:Boolean,default:()=>!1}}},Na=Ra,Va=(n("1eff"),Object(W["a"])(Na,Ea,Ma,!1,null,"3b0e7cbb",null)),Ha=Va.exports,za=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Section",{staticClass:"technologies",attrs:{role:"complementary","aria-label":e.computedTitle}},[n("Title",[e._v(e._s(e.computedTitle))]),n("List",e._l(e.technologies,(function(t){return n("Item",{key:t.name},[n("WordBreak",{staticClass:"name"},[e._v(e._s(t.name))]),e._l(t.relatedModules||[],(function(t){return n("WordBreak",{key:t,staticClass:"name"},[e._v(e._s(t)+" ")])}))],2)})),1)],1)},Wa=[],Ga=n("002d"),Ka=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",{staticClass:"summary-list"},[e._t("default")],2)},Fa=[],Ua={name:"List"},Qa=Ua,Ja=(n("9cb2"),Object(W["a"])(Qa,Ka,Fa,!1,null,"731de2f2",null)),Xa=Ja.exports,Ya=function(){var e,t=this,n=t.$createElement,a=t._self._c||n;return a("li",{ref:"apiChangesDiff",staticClass:"summary-list-item",class:(e={},e[t.multipleLinesClass]=t.hasMultipleLinesAfterAPIChanges,e)},[t._t("default")],2)},Za=[],er={name:"ListItem",mixins:[Ca],props:{change:{type:Boolean,default:()=>!1}}},tr=er,nr=(n("67dc"),Object(W["a"])(tr,Ya,Za,!1,null,"1648b0ac",null)),ar=nr.exports,rr={name:"TechnologyList",components:{Item:ar,List:Xa,Section:We,Title:Je,WordBreak:vt["a"]},props:{technologies:{type:Array,required:!0},title:{type:String,required:!1}},computed:{computedTitle:({title:e,defaultTitle:t})=>e||t,defaultTitle:({technologies:e})=>Object(Ga["d"])({en:{one:"Technology",other:"Technologies"}},e.length)}},sr=rr,ir=(n("8c8d"),Object(W["a"])(sr,za,Wa,!1,null,"4616e162",null)),or=ir.exports,cr=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Section",{staticClass:"on-this-page"},[n("nav",{attrs:{"aria-labelledby":"on-this-page-title"}},[n("Title",{attrs:{id:"on-this-page-title"}},[e._v("On This Page")]),n("List",e._l(e.sectionsWithFragments,(function(t){return n("ListItem",{key:t.anchor},[n("router-link",{staticClass:"link",attrs:{to:e.buildUrl(t.fragment,e.$route.query)}},[n("span",{staticClass:"link-text"},[e._v(e._s(t.title))]),n("span",{staticClass:"icon-holder",attrs:{"aria-hidden":"true"}},[e._v(" "),n("InlineChevronDownCircleIcon",{staticClass:"link-icon icon-inline"})],1)])],1)})),1)],1)])},lr=[],ur=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"inline-chevron-down-circle-icon",attrs:{viewBox:"0 0 14 14"}},[n("polygon",{attrs:{points:"10.1 4 11 4.7 7 10 3 4.7 3.9 4 7 8 10.1 4"}})])},dr=[],pr={name:"InlineChevronDownCircleIcon",components:{SVGIcon:Y["a"]}},hr=pr,mr=Object(W["a"])(hr,ur,dr,!1,null,null,null),fr=mr.exports,yr={name:"OnThisPageNav",components:{InlineChevronDownCircleIcon:fr,List:Xa,ListItem:ar,Section:We,Title:Je},props:{sections:{type:Array,required:!0}},computed:{sectionsWithFragments(){return this.sections.map(({anchor:e,title:t})=>({anchor:e,fragment:"#"+e,title:t}))}},methods:{buildUrl:E["b"]}},gr=yr,br=(n("5245"),Object(W["a"])(gr,cr,lr,!1,null,"7e43087c",null)),vr=br.exports,Cr=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"primary-content"},e._l(e.sections,(function(t,a){return n(e.componentFor(t),e._b({key:a,tag:"component"},"component",e.propsFor(t),!1))})),1)},_r=[],Tr=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("OnThisPageSection",{attrs:{anchor:"possibleValues",title:"PossibleValues"}},[n("h2",[e._v("Possible Values")]),n("dl",{staticClass:"datalist"},[e._l(e.values,(function(t){return[n("dt",{key:t.name+":name",staticClass:"param-name"},[n("code",[e._v(e._s(t.name))])]),t.content?n("dd",{key:t.name+":content",staticClass:"value-content"},[n("ContentNode",{attrs:{content:t.content}})],1):e._e()]}))],2)])},kr=[],Sr={name:"PossibleValues",components:{ContentNode:st["a"],OnThisPageSection:jt},props:{values:{type:Array,required:!0}}},xr=Sr,Or=(n("719b"),Object(W["a"])(xr,Tr,kr,!1,null,null,null)),jr=Or.exports,Pr=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("OnThisPageSection",{attrs:{anchor:e.anchor,title:e.title}},[n("h2",[e._v(e._s(e.title))]),n("DeclarationSource",{attrs:{tokens:e.tokens}})],1)},Ar=[],Br=function(){var e,t=this,n=t.$createElement,a=t._self._c||n;return a("pre",{ref:"declarationGroup",staticClass:"source",class:(e={indented:t.simpleIndent},e[t.multipleLinesClass]=t.hasMultipleLines,e)},[a("code",{ref:"code"},t._l(t.tokens,(function(e,n){return a("Token",t._b({key:n},"Token",t.propsFor(e),!1))})),1)])},wr=[];function qr(e){const t=e.getElementsByClassName("token-identifier");if(t.length<2)return;const n=e.textContent.indexOf(":")+1;for(let a=1;a=a.length)return;const r=e.textContent.indexOf("(");for(let s=n;sObject(Ga["a"])(e)}},Nr=Rr,Vr=Object(W["a"])(Nr,Pr,Ar,!1,null,null,null),Hr=Vr.exports,zr=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("OnThisPageSection",{staticClass:"declaration",attrs:{anchor:"declaration",title:"Declaration"}},[n("h2",[e._v("Declaration")]),e.hasModifiedChanges?[n("DeclarationDiff",{class:[e.changeClasses,e.multipleLinesClass],attrs:{changes:e.declarationChanges,changeType:e.changeType}})]:e._l(e.declarations,(function(t,a){return n("DeclarationGroup",{key:a,class:e.changeClasses,attrs:{declaration:t,shouldCaption:e.hasPlatformVariants,changeType:e.changeType}})})),e.conformance?n("ConditionalConstraints",{attrs:{constraints:e.conformance.constraints,prefix:e.conformance.availabilityPrefix}}):e._e()],2)},Wr=[],Gr=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"apiChangesDiff",staticClass:"declaration-group",class:e.classes},[e.shouldCaption?n("p",{staticClass:"platforms"},[n("strong",[e._v(e._s(e.caption))])]):e._e(),n("Source",{attrs:{tokens:e.declaration.tokens,"simple-indent":e.isSwift&&!e.isCocoaApi,"smart-indent":e.isCocoaApi,language:e.interfaceLanguage}})],1)},Kr=[],Fr={name:"DeclarationGroup",components:{Source:Mr},mixins:[Ca],inject:{languages:{default:()=>new Set},interfaceLanguage:{default:()=>j["a"].swift.key.api}},props:{declaration:{type:Object,required:!0},shouldCaption:{type:Boolean,default:!1},changeType:{type:String,required:!1}},computed:{classes:({changeType:e,multipleLinesClass:t,hasMultipleLinesAfterAPIChanges:n})=>({["declaration-group--changed declaration-group--"+e]:e,[t]:n}),caption(){return this.declaration.platforms.join(", ")},isSwift:({interfaceLanguage:e})=>e===j["a"].swift.key.api,isCocoaApi:({languages:e})=>e.has(j["a"].objectiveC.key.api)}},Ur=Fr,Qr=(n("1d1c"),Object(W["a"])(Ur,Gr,Kr,!1,null,"1dc256a6",null)),Jr=Qr.exports,Xr=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"declaration-diff"},[n("div",{staticClass:"declaration-diff-current"},[n("div",{staticClass:"declaration-diff-version"},[e._v("Current")]),e._l(e.currentDeclarations,(function(t,a){return n("DeclarationGroup",{key:a,attrs:{declaration:t,"should-caption":e.currentDeclarations.length>1,changeType:e.changeType}})}))],2),n("div",{staticClass:"declaration-diff-previous"},[n("div",{staticClass:"declaration-diff-version"},[e._v("Previous")]),e._l(e.previousDeclarations,(function(t,a){return n("DeclarationGroup",{key:a,attrs:{declaration:t,"should-caption":e.previousDeclarations.length>1,changeType:e.changeType}})}))],2)])},Yr=[],Zr={name:"DeclarationDiff",components:{DeclarationGroup:Jr},props:{changes:{type:Object,required:!0},changeType:{type:String,required:!0}},computed:{previousDeclarations:({changes:e})=>e.declaration.previous||[],currentDeclarations:({changes:e})=>e.declaration.new||[]}},es=Zr,ts=(n("3dca"),Object(W["a"])(es,Xr,Yr,!1,null,"676d8556",null)),ns=ts.exports,as={name:"Declaration",components:{DeclarationDiff:ns,DeclarationGroup:Jr,ConditionalConstraints:oa,OnThisPageSection:jt},constants:{ChangeTypes:ma,multipleLinesClass:ya},inject:["identifier","store"],data:({store:{state:e}})=>({state:e,multipleLinesClass:ya}),props:{conformance:{type:Object,required:!1},declarations:{type:Array,required:!0}},computed:{hasPlatformVariants(){return this.declarations.length>1},hasModifiedChanges({declarationChanges:e}){if(!e||!e.declaration)return!1;const t=e.declaration;return!(!(t.new||[]).length||!(t.previous||[]).length)},declarationChanges:({state:{apiChanges:e},identifier:t})=>e&&e[t],changeType:({declarationChanges:e,hasModifiedChanges:t})=>{if(!e)return;const n=e.declaration;return n?t?ma.modified:e.change:e.change===ma.added?ma.added:void 0},changeClasses:({changeType:e})=>({["changed changed-"+e]:e})}},rs=as,ss=(n("4340"),Object(W["a"])(rs,zr,Wr,!1,null,"e39c4ee4",null)),is=ss.exports,os=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("OnThisPageSection",{staticClass:"details",attrs:{anchor:"details",title:"Details"}},[n("h2",[e._v("Details")]),n("dl",[e.isSymbol?[n("dt",{key:e.details.name+":name",staticClass:"detail-type"},[e._v(" Name ")]),n("dd",{key:e.details.ideTitle+":content",staticClass:"detail-content"},[e._v(" "+e._s(e.details.ideTitle)+" ")])]:e._e(),e.isTitle?[n("dt",{key:e.details.name+":key",staticClass:"detail-type"},[e._v(" Key ")]),n("dd",{key:e.details.ideTitle+":content",staticClass:"detail-content"},[e._v(" "+e._s(e.details.name)+" ")])]:e._e(),n("dt",{key:e.details.name+":type",staticClass:"detail-type"},[e._v(" Type ")]),n("dd",{staticClass:"detail-content"},[n("PropertyListKeyType",{attrs:{types:e.details.value}})],1)],2)])},cs=[],ls=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"type"},[e._v(e._s(e.typeOutput))])},us=[],ds={name:"PropertyListKeyType",props:{types:{type:Array,required:!0}},computed:{englishTypes(){return this.types.map(({arrayMode:e,baseType:t="*"})=>e?"array of "+this.pluralizeKeyType(t):t)},typeOutput(){return this.englishTypes.length>2?[this.englishTypes.slice(0,this.englishTypes.length-1).join(", "),this.englishTypes[this.englishTypes.length-1]].join(", or "):this.englishTypes.join(" or ")}},methods:{pluralizeKeyType(e){switch(e){case"dictionary":return"dictionaries";case"array":case"number":case"string":return e+"s";default:return e}}}},ps=ds,hs=(n("f7c0"),Object(W["a"])(ps,ls,us,!1,null,"791bac44",null)),ms=hs.exports,fs={name:"PropertyListKeyDetails",components:{PropertyListKeyType:ms,OnThisPageSection:jt},props:{details:{type:Object,required:!0}},computed:{isTitle(){return"title"===this.details.titleStyle&&this.details.ideTitle},isSymbol(){return"symbol"===this.details.titleStyle&&this.details.ideTitle}}},ys=fs,gs=(n("a705"),Object(W["a"])(ys,os,cs,!1,null,"61ef551b",null)),bs=gs.exports,vs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentNode",e._b({},"ContentNode",e.$props,!1))},Cs=[],_s={name:"GenericContent",inject:{store:{default(){return{addOnThisPageSection(){}}}}},components:{ContentNode:lt},props:lt.props,methods:{...lt.methods,addOnThisPageSections(){const{isTopLevelHeading:e,store:t}=this;this.forEach(n=>{e(n)&&t.addOnThisPageSection({anchor:n.anchor,title:n.text})})},isTopLevelHeading(e){const{level:t,type:n}=e;return n===lt.BlockType.heading&&2===t}},created(){this.addOnThisPageSections()}},Ts=_s,ks=Object(W["a"])(Ts,vs,Cs,!1,null,null,null),Ss=ks.exports,xs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("OnThisPageSection",{staticClass:"parameters",attrs:{anchor:"parameters",title:"Parameters"}},[n("h2",[e._v("Parameters")]),n("dl",[e._l(e.parameters,(function(t){return[n("dt",{key:t.name+":name",staticClass:"param-name"},[n("code",[e._v(e._s(t.name))])]),n("dd",{key:t.name+":content",staticClass:"param-content"},[n("ContentNode",{attrs:{content:t.content}})],1)]}))],2)])},Os=[],js={name:"Parameters",components:{ContentNode:lt,OnThisPageSection:jt},props:{parameters:{type:Array,required:!0}}},Ps=js,As=(n("09db"),Object(W["a"])(Ps,xs,Os,!1,null,"7bb7c035",null)),Bs=As.exports,ws=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("OnThisPageSection",{attrs:{anchor:e.anchor,title:e.title}},[n("h2",[e._v(e._s(e.title))]),n("ParametersTable",{staticClass:"property-table",attrs:{parameters:e.properties,changes:e.propertyChanges},scopedSlots:e._u([{key:"symbol",fn:function(t){var a=t.name,r=t.type,s=t.content,i=t.changes,o=t.deprecated;return[n("div",{staticClass:"property-name",class:{deprecated:o}},[n("WordBreak",{attrs:{tag:"code"}},[e._v(e._s(a))])],1),e.shouldShiftType({name:a,content:s})?e._e():n("PossiblyChangedType",{attrs:{type:r,changes:i.type}})]}},{key:"description",fn:function(t){var a=t.name,r=t.type,s=t.attributes,i=t.content,o=t.required,c=t.changes,l=t.deprecated;return[e.shouldShiftType({name:a,content:i})?n("PossiblyChangedType",{attrs:{type:r,changes:c.type}}):e._e(),l?[n("Badge",{staticClass:"property-deprecated",attrs:{variant:"deprecated"}}),e._v("  ")]:e._e(),n("PossiblyChangedRequiredAttribute",{attrs:{required:o,changes:c.required}}),i?n("ContentNode",{attrs:{content:i}}):e._e(),n("ParameterAttributes",{attrs:{attributes:s,changes:c.attributes}})]}}])})],1)},qs=[],Ds={inject:["identifier","store"],data:({store:{state:e}})=>({state:e}),computed:{apiChanges:({state:{apiChanges:e},identifier:t})=>e&&e[t]}},Is=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"parameters-table"},e._l(e.parameters,(function(t){return n("Row",{key:t[e.keyBy],staticClass:"param",class:e.changedClasses(t[e.keyBy])},[n("Column",{staticClass:"param-symbol",attrs:{span:{large:3,small:12}}},[e._t("symbol",null,null,e.getProps(t,e.changes[t[e.keyBy]]))],2),n("Column",{staticClass:"param-content",attrs:{span:{large:9,small:12}}},[e._t("description",null,null,e.getProps(t,e.changes[t[e.keyBy]]))],2)],1)})),1)},Ls=[],$s={name:"ParametersTable",components:{Row:xe["a"],Column:Oe["a"]},props:{parameters:{type:Array,required:!0},changes:{type:Object,default:()=>({})},keyBy:{type:String,default:"name"}},methods:{getProps(e,t={}){return{...e,changes:t}},changedClasses(e){const{changes:t}=this,{change:n}=t[e]||{};return{["changed changed-"+n]:n}}}},Es=$s,Ms=(n("85b8"),Object(W["a"])(Es,Is,Ls,!1,null,"1455266b",null)),Rs=Ms.exports,Ns=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"parameter-attributes"},[e.shouldRender(e.AttributeKind.default)?n("ParameterMetaAttribute",e._b({scopedSlots:e._u([{key:"default",fn:function(t){var a=t.attribute;return[e._v(" "+e._s(a.title||"Default")+": "),n("code",[e._v(e._s(a.value))])]}}],null,!1,4247435012)},"ParameterMetaAttribute",{kind:e.AttributeKind.default,attributes:e.attributesObject,changes:e.changes},!1)):e._e(),e.shouldRender(e.AttributeKind.minimum)?n("ParameterMetaAttribute",e._b({scopedSlots:e._u([{key:"default",fn:function(t){var a=t.attribute;return[e._v(" "+e._s(a.title||"Minimum")+": "),n("code",[e._v(e._s(a.value))])]}}],null,!1,455861177)},"ParameterMetaAttribute",{kind:e.AttributeKind.minimum,attributes:e.attributesObject,changes:e.changes},!1)):e._e(),e.shouldRender(e.AttributeKind.minimumExclusive)?n("ParameterMetaAttribute",e._b({scopedSlots:e._u([{key:"default",fn:function(t){var a=t.attribute;return[e._v(" "+e._s(a.title||"Minimum")+": "),n("code",[e._v("> "+e._s(a.value))])]}}],null,!1,3844501612)},"ParameterMetaAttribute",{kind:e.AttributeKind.minimumExclusive,attributes:e.attributesObject,changes:e.changes},!1)):e._e(),e.shouldRender(e.AttributeKind.maximum)?n("ParameterMetaAttribute",e._b({scopedSlots:e._u([{key:"default",fn:function(t){var a=t.attribute;return[e._v(" "+e._s(a.title||"Maximum")+": "),n("code",[e._v(e._s(a.value))])]}}],null,!1,19641767)},"ParameterMetaAttribute",{kind:e.AttributeKind.maximum,attributes:e.attributesObject,changes:e.changes},!1)):e._e(),e.shouldRender(e.AttributeKind.maximumExclusive)?n("ParameterMetaAttribute",e._b({scopedSlots:e._u([{key:"default",fn:function(t){var a=t.attribute;return[e._v(" "+e._s(a.title||"Maximum")+": "),n("code",[e._v("< "+e._s(a.value))])]}}],null,!1,4289558576)},"ParameterMetaAttribute",{kind:e.AttributeKind.maximumExclusive,attributes:e.attributesObject,changes:e.changes},!1)):e._e(),e.shouldRender(e.AttributeKind.allowedTypes)?n("ParameterMetaAttribute",e._b({scopedSlots:e._u([{key:"default",fn:function(t){var a=t.attribute;return[e._v(" "+e._s(e.fallbackToValues(a).length>1?"Possible types":"Type")+": "),n("code",[e._l(e.fallbackToValues(a),(function(t,r){return[e._l(t,(function(t,s){return[n("DeclarationToken",e._b({key:r+"-"+s},"DeclarationToken",t,!1)),r+11?"Possible values":"Value")+": "),n("code",[e._v(e._s(e.fallbackToValues(a).join(", ")))])]}}],null,!1,1507632019)},"ParameterMetaAttribute",{kind:e.AttributeKind.allowedValues,attributes:e.attributesObject,changes:e.changes},!1)):e._e()],1)},Vs=[],Hs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("RenderChanged",{attrs:{value:e.attributes[e.kind],changes:e.changes[e.kind]},scopedSlots:e._u([{key:"default",fn:function(t){var a=t.value;return n("div",{staticClass:"property-metadata"},[e._t("default",null,{attribute:a})],2)}}],null,!0)})},zs=[];const Ws={added:"change-added",removed:"change-removed"};var Gs,Ks,Fs={name:"RenderChanged",constants:{ChangedClasses:Ws},props:{changes:{type:Object,default:()=>({new:null,previous:null})},value:{type:[Object,Array,String,Boolean],default:null},wrapChanges:{type:Boolean,default:!0},renderSingleChange:{type:Boolean,default:!1}},render(e){const{value:t,changes:n={},wrapChanges:a,renderSingleChange:r}=this,{new:s,previous:i}=n,o=(t,n)=>{const r=this.$scopedSlots.default({value:t});return n&&a?e("div",{class:n},[r]):r?r[0]:null};if(s||i){const t=o(s,Ws.added),n=o(i,Ws.removed);return r?s&&!i?t:n:e("div",{class:"property-changegroup"},[s?t:"",i?n:""])}return o(t)}},Us=Fs,Qs=Object(W["a"])(Us,Gs,Ks,!1,null,null,null),Js=Qs.exports,Xs={name:"ParameterMetaAttribute",components:{RenderChanged:Js},props:{kind:{type:String,required:!0},attributes:{type:Object,required:!0},changes:{type:Object,default:()=>({})}}},Ys=Xs,Zs=(n("2822"),Object(W["a"])(Ys,Hs,zs,!1,null,"8590589e",null)),ei=Zs.exports;const ti={allowedTypes:"allowedTypes",allowedValues:"allowedValues",default:"default",maximum:"maximum",maximumExclusive:"maximumExclusive",minimum:"minimum",minimumExclusive:"minimumExclusive"};var ni={name:"ParameterAttributes",components:{ParameterMetaAttribute:ei,DeclarationToken:Qn},constants:{AttributeKind:ti},props:{attributes:{type:Array,default:()=>[]},changes:{type:Object,default:()=>({})}},computed:{AttributeKind:()=>ti,attributesObject:({attributes:e})=>e.reduce((e,t)=>({...e,[t.kind]:t}),{})},methods:{shouldRender(e){return Object.prototype.hasOwnProperty.call(this.attributesObject,e)},fallbackToValues:e=>{const t=e||[];return Array.isArray(t)?t:t.values}}},ai=ni,ri=Object(W["a"])(ai,Ns,Vs,!1,null,null,null),si=ri.exports,ii=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("RenderChanged",{attrs:{renderSingleChange:"",value:e.required,changes:e.changes},scopedSlots:e._u([{key:"default",fn:function(t){var a=t.value;return a?n("span",{staticClass:"property-required"},[e._v("(Required) ")]):e._e()}}],null,!0)})},oi=[],ci={name:"PossiblyChangedRequiredAttribute",components:{RenderChanged:Js},props:{required:{type:Boolean,default:!1},changes:{type:Object,required:!1}}},li=ci,ui=(n("98af"),Object(W["a"])(li,ii,oi,!1,null,null,null)),di=ui.exports,pi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("RenderChanged",{attrs:{value:e.type,wrapChanges:!1,changes:e.changes},scopedSlots:e._u([{key:"default",fn:function(t){var a=t.value;return n("DeclarationTokenGroup",{staticClass:"property-metadata property-type",attrs:{type:e.getValues(a)}})}}])})},hi=[],mi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.type&&e.type.length?n("div",[n("code",e._l(e.type,(function(t,a){return n("DeclarationToken",e._b({key:a},"DeclarationToken",t,!1))})),1)]):e._e()},fi=[],yi={name:"DeclarationTokenGroup",components:{DeclarationToken:Qn},props:{type:{type:Array,default:()=>[],required:!1}}},gi=yi,bi=Object(W["a"])(gi,mi,fi,!1,null,null,null),vi=bi.exports,Ci={name:"PossiblyChangedType",components:{DeclarationTokenGroup:vi,RenderChanged:Js},props:{type:{type:Array,required:!0},changes:{type:Object,required:!1}},methods:{getValues(e){return Array.isArray(e)?e:e.values}}},_i=Ci,Ti=(n("2f87"),Object(W["a"])(_i,pi,hi,!1,null,"0a648a1e",null)),ki=Ti.exports,Si={name:"PropertyTable",mixins:[Ds],components:{Badge:K,WordBreak:vt["a"],PossiblyChangedRequiredAttribute:di,PossiblyChangedType:ki,ParameterAttributes:si,ContentNode:lt,OnThisPageSection:jt,ParametersTable:Rs},props:{title:{type:String,required:!0},properties:{type:Array,required:!0}},computed:{anchor:({title:e})=>Object(Ga["a"])(e),propertyChanges:({apiChanges:e})=>(e||{}).properties},methods:{shouldShiftType:({content:e=[],name:t})=>!e.length&&t}},xi=Si,Oi=(n("fde4"),Object(W["a"])(xi,ws,qs,!1,null,"387d76c0",null)),ji=Oi.exports,Pi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("OnThisPageSection",{attrs:{anchor:e.anchor,title:e.title}},[n("h2",[e._v(e._s(e.title))]),n("ParametersTable",{attrs:{parameters:[e.bodyParam],changes:e.bodyChanges,keyBy:"key"},scopedSlots:e._u([{key:"symbol",fn:function(t){var a=t.type,r=t.content,s=t.changes,i=t.name;return[e.shouldShiftType({name:i,content:r})?e._e():n("PossiblyChangedType",{attrs:{type:a,changes:s.type}})]}},{key:"description",fn:function(t){var a=t.name,r=t.content,s=t.mimeType,i=t.type,o=t.changes;return[e.shouldShiftType({name:a,content:r})?n("PossiblyChangedType",{attrs:{type:i,changes:o.type}}):e._e(),r?n("ContentNode",{attrs:{content:r}}):e._e(),s?n("PossiblyChangedMimetype",{attrs:{mimetype:s,changes:o.mimetype,change:o.change}}):e._e()]}}])}),e.parts.length?[n("h3",[e._v("Parts")]),n("ParametersTable",{staticClass:"parts",attrs:{parameters:e.parts,changes:e.partsChanges},scopedSlots:e._u([{key:"symbol",fn:function(t){var a=t.name,r=t.type,s=t.content,i=t.changes;return[n("div",{staticClass:"part-name"},[n("WordBreak",{attrs:{tag:"code"}},[e._v(e._s(a))])],1),s?n("PossiblyChangedType",{attrs:{type:r,changes:i.type}}):e._e()]}},{key:"description",fn:function(t){var a=t.content,r=t.mimeType,s=t.required,i=t.type,o=t.attributes,c=t.changes;return[n("div",[a?e._e():n("PossiblyChangedType",{attrs:{type:i,changes:c.type}}),n("PossiblyChangedRequiredAttribute",{attrs:{required:s,changes:c.required}}),a?n("ContentNode",{attrs:{content:a}}):e._e(),r?n("PossiblyChangedMimetype",{attrs:{mimetype:r,changes:c.mimetype,change:c.change}}):e._e(),n("ParameterAttributes",{attrs:{attributes:o,changes:c.attributes}})],1)]}}],null,!1,3752543529)})]:e._e()],2)},Ai=[],Bi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("RenderChanged",{attrs:{changes:e.changeValues,value:e.mimetype},scopedSlots:e._u([{key:"default",fn:function(t){var a=t.value;return n("div",{staticClass:"response-mimetype"},[e._v("Content-Type: "+e._s(a))])}}])})},wi=[],qi={name:"PossiblyChangedMimetype",components:{RenderChanged:Js},props:{mimetype:{type:String,required:!0},changes:{type:[Object,String],required:!1},change:{type:String,required:!1}},computed:{changeValues({change:e,changes:t}){return e===ma.modified&&"string"!==typeof t?t:void 0}}},Di=qi,Ii=(n("a91f"),Object(W["a"])(Di,Bi,wi,!1,null,"2faa6020",null)),Li=Ii.exports;const $i="restRequestBody";var Ei={name:"RestBody",mixins:[Ds],components:{PossiblyChangedMimetype:Li,PossiblyChangedRequiredAttribute:di,PossiblyChangedType:ki,WordBreak:vt["a"],ParameterAttributes:si,ContentNode:lt,OnThisPageSection:jt,ParametersTable:Rs},constants:{ChangesKey:$i},props:{bodyContentType:{type:Array,required:!0},content:{type:Array},mimeType:{type:String,required:!0},parts:{type:Array,default:()=>[]},title:{type:String,required:!0}},computed:{anchor:({title:e})=>Object(Ga["a"])(e),bodyParam:({bodyContentType:e,content:t,mimeType:n})=>({key:$i,content:t,mimeType:n,type:e}),bodyChanges:({apiChanges:e})=>e||{},partsChanges:({bodyChanges:e})=>(e[$i]||{}).parts},methods:{shouldShiftType:({content:e=[],name:t})=>!e.length&&t}},Mi=Ei,Ri=(n("f8d9"),Object(W["a"])(Mi,Pi,Ai,!1,null,"458971c5",null)),Ni=Ri.exports,Vi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("OnThisPageSection",{attrs:{anchor:e.anchor,title:e.title}},[n("h2",[e._v(e._s(e.title))]),n("ParametersTable",{attrs:{parameters:e.parameters,changes:e.parameterChanges},scopedSlots:e._u([{key:"symbol",fn:function(t){var a=t.name,r=t.type,s=t.content,i=t.changes,o=t.deprecated;return[n("div",{staticClass:"param-name",class:{deprecated:o}},[n("WordBreak",{attrs:{tag:"code"}},[e._v(e._s(a))])],1),e.shouldShiftType({content:s,name:a})?e._e():n("PossiblyChangedType",{attrs:{type:r,changes:i.type}})]}},{key:"description",fn:function(t){var a=t.name,r=t.type,s=t.content,i=t.required,o=t.attributes,c=t.changes,l=t.deprecated;return[n("div",[e.shouldShiftType({content:s,name:a})?n("PossiblyChangedType",{attrs:{type:r,changes:c.type}}):e._e(),l?[n("Badge",{staticClass:"param-deprecated",attrs:{variant:"deprecated"}}),e._v("  ")]:e._e(),n("PossiblyChangedRequiredAttribute",{attrs:{required:i,changes:c.required}}),s?n("ContentNode",{attrs:{content:s}}):e._e(),n("ParameterAttributes",{attrs:{attributes:o,changes:c}})],2)]}}])})],1)},Hi=[],zi={name:"RestParameters",mixins:[Ds],components:{Badge:K,PossiblyChangedType:ki,PossiblyChangedRequiredAttribute:di,ParameterAttributes:si,WordBreak:vt["a"],ContentNode:lt,OnThisPageSection:jt,ParametersTable:Rs},props:{title:{type:String,required:!0},parameters:{type:Array,required:!0}},computed:{anchor:({title:e})=>Object(Ga["a"])(e),parameterChanges:({apiChanges:e})=>(e||{}).restParameters},methods:{shouldShiftType:({content:e=[],name:t})=>!e.length&&t}},Wi=zi,Gi=(n("76d4"),Object(W["a"])(Wi,Vi,Hi,!1,null,"74e7f790",null)),Ki=Gi.exports,Fi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("OnThisPageSection",{attrs:{anchor:e.anchor,title:e.title}},[n("h2",[e._v(e._s(e.title))]),n("ParametersTable",{attrs:{parameters:e.responses,changes:e.propertyChanges,"key-by":"status"},scopedSlots:e._u([{key:"symbol",fn:function(t){var a=t.status,r=t.type,s=t.reason,i=t.content,o=t.changes;return[n("div",{staticClass:"response-name"},[n("code",[e._v(" "+e._s(a)+" "),n("span",{staticClass:"reason"},[e._v(e._s(s))])])]),e.shouldShiftType({content:i,reason:s,status:a})?e._e():n("PossiblyChangedType",{attrs:{type:r,changes:o.type}})]}},{key:"description",fn:function(t){var a=t.content,r=t.mimetype,s=t.reason,i=t.type,o=t.status,c=t.changes;return[e.shouldShiftType({content:a,reason:s,status:o})?n("PossiblyChangedType",{attrs:{type:i,changes:c.type}}):e._e(),n("div",{staticClass:"response-reason"},[n("code",[e._v(e._s(s))])]),a?n("ContentNode",{attrs:{content:a}}):e._e(),r?n("PossiblyChangedMimetype",{attrs:{mimetype:r,changes:c.mimetype,change:c.change}}):e._e()]}}])})],1)},Ui=[],Qi={name:"RestResponses",mixins:[Ds],components:{PossiblyChangedMimetype:Li,PossiblyChangedType:ki,ContentNode:lt,OnThisPageSection:jt,ParametersTable:Rs},props:{title:{type:String,required:!0},responses:{type:Array,required:!0}},computed:{anchor:({title:e})=>Object(Ga["a"])(e),propertyChanges:({apiChanges:e})=>(e||{}).restResponses},methods:{shouldShiftType:({content:e=[],reason:t,status:n})=>!(e.length||t)&&n}},Ji=Qi,Xi=(n("e335"),Object(W["a"])(Ji,Fi,Ui,!1,null,"57796e8c",null)),Yi=Xi.exports;const Zi={content:"content",declarations:"declarations",details:"details",parameters:"parameters",possibleValues:"possibleValues",properties:"properties",restBody:"restBody",restCookies:"restCookies",restEndpoint:"restEndpoint",restHeaders:"restHeaders",restParameters:"restParameters",restResponses:"restResponses"};var eo={name:"PrimaryContent",components:{Declaration:is,GenericContent:Ss,Parameters:Bs,PropertyListKeyDetails:bs,PropertyTable:ji,RestBody:Ni,RestEndpoint:Hr,RestParameters:Ki,RestResponses:Yi,PossibleValues:jr},constants:{SectionKind:Zi},props:{conformance:{type:Object,required:!1},sections:{type:Array,required:!0,validator:e=>e.every(({kind:e})=>Object.prototype.hasOwnProperty.call(Zi,e))}},computed:{span(){return{large:9,medium:9,small:12}}},methods:{componentFor(e){return{[Zi.content]:Ss,[Zi.declarations]:is,[Zi.details]:bs,[Zi.parameters]:Bs,[Zi.properties]:ji,[Zi.restBody]:Ni,[Zi.restParameters]:Ki,[Zi.restHeaders]:Ki,[Zi.restCookies]:Ki,[Zi.restEndpoint]:Hr,[Zi.restResponses]:Yi,[Zi.possibleValues]:jr}[e.kind]},propsFor(e){const{conformance:t}=this,{bodyContentType:n,content:a,declarations:r,details:s,items:i,kind:o,mimeType:c,parameters:l,title:u,tokens:d,values:p}=e;return{[Zi.content]:{content:a},[Zi.declarations]:{conformance:t,declarations:r},[Zi.details]:{details:s},[Zi.parameters]:{parameters:l},[Zi.possibleValues]:{values:p},[Zi.properties]:{properties:i,title:u},[Zi.restBody]:{bodyContentType:n,content:a,mimeType:c,parts:l,title:u},[Zi.restCookies]:{parameters:i,title:u},[Zi.restEndpoint]:{tokens:d,title:u},[Zi.restHeaders]:{parameters:i,title:u},[Zi.restParameters]:{parameters:i,title:u},[Zi.restResponses]:{responses:i,title:u}}[o]}}},to=eo,no=(n("812f"),Object(W["a"])(to,Cr,_r,!1,null,"011bef72",null)),ao=no.exports,ro=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentTable",{attrs:{anchor:"relationships",title:"Relationships"}},e._l(e.sectionsWithSymbols,(function(e){return n("Section",{key:e.type,attrs:{title:e.title}},[n("List",{attrs:{symbols:e.symbols,type:e.type}})],1)})),1)},so=[],io=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",{ref:"apiChangesDiff",staticClass:"relationships-list",class:e.classes},e._l(e.symbols,(function(t){return n("li",{key:t.identifier,staticClass:"relationships-item"},[t.url?n("router-link",{staticClass:"link",attrs:{to:e.buildUrl(t.url,e.$route.query)}},[n("WordBreak",{attrs:{tag:"code"}},[e._v(e._s(t.title))])],1):n("WordBreak",{attrs:{tag:"code"}},[e._v(e._s(t.title))]),t.conformance?n("ConditionalConstraints",{attrs:{constraints:t.conformance.constraints,prefix:t.conformance.conformancePrefix}}):e._e()],1)})),0)},oo=[];const co=3,lo={conformsTo:"conformance",inheritsFrom:"inheritance",inheritedBy:"inheritedBy"};var uo={name:"RelationshipsList",components:{ConditionalConstraints:oa,WordBreak:vt["a"]},inject:["store","identifier"],mixins:[_a,Ca],props:{symbols:{type:Array,required:!0},type:{type:String,required:!0}},data(){return{state:this.store.state}},computed:{classes({changeType:e,multipleLinesClass:t,hasMultipleLinesAfterAPIChanges:n}){return[{inline:this.shouldDisplayInline,column:!this.shouldDisplayInline,["changed changed-"+e]:!!e,[t]:n}]},hasAvailabilityConstraints(){return this.symbols.some(e=>!!(e.conformance||{}).constraints)},changes({identifier:e,state:{apiChanges:t}}){return(t||{})[e]||{}},changeType({changes:e,type:t}){const n=lo[t];if(e.change!==ma.modified)return e.change;const a=e[n];if(!a)return;const r=(e,t)=>e.map((e,n)=>[e,t[n]]),s=r(a.previous,a.new).some(([e,t])=>e.content?0===e.content.length&&t.content.length>0:!!t.content);return s?ma.added:ma.modified},shouldDisplayInline(){const{hasAvailabilityConstraints:e,symbols:t}=this;return t.length<=co&&!e}},methods:{buildUrl:E["b"]}},po=uo,ho=(n("2995"),Object(W["a"])(po,io,oo,!1,null,"e4fe9834",null)),mo=ho.exports,fo={name:"Relationships",inject:{references:{default(){return{}}}},components:{ContentTable:wt,List:mo,Section:Et},props:{sections:{type:Array,required:!0}},computed:{sectionsWithSymbols(){return this.sections.map(e=>({...e,symbols:e.identifiers.reduce((e,t)=>this.references[t]?e.concat(this.references[t]):e,[])}))}}},yo=fo,go=Object(W["a"])(yo,ro,so,!1,null,null,null),bo=go.exports,vo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Section",{staticClass:"availability",attrs:{role:"complementary","aria-label":"Availability"}},[n("Title",[e._v("Availability")]),n("List",{staticClass:"platform-list"},e._l(e.platforms,(function(t){return n("Item",{key:t.name,staticClass:"platform",class:e.changesClassesFor(t.name),attrs:{change:!!e.changeFor(t.name)}},[n("AvailabilityRange",{attrs:{deprecatedAt:t.deprecatedAt,introducedAt:t.introducedAt,platformName:t.name}}),t.deprecatedAt?n("Badge",{attrs:{variant:"deprecated"}}):t.beta?n("Badge",{attrs:{variant:"beta"}}):e._e()],1)})),1)],1)},Co=[],_o=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{attrs:{role:"text","aria-label":e.ariaLabel,title:e.description}},[e._v(" "+e._s(e.text)+" ")])},To=[],ko={name:"AvailabilityRange",props:{deprecatedAt:{type:String,required:!1},introducedAt:{type:String,required:!0},platformName:{type:String,required:!0}},computed:{ariaLabel(){const{deprecatedAt:e,description:t,text:n}=this;return[n].concat(e?"Deprecated":[]).concat(t).join(", ")},description(){const{deprecatedAt:e,introducedAt:t,platformName:n}=this;return e?`Introduced in ${n} ${t} and deprecated in ${n} ${e}`:`Available on ${n} ${t} and later`},text(){const{deprecatedAt:e,introducedAt:t,platformName:n}=this;return e?`${n} ${t}–${e}`:`${n} ${t}+`}}},So=ko,xo=Object(W["a"])(So,_o,To,!1,null,null,null),Oo=xo.exports,jo={name:"Availability",mixins:[_a],inject:["identifier","store"],components:{Badge:K,AvailabilityRange:Oo,Item:ar,List:Xa,Section:We,Title:Je},props:{platforms:{type:Array,required:!0}},data(){return{state:this.store.state}},methods:{changeFor(e){const{identifier:t,state:{apiChanges:n}}=this,{availability:a={}}=(n||{})[t]||{},r=a[e];if(r)return r.deprecated?ma.deprecated:r.introduced&&!r.introduced.previous?ma.added:ma.modified}}},Po=jo,Ao=(n("bc10"),Object(W["a"])(Po,vo,Co,!1,null,"0c59731a",null)),Bo=Ao.exports,wo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("TopicsTable",{attrs:{anchor:"see-also",title:"See Also",isSymbolDeprecated:e.isSymbolDeprecated,isSymbolBeta:e.isSymbolBeta,sections:e.sections}})},qo=[],Do={name:"SeeAlso",components:{TopicsTable:qa},props:{isSymbolDeprecated:Boolean,isSymbolBeta:Boolean,sections:qa.props.sections}},Io=Do,Lo=Object(W["a"])(Io,wo,qo,!1,null,null,null),$o=Lo.exports,Eo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"summary"},[e._t("default")],2)},Mo=[],Ro={name:"Summary"},No=Ro,Vo=(n("179d"),Object(W["a"])(No,Eo,Mo,!1,null,"19bd58b6",null)),Ho=Vo.exports,zo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"topictitle"},[e.eyebrow?n("span",{staticClass:"eyebrow"},[e._v(e._s(e.eyebrow))]):e._e(),n("WordBreak",{staticClass:"title",attrs:{tag:"h1"}},[e._t("default")],2)],1)},Wo=[],Go={name:"Title",components:{WordBreak:vt["a"]},props:{eyebrow:{type:String,required:!1}}},Ko=Go,Fo=(n("54bb"),Object(W["a"])(Ko,zo,Wo,!1,null,"e1f00c5e",null)),Uo=Fo.exports,Qo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("TopicsTable",{attrs:{anchor:"topics",title:"Topics",isSymbolDeprecated:e.isSymbolDeprecated,isSymbolBeta:e.isSymbolBeta,sections:e.sections}})},Jo=[],Xo={name:"Topics",components:{TopicsTable:qa},props:{isSymbolDeprecated:Boolean,isSymbolBeta:Boolean,sections:qa.props.sections}},Yo=Xo,Zo=Object(W["a"])(Yo,Qo,Jo,!1,null,null,null),ec=Zo.exports,tc={name:"DocumentationTopic",mixins:[P["a"]],inject:{isTargetIDE:{default(){return!1}},store:{default(){return{reset(){},state:{onThisPageSections:[]}}}}},components:{Abstract:ht,Aside:B["a"],BetaLegalText:Be,ContentNode:lt,DefaultImplementations:$a,Description:Ha,DownloadButton:mt["a"],TechnologyList:or,LanguageSwitcher:et,Nav:Te,OnThisPageNav:vr,PrimaryContent:ao,Relationships:bo,RequirementMetadata:ha,Availability:Bo,SeeAlso:$o,Summary:Ho,Title:Uo,Topics:ec},props:{abstract:{type:Array,required:!1},conformance:{type:Object,required:!1},defaultImplementationsSections:{type:Array,required:!1},downloadNotAvailableSummary:{type:Array,required:!1},deprecationSummary:{type:Array,required:!1},diffAvailability:{type:Object,required:!1},modules:{type:Array,required:!1},hierarchy:{type:Object,default:()=>({})},interfaceLanguage:{type:String,required:!0},identifier:{type:String,required:!0},isRequirement:{type:Boolean,default:()=>!1},platforms:{type:Array,required:!1},primaryContentSections:{type:Array,required:!1},references:{type:Object,required:!0},relationshipsSections:{type:Array,required:!1},roleHeading:{type:String,required:!1},title:{type:String,required:!0},topicSections:{type:Array,required:!1},sampleCodeDownload:{type:Object,required:!1},seeAlsoSections:{type:Array,required:!1},variants:{type:Array,default:()=>[]},extendsTechnology:{type:String},tags:{type:Array,required:!0}},provide(){return{references:this.references,identifier:this.identifier,languages:new Set(Object.keys(this.languagePaths)),interfaceLanguage:this.interfaceLanguage}},data(){return{topicState:this.store.state}},computed:{defaultImplementationsCount(){return(this.defaultImplementationsSections||[]).reduce((e,t)=>e+t.identifiers.length,0)},hasOverview:({primaryContentSections:e=[]})=>e.filter(e=>e.kind===ao.constants.SectionKind.content).length>0,languagePaths:({variants:e})=>e.reduce((e,t)=>t.traits.reduce((e,n)=>n.interfaceLanguage?{...e,[n.interfaceLanguage]:(e[n.interfaceLanguage]||[]).concat(t.paths)}:e,e),{}),objcPath:({languagePaths:{[j["a"].objectiveC.key.api]:[e]=[]}={}})=>e,swiftPath:({languagePaths:{[j["a"].swift.key.api]:[e]=[]}={}})=>e,onThisPageSections(){return this.topicState.onThisPageSections},isSymbolBeta:({platforms:e})=>e&&e.length&&e.every(e=>e.beta),hasBetaContent:({platforms:e})=>e&&e.length&&e.some(e=>e.beta),isSymbolDeprecated:({platforms:e,deprecationSummary:t})=>t&&t.length>0||e&&e.length&&e.every(e=>e.deprecatedAt),pageTitle:({title:e})=>e,parentTopicIdentifiers:({hierarchy:{paths:[e=[]]=[]}})=>e,shouldShowLanguageSwitcher:({objcPath:e,swiftPath:t})=>e&&t,hideSummary:()=>Object(A["c"])(["features","docs","summary","hide"],!1)},methods:{normalizePath(e){return e.startsWith("/")?e:"/"+e}},created(){if(this.topicState.preferredLanguage===j["a"].objectiveC.key.url&&this.interfaceLanguage!==j["a"].objectiveC.key.api&&this.objcPath&&this.$route.query.language!==j["a"].objectiveC.key.url){const{query:e}=this.$route;this.$nextTick().then(()=>{this.$router.replace({path:this.normalizePath(this.objcPath),query:{...e,language:j["a"].objectiveC.key.url}})})}this.store.reset()}},nc=tc,ac=(n("d85c"),Object(W["a"])(nc,x,O,!1,null,"134e8272",null)),rc=ac.exports,sc=n("2b0e");const ic=()=>({[ma.modified]:0,[ma.added]:0,[ma.deprecated]:0});var oc={state:{apiChanges:null,apiChangesCounts:ic()},setAPIChanges(e){this.state.apiChanges=e},resetApiChanges(){this.state.apiChanges=null,this.state.apiChangesCounts=ic()},async updateApiChangesCounts(){await sc["default"].nextTick(),Object.keys(this.state.apiChangesCounts).forEach(e=>{this.state.apiChangesCounts[e]=this.countChangeType(e)})},countChangeType(e){if(document&&document.querySelectorAll){const t=`.changed-${e}:not(.changed-total)`;return document.querySelectorAll(t).length}return 0}},cc=n("d369");const{state:lc,...uc}=oc;var dc={state:{onThisPageSections:[],preferredLanguage:cc["a"].preferredLanguage,...lc},reset(){this.state.onThisPageSections=[],this.state.preferredLanguage=cc["a"].preferredLanguage,this.resetApiChanges()},addOnThisPageSection(e){this.state.onThisPageSections.push(e)},setPreferredLanguage(e){this.state.preferredLanguage=e,cc["a"].preferredLanguage=this.state.preferredLanguage},...uc},pc=n("8590"),hc=n("66c9"),mc=n("bb52"),fc=n("146e"),yc={name:"DocumentationTopic",components:{Topic:rc,CodeTheme:pc["a"]},mixins:[mc["a"],fc["a"]],data(){return{topicDataDefault:null,topicDataObjc:null}},computed:{store(){return dc},objcOverrides:({topicData:e})=>{const{variantOverrides:t=[]}=e||{},n=({interfaceLanguage:e})=>e===j["a"].objectiveC.key.api,a=({traits:e})=>e.some(n),r=t.find(a);return r?r.patch:null},topicData:{get(){return this.topicDataObjc?this.topicDataObjc:this.topicDataDefault},set(e){this.topicDataDefault=e}},topicKey:({$route:e,topicProps:t})=>[e.path,t.interfaceLanguage].join(),topicProps(){const{abstract:e,defaultImplementationsSections:t,deprecationSummary:n,downloadNotAvailableSummary:a,diffAvailability:r,hierarchy:s,identifier:{interfaceLanguage:i,url:o},metadata:{extends:c,conformance:l,modules:u,platforms:d,required:p,roleHeading:h,title:m="",tags:f=[]}={},primaryContentSections:y,relationshipsSections:g,references:b={},sampleCodeDownload:v,topicSections:C,seeAlsoSections:_,variantOverrides:T,variants:k}=this.topicData;return{abstract:e,conformance:l,defaultImplementationsSections:t,deprecationSummary:n,downloadNotAvailableSummary:a,diffAvailability:r,hierarchy:s,identifier:o,interfaceLanguage:i,isRequirement:p,modules:u,platforms:d,primaryContentSections:y,relationshipsSections:g,references:b,roleHeading:h,sampleCodeDownload:v,title:m,topicSections:C,seeAlsoSections:_,variantOverrides:T,variants:k,extendsTechnology:c,tags:f.slice(0,1)}}},methods:{applyObjcOverrides(){this.topicDataObjc=k(Object(S["a"])(this.topicData),this.objcOverrides)},handleCodeColorsChange(e){hc["a"].updateCodeColors(e)}},mounted(){this.$bridge.on("contentUpdate",e=>{this.topicData=e}),this.$bridge.on("codeColors",this.handleCodeColorsChange),this.$bridge.send({type:"requestCodeColors"})},provide(){return{store:this.store}},beforeDestroy(){this.$bridge.off("codeColors",this.handleCodeColorsChange)},beforeRouteEnter(e,t,n){Object(S["b"])(e,t,n).then(t=>n(n=>{n.topicData=t,e.query.language===j["a"].objectiveC.key.url&&n.objcOverrides&&n.applyObjcOverrides()})).catch(n)},beforeRouteUpdate(e,t,n){e.path===t.path&&e.query.language===j["a"].objectiveC.key.url&&this.objcOverrides?(this.applyObjcOverrides(),n()):Object(S["c"])(e,t)?Object(S["b"])(e,t,n).then(t=>{this.topicDataObjc=null,this.topicData=t,e.query.language===j["a"].objectiveC.key.url&&this.objcOverrides&&this.applyObjcOverrides(),n()}).catch(n):n()},created(){this.store.reset()},watch:{topicData(){this.$nextTick(()=>{this.newContentMounted()})}}},gc=yc,bc=Object(W["a"])(gc,a,r,!1,null,null,null);t["default"]=bc.exports},f8bd:function(e,t,n){},f8d9:function(e,t,n){"use strict";n("83f0")},fca4:function(e,t,n){"use strict";n("b876")},fde4:function(e,t,n){"use strict";n("f5b1")}}]); \ No newline at end of file diff --git a/docs/js/documentation-topic~topic~tutorials-overview.06df3b46.js b/docs/js/documentation-topic~topic~tutorials-overview.06df3b46.js new file mode 100644 index 0000000..c68dc89 --- /dev/null +++ b/docs/js/documentation-topic~topic~tutorials-overview.06df3b46.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["documentation-topic~topic~tutorials-overview"],{"05a1":function(e,t,n){},"0f00":function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"row"},[e._t("default")],2)},s=[],r={name:"GridRow"},a=r,o=(n("2224"),n("2877")),c=Object(o["a"])(a,i,s,!1,null,"be73599c",null);t["a"]=c.exports},1020:function(e,t){var n={exports:{}};function i(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(t){var n=e[t];"object"!=typeof n||Object.isFrozen(n)||i(n)})),e}n.exports=i,n.exports.default=i;var s=n.exports;class r{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function a(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function o(e,...t){const n=Object.create(null);for(const i in e)n[i]=e[i];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}const c="",l=e=>!!e.kind,u=(e,{prefix:t})=>{if(e.includes(".")){const n=e.split(".");return[`${t}${n.shift()}`,...n.map((e,t)=>`${e}${"_".repeat(t+1)}`)].join(" ")}return`${t}${e}`};class d{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=a(e)}openNode(e){if(!l(e))return;let t=e.kind;t=e.sublanguage?"language-"+t:u(t,{prefix:this.classPrefix}),this.span(t)}closeNode(e){l(e)&&(this.buffer+=c)}value(){return this.buffer}span(e){this.buffer+=``}}class h{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t={kind:e,children:[]};this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){while(this.closeNode());}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return"string"===typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach(t=>this._walk(e,t)),e.closeNode(t)),e}static _collapse(e){"string"!==typeof e&&e.children&&(e.children.every(e=>"string"===typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{h._collapse(e)}))}}class p extends h{constructor(e){super(),this.options=e}addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){const e=new d(this,this.options);return e.value()}finalize(){return!0}}function f(e){return e?"string"===typeof e?e:e.source:null}function g(e){return v("(?=",e,")")}function m(e){return v("(?:",e,")*")}function b(e){return v("(?:",e,")?")}function v(...e){const t=e.map(e=>f(e)).join("");return t}function y(e){const t=e[e.length-1];return"object"===typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}function w(...e){const t=y(e),n="("+(t.capture?"":"?:")+e.map(e=>f(e)).join("|")+")";return n}function x(e){return new RegExp(e.toString()+"|").exec("").length-1}function E(e,t){const n=e&&e.exec(t);return n&&0===n.index}const _=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function k(e,{joinWith:t}){let n=0;return e.map(e=>{n+=1;const t=n;let i=f(e),s="";while(i.length>0){const e=_.exec(i);if(!e){s+=i;break}s+=i.substring(0,e.index),i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+String(Number(e[1])+t):(s+=e[0],"("===e[0]&&n++)}return s}).map(e=>`(${e})`).join(t)}const j=/\b\B/,T="[a-zA-Z]\\w*",C="[a-zA-Z_]\\w*",S="\\b\\d+(\\.\\d+)?",O="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",N="\\b(0b[01]+)",L="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",I=(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=v(t,/.*\b/,e.binary,/\b.*/)),o({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},A={begin:"\\\\[\\s\\S]",relevance:0},B={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[A]},M={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[A]},$={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},R=function(e,t,n={}){const i=o({scope:"comment",begin:e,end:t,contains:[]},n);i.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const s=w("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return i.contains.push({begin:v(/[ ]+/,"(",s,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i},D=R("//","$"),P=R("/\\*","\\*/"),F=R("#","$"),H={scope:"number",begin:S,relevance:0},q={scope:"number",begin:O,relevance:0},W={scope:"number",begin:N,relevance:0},V={begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[A,{begin:/\[/,end:/\]/,relevance:0,contains:[A]}]}]},U={scope:"title",begin:T,relevance:0},z={scope:"title",begin:C,relevance:0},G={begin:"\\.\\s*"+C,relevance:0},K=function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})};var Y=Object.freeze({__proto__:null,MATCH_NOTHING_RE:j,IDENT_RE:T,UNDERSCORE_IDENT_RE:C,NUMBER_RE:S,C_NUMBER_RE:O,BINARY_NUMBER_RE:N,RE_STARTERS_RE:L,SHEBANG:I,BACKSLASH_ESCAPE:A,APOS_STRING_MODE:B,QUOTE_STRING_MODE:M,PHRASAL_WORDS_MODE:$,COMMENT:R,C_LINE_COMMENT_MODE:D,C_BLOCK_COMMENT_MODE:P,HASH_COMMENT_MODE:F,NUMBER_MODE:H,C_NUMBER_MODE:q,BINARY_NUMBER_MODE:W,REGEXP_MODE:V,TITLE_MODE:U,UNDERSCORE_TITLE_MODE:z,METHOD_GUARD:G,END_SAME_AS_BEGIN:K});function X(e,t){const n=e.input[e.index-1];"."===n&&t.ignoreMatch()}function Z(e,t){void 0!==e.className&&(e.scope=e.className,delete e.className)}function J(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=X,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function Q(e,t){Array.isArray(e.illegal)&&(e.illegal=w(...e.illegal))}function ee(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function te(e,t){void 0===e.relevance&&(e.relevance=1)}const ne=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const n=Object.assign({},e);Object.keys(e).forEach(t=>{delete e[t]}),e.keywords=n.keywords,e.begin=v(n.beforeMatch,g(n.begin)),e.starts={relevance:0,contains:[Object.assign(n,{endsParent:!0})]},e.relevance=0,delete n.beforeMatch},ie=["of","and","for","in","not","or","if","then","parent","list","value"],se="keyword";function re(e,t,n=se){const i=Object.create(null);return"string"===typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((function(n){Object.assign(i,re(e[n],t,n))})),i;function s(e,n){t&&(n=n.map(e=>e.toLowerCase())),n.forEach((function(t){const n=t.split("|");i[n[0]]=[e,ae(n[0],n[1])]}))}}function ae(e,t){return t?Number(t):oe(e)?0:1}function oe(e){return ie.includes(e.toLowerCase())}const ce={},le=e=>{console.error(e)},ue=(e,...t)=>{console.log("WARN: "+e,...t)},de=(e,t)=>{ce[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),ce[`${e}/${t}`]=!0)},he=new Error;function pe(e,t,{key:n}){let i=0;const s=e[n],r={},a={};for(let o=1;o<=t.length;o++)a[o+i]=s[o],r[o+i]=!0,i+=x(t[o-1]);e[n]=a,e[n]._emit=r,e[n]._multi=!0}function fe(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw le("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),he;if("object"!==typeof e.beginScope||null===e.beginScope)throw le("beginScope must be object"),he;pe(e,e.begin,{key:"beginScope"}),e.begin=k(e.begin,{joinWith:""})}}function ge(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw le("skip, excludeEnd, returnEnd not compatible with endScope: {}"),he;if("object"!==typeof e.endScope||null===e.endScope)throw le("endScope must be object"),he;pe(e,e.end,{key:"endScope"}),e.end=k(e.end,{joinWith:""})}}function me(e){e.scope&&"object"===typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,delete e.scope)}function be(e){me(e),"string"===typeof e.beginScope&&(e.beginScope={_wrap:e.beginScope}),"string"===typeof e.endScope&&(e.endScope={_wrap:e.endScope}),fe(e),ge(e)}function ve(e){function t(t,n){return new RegExp(f(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=x(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=t(k(e,{joinWith:"|"}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex((e,t)=>t>0&&void 0!==e),i=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,i)}}class i{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n;return this.rules.slice(e).forEach(([e,n])=>t.addRule(e,n)),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}function s(e){const t=new i;return e.contains.forEach(e=>t.addRule(e.begin,{rule:e,type:"begin"})),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}function r(n,i){const a=n;if(n.isCompiled)return a;[Z,ee,be,ne].forEach(e=>e(n,i)),e.compilerExtensions.forEach(e=>e(n,i)),n.__beforeBegin=null,[J,Q,te].forEach(e=>e(n,i)),n.isCompiled=!0;let o=null;return"object"===typeof n.keywords&&n.keywords.$pattern&&(n.keywords=Object.assign({},n.keywords),o=n.keywords.$pattern,delete n.keywords.$pattern),o=o||/\w+/,n.keywords&&(n.keywords=re(n.keywords,e.case_insensitive)),a.keywordPatternRe=t(o,!0),i&&(n.begin||(n.begin=/\B|\b/),a.beginRe=t(a.begin),n.end||n.endsWithParent||(n.end=/\B|\b/),n.end&&(a.endRe=t(a.end)),a.terminatorEnd=f(a.end)||"",n.endsWithParent&&i.terminatorEnd&&(a.terminatorEnd+=(n.end?"|":"")+i.terminatorEnd)),n.illegal&&(a.illegalRe=t(n.illegal)),n.contains||(n.contains=[]),n.contains=[].concat(...n.contains.map((function(e){return we("self"===e?n:e)}))),n.contains.forEach((function(e){r(e,a)})),n.starts&&r(n.starts,i),a.matcher=s(a),a}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=o(e.classNameAliases||{}),r(e)}function ye(e){return!!e&&(e.endsWithParent||ye(e.starts))}function we(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return o(e,{variants:null},t)}))),e.cachedVariants?e.cachedVariants:ye(e)?o(e,{starts:e.starts?o(e.starts):null}):Object.isFrozen(e)?o(e):e}var xe="11.3.1";class Ee extends Error{constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}const _e=a,ke=o,je=Symbol("nomatch"),Te=7,Ce=function(e){const t=Object.create(null),n=Object.create(null),i=[];let a=!0;const o="Could not find the language '{}', did you forget to load/include a language module?",c={disableAutodetect:!0,name:"Plain text",contains:[]};let l={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:p};function u(e){return l.noHighlightRe.test(e)}function d(e){let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";const n=l.languageDetectRe.exec(t);if(n){const t=B(n[1]);return t||(ue(o.replace("{}",n[1])),ue("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}return t.split(/\s+/).find(e=>u(e)||B(e))}function h(e,t,n){let i="",s="";"object"===typeof t?(i=e,n=t.ignoreIllegals,s=t.language):(de("10.7.0","highlight(lang, code, ...args) has been deprecated."),de("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),s=e,i=t),void 0===n&&(n=!0);const r={code:i,language:s};P("before:highlight",r);const a=r.result?r.result:f(r.language,r.code,n);return a.code=r.code,P("after:highlight",a),a}function f(e,n,i,s){const c=Object.create(null);function u(e,t){return e.keywords[t]}function d(){if(!O.keywords)return void L.addText(I);let e=0;O.keywordPatternRe.lastIndex=0;let t=O.keywordPatternRe.exec(I),n="";while(t){n+=I.substring(e,t.index);const i=T.case_insensitive?t[0].toLowerCase():t[0],s=u(O,i);if(s){const[e,r]=s;if(L.addText(n),n="",c[i]=(c[i]||0)+1,c[i]<=Te&&(A+=r),e.startsWith("_"))n+=t[0];else{const n=T.classNameAliases[e]||e;L.addKeyword(t[0],n)}}else n+=t[0];e=O.keywordPatternRe.lastIndex,t=O.keywordPatternRe.exec(I)}n+=I.substr(e),L.addText(n)}function h(){if(""===I)return;let e=null;if("string"===typeof O.subLanguage){if(!t[O.subLanguage])return void L.addText(I);e=f(O.subLanguage,I,!0,N[O.subLanguage]),N[O.subLanguage]=e._top}else e=x(I,O.subLanguage.length?O.subLanguage:null);O.relevance>0&&(A+=e.relevance),L.addSublanguage(e._emitter,e.language)}function p(){null!=O.subLanguage?h():d(),I=""}function g(e,t){let n=1;while(void 0!==t[n]){if(!e._emit[n]){n++;continue}const i=T.classNameAliases[e[n]]||e[n],s=t[n];i?L.addKeyword(s,i):(I=s,d(),I=""),n++}}function m(e,t){return e.scope&&"string"===typeof e.scope&&L.openNode(T.classNameAliases[e.scope]||e.scope),e.beginScope&&(e.beginScope._wrap?(L.addKeyword(I,T.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),I=""):e.beginScope._multi&&(g(e.beginScope,t),I="")),O=Object.create(e,{parent:{value:O}}),O}function b(e,t,n){let i=E(e.endRe,n);if(i){if(e["on:end"]){const n=new r(e);e["on:end"](t,n),n.isMatchIgnored&&(i=!1)}if(i){while(e.endsParent&&e.parent)e=e.parent;return e}}if(e.endsWithParent)return b(e.parent,t,n)}function v(e){return 0===O.matcher.regexIndex?(I+=e[0],1):(R=!0,0)}function y(e){const t=e[0],n=e.rule,i=new r(n),s=[n.__beforeBegin,n["on:begin"]];for(const r of s)if(r&&(r(e,i),i.isMatchIgnored))return v(t);return n.skip?I+=t:(n.excludeBegin&&(I+=t),p(),n.returnBegin||n.excludeBegin||(I=t)),m(n,e),n.returnBegin?0:t.length}function w(e){const t=e[0],i=n.substr(e.index),s=b(O,e,i);if(!s)return je;const r=O;O.endScope&&O.endScope._wrap?(p(),L.addKeyword(t,O.endScope._wrap)):O.endScope&&O.endScope._multi?(p(),g(O.endScope,e)):r.skip?I+=t:(r.returnEnd||r.excludeEnd||(I+=t),p(),r.excludeEnd&&(I=t));do{O.scope&&L.closeNode(),O.skip||O.subLanguage||(A+=O.relevance),O=O.parent}while(O!==s.parent);return s.starts&&m(s.starts,e),r.returnEnd?0:t.length}function _(){const e=[];for(let t=O;t!==T;t=t.parent)t.scope&&e.unshift(t.scope);e.forEach(e=>L.openNode(e))}let k={};function j(t,s){const r=s&&s[0];if(I+=t,null==r)return p(),0;if("begin"===k.type&&"end"===s.type&&k.index===s.index&&""===r){if(I+=n.slice(s.index,s.index+1),!a){const t=new Error(`0 width match regex (${e})`);throw t.languageName=e,t.badRule=k.rule,t}return 1}if(k=s,"begin"===s.type)return y(s);if("illegal"===s.type&&!i){const e=new Error('Illegal lexeme "'+r+'" for mode "'+(O.scope||"")+'"');throw e.mode=O,e}if("end"===s.type){const e=w(s);if(e!==je)return e}if("illegal"===s.type&&""===r)return 1;if($>1e5&&$>3*s.index){const e=new Error("potential infinite loop, way more iterations than matches");throw e}return I+=r,r.length}const T=B(e);if(!T)throw le(o.replace("{}",e)),new Error('Unknown language: "'+e+'"');const C=ve(T);let S="",O=s||C;const N={},L=new l.__emitter(l);_();let I="",A=0,M=0,$=0,R=!1;try{for(O.matcher.considerAll();;){$++,R?R=!1:O.matcher.considerAll(),O.matcher.lastIndex=M;const e=O.matcher.exec(n);if(!e)break;const t=n.substring(M,e.index),i=j(t,e);M=e.index+i}return j(n.substr(M)),L.closeAllNodes(),L.finalize(),S=L.toHTML(),{language:e,value:S,relevance:A,illegal:!1,_emitter:L,_top:O}}catch(D){if(D.message&&D.message.includes("Illegal"))return{language:e,value:_e(n),illegal:!0,relevance:0,_illegalBy:{message:D.message,index:M,context:n.slice(M-100,M+100),mode:D.mode,resultSoFar:S},_emitter:L};if(a)return{language:e,value:_e(n),illegal:!1,relevance:0,errorRaised:D,_emitter:L,_top:O};throw D}}function y(e){const t={value:_e(e),illegal:!1,relevance:0,_top:c,_emitter:new l.__emitter(l)};return t._emitter.addText(e),t}function x(e,n){n=n||l.languages||Object.keys(t);const i=y(e),s=n.filter(B).filter($).map(t=>f(t,e,!1));s.unshift(i);const r=s.sort((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(B(e.language).supersetOf===t.language)return 1;if(B(t.language).supersetOf===e.language)return-1}return 0}),[a,o]=r,c=a;return c.secondBest=o,c}function _(e,t,i){const s=t&&n[t]||i;e.classList.add("hljs"),e.classList.add("language-"+s)}function k(e){let t=null;const n=d(e);if(u(n))return;if(P("before:highlightElement",{el:e,language:n}),e.children.length>0&&(l.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/issues/2886"),console.warn(e)),l.throwUnescapedHTML)){const t=new Ee("One of your code blocks includes unescaped HTML.",e.innerHTML);throw t}t=e;const i=t.textContent,s=n?h(i,{language:n,ignoreIllegals:!0}):x(i);e.innerHTML=s.value,_(e,n,s.language),e.result={language:s.language,re:s.relevance,relevance:s.relevance},s.secondBest&&(e.secondBest={language:s.secondBest.language,relevance:s.secondBest.relevance}),P("after:highlightElement",{el:e,result:s,text:i})}function j(e){l=ke(l,e)}const T=()=>{O(),de("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function C(){O(),de("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let S=!1;function O(){if("loading"===document.readyState)return void(S=!0);const e=document.querySelectorAll(l.cssSelector);e.forEach(k)}function N(){S&&O()}function L(n,i){let s=null;try{s=i(e)}catch(r){if(le("Language definition for '{}' could not be registered.".replace("{}",n)),!a)throw r;le(r),s=c}s.name||(s.name=n),t[n]=s,s.rawDefinition=i.bind(null,e),s.aliases&&M(s.aliases,{languageName:n})}function I(e){delete t[e];for(const t of Object.keys(n))n[t]===e&&delete n[t]}function A(){return Object.keys(t)}function B(e){return e=(e||"").toLowerCase(),t[e]||t[n[e]]}function M(e,{languageName:t}){"string"===typeof e&&(e=[e]),e.forEach(e=>{n[e.toLowerCase()]=t})}function $(e){const t=B(e);return t&&!t.disableAutodetect}function R(e){e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{e["before:highlightBlock"](Object.assign({block:t.el},t))}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{e["after:highlightBlock"](Object.assign({block:t.el},t))})}function D(e){R(e),i.push(e)}function P(e,t){const n=e;i.forEach((function(e){e[n]&&e[n](t)}))}function F(e){return de("10.7.0","highlightBlock will be removed entirely in v12.0"),de("10.7.0","Please use highlightElement now."),k(e)}"undefined"!==typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",N,!1),Object.assign(e,{highlight:h,highlightAuto:x,highlightAll:O,highlightElement:k,highlightBlock:F,configure:j,initHighlighting:T,initHighlightingOnLoad:C,registerLanguage:L,unregisterLanguage:I,listLanguages:A,getLanguage:B,registerAliases:M,autoDetection:$,inherit:ke,addPlugin:D}),e.debugMode=function(){a=!1},e.safeMode=function(){a=!0},e.versionString=xe,e.regex={concat:v,lookahead:g,either:w,optional:b,anyNumberOfTimes:m};for(const r in Y)"object"===typeof Y[r]&&s(Y[r]);return Object.assign(e,Y),e};var Se=Ce({});e.exports=Se,Se.HighlightJS=Se,Se.default=Se},1417:function(e,t,n){var i={"./markdown":["84cb","highlight-js-custom-markdown"],"./markdown.js":["84cb","highlight-js-custom-markdown"],"./swift":["81c8","highlight-js-custom-swift"],"./swift.js":["81c8","highlight-js-custom-swift"]};function s(e){if(!n.o(i,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=i[e],s=t[0];return n.e(t[1]).then((function(){return n(s)}))}s.keys=function(){return Object.keys(i)},s.id="1417",e.exports=s},"146e":function(e,t,n){"use strict";var i=n("3908"),s=n("8a61");t["a"]={mixins:[s["a"]],async mounted(){this.$route.hash&&(await Object(i["a"])(8),this.scrollToElement(this.$route.hash))}}},2224:function(e,t,n){"use strict";n("b392")},"25a9":function(e,t,n){"use strict";n.d(t,"b",(function(){return m})),n.d(t,"c",(function(){return b})),n.d(t,"a",(function(){return v}));var i=n("748c"),s=n("d26a");const r={major:0,minor:2,patch:0};function a({major:e,minor:t,patch:n}){return[e,t,n].join(".")}const o=a(r);function c(e){return`[Swift-DocC-Render] The render node version for this page has a higher minor version (${e}) than Swift-DocC-Render supports (${o}). Compatibility is not guaranteed.`}const l=e=>`[Swift-DocC-Render] The render node version for this page (${e}) has a different major version component than Swift-DocC-Render supports (${o}). Compatibility is not guaranteed.`;function u(e){const{major:t,minor:n}=e,{major:i,minor:s}=r;return t!==i?l(a(e)):n>s?c(a(e)):""}function d(e){if(!e)return;const t=u(e);t&&console.warn(t)}var h=n("6842");class p extends Error{constructor(e){super("Unable to fetch data"),this.route=e}}async function f(e,t={}){function n(e){return("ide"!==Object({NODE_ENV:"production",VUE_APP_TITLE:"Documentation",BASE_URL:"{{BASE_PATH}}/"}).VUE_APP_TARGET||0!==e.status)&&!e.ok}const i=new URL(e,window.location.href),r=Object(s["c"])(t);r&&(i.search=r);const a=await fetch(i.href);if(n(a))throw a;const o=await a.json();return d(o.schemaVersion),o}function g(e){const t=e.replace(/\/$/,"");return Object(i["c"])([h["a"],"data",t])+".json"}async function m(e,t,n){const i=g(e.path);let s;try{s=await f(i,e.query)}catch(r){if("ide"===Object({NODE_ENV:"production",VUE_APP_TITLE:"Documentation",BASE_URL:"{{BASE_PATH}}/"}).VUE_APP_TARGET)throw console.error(r),!1;r.status&&404===r.status?n({name:"not-found",params:[e.path]}):n(new p(e))}return s}function b(e,t){return!Object(s["a"])(e,t)}function v(e){return JSON.parse(JSON.stringify(e))}},2976:function(e,t,n){},"2ab3":function(e,t,n){var i={"./bash":["f0f8","highlight-js-bash"],"./bash.js":["f0f8","highlight-js-bash"],"./c":["1fe5","highlight-js-c"],"./c.js":["1fe5","highlight-js-c"],"./cpp":["0209","highlight-js-cpp"],"./cpp.js":["0209","highlight-js-cpp"],"./css":["ee8c","highlight-js-css"],"./css.js":["ee8c","highlight-js-css"],"./diff":["48b8","highlight-js-diff"],"./diff.js":["48b8","highlight-js-diff"],"./http":["c01d","highlight-js-http"],"./http.js":["c01d","highlight-js-http"],"./java":["332f","highlight-js-java"],"./java.js":["332f","highlight-js-java"],"./javascript":["4dd1","highlight-js-javascript"],"./javascript.js":["4dd1","highlight-js-javascript"],"./json":["5ad2","highlight-js-json"],"./json.js":["5ad2","highlight-js-json"],"./llvm":["7c30","highlight-js-llvm"],"./llvm.js":["7c30","highlight-js-llvm"],"./markdown":["04b0","highlight-js-markdown"],"./markdown.js":["04b0","highlight-js-markdown"],"./objectivec":["9bf2","highlight-js-objectivec"],"./objectivec.js":["9bf2","highlight-js-objectivec"],"./perl":["6a51","highlight-js-perl"],"./perl.js":["6a51","highlight-js-perl"],"./php":["2907","highlight-js-php"],"./php.js":["2907","highlight-js-php"],"./python":["9510","highlight-js-python"],"./python.js":["9510","highlight-js-python"],"./ruby":["82cb","highlight-js-ruby"],"./ruby.js":["82cb","highlight-js-ruby"],"./scss":["6113","highlight-js-scss"],"./scss.js":["6113","highlight-js-scss"],"./shell":["b65b","highlight-js-shell"],"./shell.js":["b65b","highlight-js-shell"],"./swift":["2a39","highlight-js-swift"],"./swift.js":["2a39","highlight-js-swift"],"./xml":["8dcb","highlight-js-xml"],"./xml.js":["8dcb","highlight-js-xml"]};function s(e){if(!n.o(i,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=i[e],s=t[0];return n.e(t[1]).then((function(){return n.t(s,7)}))}s.keys=function(){return Object.keys(i)},s.id="2ab3",e.exports=s},"2d80":function(e,t,n){"use strict";n("3705")},"30b0":function(e,t,n){},"34b0":function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"inline-chevron-right-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M2.964 1.366l0.649-0.76 7.426 6.343-7.423 6.445-0.655-0.755 6.545-5.683-6.542-5.59z"}})])},s=[],r=n("be08"),a={name:"InlineChevronRightIcon",components:{SVGIcon:r["a"]}},o=a,c=n("2877"),l=Object(c["a"])(o,i,s,!1,null,null,null);t["a"]=l.exports},3705:function(e,t,n){},"3b8f":function(e,t,n){},"47cc":function(e,t,n){},"4c7a":function(e,t,n){},"502c":function(e,t,n){"use strict";n("e1d1")},"50fc":function(e,t,n){},"52e4":function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("WordBreak",{attrs:{tag:"code"}},[e._t("default")],2)},s=[],r=n("7b1f"),a={name:"CodeVoice",components:{WordBreak:r["a"]}},o=a,c=(n("8c92"),n("2877")),l=Object(c["a"])(o,i,s,!1,null,"05f4a5b7",null);t["a"]=l.exports},5677:function(e,t,n){"use strict";var i=n("e3ab"),s=n("7b69"),r=n("52e4"),a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"DictionaryExample"},[e._t("default"),n("CollapsibleCodeListing",{attrs:{content:e.example.content,showLineNumbers:""}})],2)},o=[],c=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"collapsible-code-listing",class:{"single-line":1===e.content[0].code.length}},[n("pre",[n("div",e._l(this.content,(function(t,i){return n("div",{key:i,class:["container-general",{collapsible:!0===t.collapsible},{collapsed:!0===t.collapsible&&e.collapsed}]},e._l(t.code,(function(t,i){return n("code",{key:i,staticClass:"code-line-container"},[e._v("\n "),n("div",{directives:[{name:"show",rawName:"v-show",value:e.showLineNumbers,expression:"showLineNumbers"}],staticClass:"code-number"}),e._v("\n "),n("div",{staticClass:"code-line"},[e._v(e._s(t))]),e._v("\n ")])})),0)})),0)])])},l=[],u={name:"CollapsibleCodeListing",props:{collapsed:{type:Boolean,required:!1},content:{type:Array,required:!0},showLineNumbers:{type:Boolean,default:()=>!0}}},d=u,h=(n("c919"),n("2877")),p=Object(h["a"])(d,c,l,!1,null,"369467b5",null),f=p.exports,g={name:"DictionaryExample",components:{CollapsibleCodeListing:f},props:{example:{type:Object,required:!0}}},m=g,b=Object(h["a"])(m,a,o,!1,null,null,null),v=b.exports,y=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Row",{staticClass:"endpoint-example"},[n("Column",{staticClass:"example-code"},[e._t("default"),n("Tabnav",{model:{value:e.currentTab,callback:function(t){e.currentTab=t},expression:"currentTab"}},[n("TabnavItem",{attrs:{value:e.Tab.request}},[e._v(e._s(e.Tab.request))]),n("TabnavItem",{attrs:{value:e.Tab.response}},[e._v(e._s(e.Tab.response))])],1),n("div",{staticClass:"output"},[e.isCurrent(e.Tab.request)?n("div",{staticClass:"code"},[n("CollapsibleCodeListing",e._b({attrs:{collapsed:e.isCollapsed,showLineNumbers:""}},"CollapsibleCodeListing",e.request,!1))],1):e._e(),e.isCurrent(e.Tab.response)?n("div",{staticClass:"code"},[n("CollapsibleCodeListing",e._b({attrs:{collapsed:e.isCollapsed,showLineNumbers:""}},"CollapsibleCodeListing",e.response,!1))],1):e._e()]),e.isCollapsible?n("div",{staticClass:"controls"},[e.isCollapsed?n("a",{staticClass:"toggle",attrs:{href:"#"},on:{click:function(t){return t.preventDefault(),e.showMore.apply(null,arguments)}}},[n("InlinePlusCircleSolidIcon",{staticClass:"control-icon icon-inline"}),e._v(" More ")],1):n("a",{staticClass:"toggle",attrs:{href:"#"},on:{click:function(t){return t.preventDefault(),e.showLess.apply(null,arguments)}}},[n("InlineMinusCircleSolidIcon",{staticClass:"control-icon icon-inline"}),e._v(" Less ")],1)]):e._e()],2)],1)},w=[],x=n("0f00"),E=n("620a"),_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("nav",{staticClass:"tabnav"},[n("ul",{staticClass:"tabnav-items"},[e._t("default")],2)])},k=[];const j="tabnavData";var T={name:"Tabnav",constants:{ProvideKey:j},provide(){const e={selectTab:this.selectTab};return Object.defineProperty(e,"activeTab",{enumerable:!0,get:()=>this.value}),{[j]:e}},props:{value:{type:String,required:!0}},methods:{selectTab(e){this.$emit("input",e)}}},C=T,S=(n("bab1"),Object(h["a"])(C,_,k,!1,null,"42371214",null)),O=S.exports,N=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"tabnav-item"},[n("a",{staticClass:"tabnav-link",class:{active:e.isActive},attrs:{href:"#"},on:{click:function(t){return t.preventDefault(),e.tabnavData.selectTab(e.value)}}},[e._t("default")],2)])},L=[],I={name:"TabnavItem",inject:{tabnavData:{default:{activeTab:null,selectTab:()=>{}}}},props:{value:{type:String,default:""}},computed:{isActive({tabnavData:e,value:t}){return e.activeTab===t}}},A=I,B=(n("c064"),Object(h["a"])(A,N,L,!1,null,"723a9588",null)),M=B.exports,$=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"inline-plus-circle-solid-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M7.005 0.5h-0.008c-1.791 0.004-3.412 0.729-4.589 1.9l0-0c-1.179 1.177-1.908 2.803-1.908 4.6 0 3.59 2.91 6.5 6.5 6.5s6.5-2.91 6.5-6.5c0-3.587-2.906-6.496-6.492-6.5h-0zM4.005 7.52v-1h2.5v-2.51h1v2.51h2.5v1h-2.501v2.49h-1v-2.49z"}})])},R=[],D=n("be08"),P={name:"InlinePlusCircleSolidIcon",components:{SVGIcon:D["a"]}},F=P,H=Object(h["a"])(F,$,R,!1,null,null,null),q=H.exports,W=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"inline-minus-circle-solid-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"m6.98999129.48999129c3.58985091 0 6.50000001 2.91014913 6.50000001 6.5 0 3.58985091-2.9101491 6.50000001-6.50000001 6.50000001-3.58985087 0-6.5-2.9101491-6.5-6.50000001 0-3.58985087 2.91014913-6.5 6.5-6.5zm3 6.02001742h-6v1h6z","fill-rule":"evenodd"}})])},V=[],U={name:"InlineMinusCircleSolidIcon",components:{SVGIcon:D["a"]}},z=U,G=Object(h["a"])(z,W,V,!1,null,null,null),K=G.exports;const Y={request:"Request",response:"Response"};var X={name:"EndpointExample",components:{InlineMinusCircleSolidIcon:K,InlinePlusCircleSolidIcon:q,TabnavItem:M,Tabnav:O,CollapsibleCodeListing:f,Row:x["a"],Column:E["a"]},constants:{Tab:Y},props:{request:{type:Object,required:!0},response:{type:Object,required:!0}},data(){return{isCollapsed:!0,currentTab:Y.request}},computed:{Tab:()=>Y,isCollapsible:({response:e,request:t,currentTab:n})=>{const i={[Y.request]:t.content,[Y.response]:e.content}[n]||[];return i.some(({collapsible:e})=>e)}},methods:{isCurrent(e){return this.currentTab===e},showMore(){this.isCollapsed=!1},showLess(){this.isCollapsed=!0}}},Z=X,J=(n("9a2b"),Object(h["a"])(Z,y,w,!1,null,"6197ce3f",null)),Q=J.exports,ee=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("figure",{attrs:{id:e.anchor}},[e._t("default")],2)},te=[],ne={name:"Figure",props:{anchor:{type:String,required:!0}}},ie=ne,se=(n("57ea"),Object(h["a"])(ie,ee,te,!1,null,"7be42fb4",null)),re=se.exports,ae=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("figcaption",{staticClass:"caption"},[n("strong",[e._v(e._s(e.title))]),e._v(" "),e._t("default")],2)},oe=[],ce={name:"FigureCaption",props:{title:{type:String,required:!0}}},le=ce,ue=(n("e7fb"),Object(h["a"])(le,ae,oe,!1,null,"0bcb8b58",null)),de=ue.exports,he=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ImageAsset",{attrs:{alt:e.alt,variants:e.variants}})},pe=[],fe=n("8bd9"),ge={name:"InlineImage",components:{ImageAsset:fe["a"]},props:{alt:{type:String,default:""},variants:{type:Array,required:!0}}},me=ge,be=(n("cb92"),Object(h["a"])(me,he,pe,!1,null,"3a939631",null)),ve=be.exports,ye=n("86d8"),we=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"table-wrapper"},[n("table",[e._t("default")],2)])},xe=[],Ee={name:"Table"},_e=Ee,ke=(n("72af"),n("90f3"),Object(h["a"])(_e,we,xe,!1,null,"358dcd5e",null)),je=ke.exports,Te=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("s",[e._t("default")],2)},Ce=[],Se={name:"StrikeThrough"},Oe=Se,Ne=(n("830f"),Object(h["a"])(Oe,Te,Ce,!1,null,"eb91ce54",null)),Le=Ne.exports;const Ie={aside:"aside",codeListing:"codeListing",endpointExample:"endpointExample",heading:"heading",orderedList:"orderedList",paragraph:"paragraph",table:"table",termList:"termList",unorderedList:"unorderedList",dictionaryExample:"dictionaryExample"},Ae={codeVoice:"codeVoice",emphasis:"emphasis",image:"image",inlineHead:"inlineHead",link:"link",newTerm:"newTerm",reference:"reference",strong:"strong",text:"text",superscript:"superscript",subscript:"subscript",strikethrough:"strikethrough"},Be={both:"both",column:"column",none:"none",row:"row"};function Me(e,t){const n=n=>n.map(Me(e,t)),a=t=>t.map(t=>e("li",{},n(t.content))),o=(t,i=Be.none)=>{switch(i){case Be.both:{const[i,...s]=t;return[e("thead",{},[e("tr",{},i.map(t=>e("th",{attrs:{scope:"col"}},n(t))))]),e("tbody",{},s.map(([t,...i])=>e("tr",{},[e("th",{attrs:{scope:"row"}},n(t)),...i.map(t=>e("td",{},n(t)))])))]}case Be.column:return[e("tbody",{},t.map(([t,...i])=>e("tr",{},[e("th",{attrs:{scope:"row"}},n(t)),...i.map(t=>e("td",{},n(t)))])))];case Be.row:{const[i,...s]=t;return[e("thead",{},[e("tr",{},i.map(t=>e("th",{attrs:{scope:"col"}},n(t))))]),e("tbody",{},s.map(t=>e("tr",{},t.map(t=>e("td",{},n(t))))))]}default:return[e("tbody",{},t.map(t=>e("tr",{},t.map(t=>e("td",{},n(t))))))]}},c=({metadata:{abstract:t,anchor:i,title:s},...r})=>e(re,{props:{anchor:i}},[...s&&t&&t.length?[e(de,{props:{title:s}},n(t))]:[],n([r])]);return function(l){switch(l.type){case Ie.aside:{const t={kind:l.style,name:l.name};return e(i["a"],{props:t},n(l.content))}case Ie.codeListing:{if(l.metadata&&l.metadata.anchor)return c(l);const t={syntax:l.syntax,fileType:l.fileType,content:l.code,showLineNumbers:l.showLineNumbers};return e(s["a"],{props:t})}case Ie.endpointExample:{const t={request:l.request,response:l.response};return e(Q,{props:t},n(l.summary||[]))}case Ie.heading:return e("h"+l.level,{attrs:{id:l.anchor}},l.text);case Ie.orderedList:return e("ol",{},a(l.items));case Ie.paragraph:return e("p",{},n(l.inlineContent));case Ie.table:return l.metadata&&l.metadata.anchor?c(l):e(je,{},o(l.rows,l.header));case Ie.termList:return e("dl",{},l.items.map(({term:t,definition:i})=>[e("dt",{},n(t.inlineContent)),e("dd",{},n(i.content))]));case Ie.unorderedList:return e("ul",{},a(l.items));case Ie.dictionaryExample:{const t={example:l.example};return e(v,{props:t},n(l.summary||[]))}case Ae.codeVoice:return e(r["a"],{},l.code);case Ae.emphasis:case Ae.newTerm:return e("em",n(l.inlineContent));case Ae.image:{if(l.metadata&&l.metadata.anchor)return c(l);const n=t[l.identifier];return n?e(ve,{props:{alt:n.alt,variants:n.variants}}):null}case Ae.link:return e("a",{attrs:{href:l.destination}},l.title);case Ae.reference:{const i=t[l.identifier];if(!i)return null;const s=l.overridingTitleInlineContent||i.titleInlineContent,r=l.overridingTitle||i.title;return e(ye["a"],{props:{url:i.url,kind:i.kind,role:i.role,isActive:l.isActive,ideTitle:i.ideTitle,titleStyle:i.titleStyle}},s?n(s):r)}case Ae.strong:case Ae.inlineHead:return e("strong",n(l.inlineContent));case Ae.text:return l.text;case Ae.superscript:return e("sup",n(l.inlineContent));case Ae.subscript:return e("sub",n(l.inlineContent));case Ae.strikethrough:return e(Le,n(l.inlineContent));default:return null}}}var $e,Re,De={name:"ContentNode",constants:{TableHeaderStyle:Be},render:function(e){return e(this.tag,{class:"content"},this.content.map(Me(e,this.references),this))},inject:{references:{default(){return{}}}},props:{content:{type:Array,required:!0},tag:{type:String,default:()=>"div"}},methods:{map(e){function t(n=[]){return n.map(n=>{switch(n.type){case Ie.aside:return e({...n,content:t(n.content)});case Ie.dictionaryExample:return e({...n,summary:t(n.summary)});case Ie.paragraph:case Ae.emphasis:case Ae.strong:case Ae.inlineHead:case Ae.superscript:case Ae.subscript:case Ae.strikethrough:case Ae.newTerm:return e({...n,inlineContent:t(n.inlineContent)});case Ie.orderedList:case Ie.unorderedList:return e({...n,items:n.items.map(e=>({...e,content:t(e.content)}))});case Ie.table:return e({...n,rows:n.rows.map(e=>e.map(t))});case Ie.termList:return e({...n,items:n.items.map(e=>({...e,term:{inlineContent:t(e.term.inlineContent)},definition:{content:t(e.definition.content)}}))});default:return e(n)}})}return t(this.content)},forEach(e){function t(n=[]){n.forEach(n=>{switch(e(n),n.type){case Ie.aside:t(n.content);break;case Ie.paragraph:case Ae.emphasis:case Ae.strong:case Ae.inlineHead:case Ae.newTerm:case Ae.superscript:case Ae.subscript:case Ae.strikethrough:t(n.inlineContent);break;case Ie.orderedList:case Ie.unorderedList:n.items.forEach(e=>t(e.content));break;case Ie.dictionaryExample:t(n.summary);break;case Ie.table:n.rows.forEach(e=>{e.forEach(t)});break;case Ie.termList:n.items.forEach(e=>{t(e.term.inlineContent),t(e.definition.content)});break}})}return t(this.content)}},BlockType:Ie,InlineType:Ae},Pe=De,Fe=Object(h["a"])(Pe,$e,Re,!1,null,null,null);t["a"]=Fe.exports},"57ea":function(e,t,n){"use strict";n("971b")},"598a":function(e,t,n){},"620a":function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"col",class:e.classes},[e._t("default")],2)},s=[];const r=0,a=12,o=new Set(["large","medium","small"]),c=e=>({type:Object,default:()=>({}),validator:t=>Object.keys(t).every(n=>o.has(n)&&e(t[n]))}),l=c(e=>"boolean"===typeof e),u=c(e=>"number"===typeof e&&e>=r&&e<=a);var d={name:"GridColumn",props:{isCentered:l,isUnCentered:l,span:{...u,default:()=>({large:a})}},computed:{classes:function(){return{["large-"+this.span.large]:void 0!==this.span.large,["medium-"+this.span.medium]:void 0!==this.span.medium,["small-"+this.span.small]:void 0!==this.span.small,"large-centered":!!this.isCentered.large,"medium-centered":!!this.isCentered.medium,"small-centered":!!this.isCentered.small,"large-uncentered":!!this.isUnCentered.large,"medium-uncentered":!!this.isUnCentered.medium,"small-uncentered":!!this.isUnCentered.small}}}},h=d,p=(n("6e4a"),n("2877")),f=Object(p["a"])(h,i,s,!1,null,"2ee3ad8b",null);t["a"]=f.exports},"621f":function(e,t,n){"use strict";n("b1d4")},"63b8":function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return r}));const i={large:"large",medium:"medium",small:"small"},s={[i.small]:0,[i.medium]:1,[i.large]:2};function r(e,t){return s[e]>s[t]}},"66cd":function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));const i={article:"article",codeListing:"codeListing",collection:"collection",collectionGroup:"collectionGroup",containerSymbol:"containerSymbol",devLink:"devLink",dictionarySymbol:"dictionarySymbol",generic:"generic",link:"link",media:"media",pseudoCollection:"pseudoCollection",pseudoSymbol:"pseudoSymbol",restRequestSymbol:"restRequestSymbol",sampleCode:"sampleCode",symbol:"symbol",table:"table",learn:"learn",overview:"overview",project:"project",tutorial:"tutorial",resources:"resources"}},"6cc4":function(e,t,n){},"6e4a":function(e,t,n){"use strict";n("05a1")},"72af":function(e,t,n){"use strict";n("d541")},"72e7":function(e,t,n){"use strict";const i={up:"up",down:"down"};t["a"]={constants:{IntersectionDirections:i},data(){return{intersectionObserver:null,intersectionPreviousScrollY:0,intersectionScrollDirection:i.down}},computed:{intersectionThreshold(){const e=[];for(let t=0;t<=1;t+=.01)e.push(t);return e},intersectionRoot(){return null},intersectionRootMargin(){return"0px 0px 0px 0px"},intersectionObserverOptions(){return{root:this.intersectionRoot,rootMargin:this.intersectionRootMargin,threshold:this.intersectionThreshold}}},async mounted(){await n.e("chunk-2d0d3105").then(n.t.bind(null,"5abe",7)),this.intersectionObserver=new IntersectionObserver(e=>{this.detectIntersectionScrollDirection();const t=this.onIntersect;t?e.forEach(t):console.warn("onIntersect not implemented")},this.intersectionObserverOptions),this.getIntersectionTargets().forEach(e=>{this.intersectionObserver.observe(e)})},beforeDestroy(){this.intersectionObserver&&this.intersectionObserver.disconnect()},methods:{getIntersectionTargets(){return[this.$el]},detectIntersectionScrollDirection(){window.scrollYthis.intersectionPreviousScrollY&&(this.intersectionScrollDirection=i.up),this.intersectionPreviousScrollY=window.scrollY}}}},"748c":function(e,t,n){"use strict";n.d(t,"d",(function(){return s})),n.d(t,"a",(function(){return r})),n.d(t,"c",(function(){return a})),n.d(t,"b",(function(){return o}));var i=n("6842");function s(e){return e.reduce((e,t)=>(t.traits.includes("dark")?e.dark.push(t):e.light.push(t),e),{light:[],dark:[]})}function r(e){const t=["1x","2x","3x"];return t.reduce((t,n)=>{const i=e.find(e=>e.traits.includes(n));return i?t.concat({density:n,src:i.url,size:i.size}):t},[])}function a(e){const t="/",n=new RegExp(t+"+","g");return e.join(t).replace(n,t)}function o(e){return e&&"string"===typeof e&&!e.startsWith(i["a"])&&e.startsWith("/")?a([i["a"],e]):e}},"76ab":function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(e.resolvedComponent,e._b({tag:"component",staticClass:"button-cta",class:{"is-dark":e.isDark}},"component",e.componentProps,!1),[e._t("default")],2)},s=[],r=n("86d8"),a={name:"ButtonLink",components:{Reference:r["a"]},props:{url:{type:String,required:!1},isDark:{type:Boolean,default:!1}},computed:{resolvedComponent:({url:e})=>e?r["a"]:"button",componentProps:({url:e})=>e?{url:e}:{}}},o=a,c=(n("621f"),n("2877")),l=Object(c["a"])(o,i,s,!1,null,"494ad9c8",null);t["a"]=l.exports},"7b1f":function(e,t,n){"use strict";var i,s,r={functional:!0,name:"WordBreak",render(e,{props:t,slots:n,data:i}){const s=n().default||[],r=s.filter(e=>e.text&&!e.tag);if(0===r.length||r.length!==s.length)return e(t.tag,i,s);const a=r.map(({text:e})=>e).join(),o=[];let c=null,l=0;while(null!==(c=t.safeBoundaryPattern.exec(a))){const t=c.index+1;o.push(a.slice(l,t)),o.push(e("wbr",{key:c.index})),l=t}return o.push(a.slice(l,a.length)),e(t.tag,i,o)},props:{safeBoundaryPattern:{type:RegExp,default:()=>/([a-z](?=[A-Z])|(:)\w|\w(?=[._]\w))/g},tag:{type:String,default:()=>"span"}}},a=r,o=n("2877"),c=Object(o["a"])(a,i,s,!1,null,null,null);t["a"]=c.exports},"7b69":function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"code-listing",class:{"single-line":1===e.syntaxHighlightedLines.length},attrs:{"data-syntax":e.syntaxNameNormalized}},[e.fileName?n("Filename",{attrs:{isActionable:e.isFileNameActionable,fileType:e.fileType},on:{click:function(t){return e.$emit("file-name-click")}}},[e._v(e._s(e.fileName)+" ")]):e._e(),n("div",{staticClass:"container-general"},[n("pre",[n("code",e._l(e.syntaxHighlightedLines,(function(t,i){return n("span",{key:i,class:["code-line-container",{highlighted:e.isHighlighted(i)}]},[n("span",{directives:[{name:"show",rawName:"v-show",value:e.showLineNumbers,expression:"showLineNumbers"}],staticClass:"code-number",attrs:{"data-line-number":e.lineNumberFor(i)}}),e._v("\n"),n("span",{staticClass:"code-line",domProps:{innerHTML:e._s(t)}})])})),0)])])],1)},s=[],r=n("002d"),a=n("8649"),o=n("1020"),c=n.n(o);const l={bash:["sh","zsh"],c:["h"],cpp:["cc","c++","h++","hpp","hh","hxx","cxx"],css:[],diff:["patch"],http:["https"],java:["jsp"],javascript:["js","jsx","mjs","cjs"],json:[],llvm:[],markdown:["md","mkdown","mkd"],objectivec:["mm","objc","obj-c"],perl:["pl","pm"],php:[],python:["py","gyp","ipython"],ruby:["rb","gemspec","podspec","thor","irb"],scss:[],shell:["console","shellsession"],swift:[],xml:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"]},u=new Set(["markdown","swift"]),d=Object.entries(l),h=new Set(Object.keys(l)),p=new Map;async function f(e){const t=[e];try{return await t.reduce(async(e,t)=>{let i;await e,i=u.has(t)?await n("1417")("./"+t):await n("2ab3")("./"+t),c.a.registerLanguage(t,i.default)},Promise.resolve()),!0}catch(i){return console.error(`Could not load ${e} file`),!1}}function g(e){if(h.has(e))return e;const t=d.find(([,t])=>t.includes(e));return t?t[0]:null}function m(e){if(p.has(e))return p.get(e);const t=g(e);return p.set(e,t),t}c.a.configure({classPrefix:"syntax-",languages:[...h]});const b=async e=>{const t=m(e);return!(!t||c.a.listLanguages().includes(t))&&f(t)},v=/\r\n|\r|\n/g,y=/syntax-/;function w(e){return 0===e.length?[]:e.split(v)}function x(e){return(e.trim().match(v)||[]).length}function E(e){const t=document.createElement("template");return t.innerHTML=e,t.content.childNodes}function _(e){const{className:t}=e;if(!y.test(t))return null;const n=w(e.innerHTML).reduce((e,n)=>`${e}${n}\n`,"");return E(n.trim())}function k(e){return Array.from(e.childNodes).forEach(e=>{if(x(e.textContent))try{const t=e.childNodes.length?k(e):_(e);t&&e.replaceWith(...t)}catch(t){console.error(t)}}),_(e)}function j(e,t){if(!c.a.getLanguage(t))throw new Error("Unsupported language for syntax highlighting: "+t);return c.a.highlight(e,{language:t,ignoreIllegals:!0}).value}function T(e,t){const n=e.join("\n"),i=j(n,t),s=document.createElement("code");return s.innerHTML=i,k(s),w(s.innerHTML)}var C=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"filename"},[e.isActionable?n("a",{attrs:{href:"#"},on:{click:function(t){return t.preventDefault(),e.$emit("click")}}},[n("FileIcon",{attrs:{fileType:e.fileType}}),e._t("default")],2):n("span",[n("FileIcon",{attrs:{fileType:e.fileType}}),e._t("default")],2)])},S=[],O=function(){var e=this,t=e.$createElement,n=e._self._c||t;return"swift"===e.fileType?n("SwiftFileIcon",{staticClass:"file-icon"}):n("GenericFileIcon",{staticClass:"file-icon"})},N=[],L=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"swift-file-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M8.033 1l3.967 4.015v7.985h-10v-12zM7.615 2h-4.615v10h8v-6.574z"}}),n("path",{attrs:{d:"M7 1h1v4h-1z"}}),n("path",{attrs:{d:"M7 5h5v1h-5z"}})])},I=[],A=n("be08"),B={name:"SwiftFileIcon",components:{SVGIcon:A["a"]}},M=B,$=n("2877"),R=Object($["a"])(M,L,I,!1,null,null,null),D=R.exports,P=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"generic-file-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M8.033 1l3.967 4.015v7.985h-10v-12zM7.615 2h-4.615v10h8v-6.574z"}}),n("path",{attrs:{d:"M7 1h1v4h-1z"}}),n("path",{attrs:{d:"M7 5h5v1h-5z"}})])},F=[],H={name:"GenericFileIcon",components:{SVGIcon:A["a"]}},q=H,W=Object($["a"])(q,P,F,!1,null,null,null),V=W.exports,U={name:"CodeListingFileIcon",components:{SwiftFileIcon:D,GenericFileIcon:V},props:{fileType:String}},z=U,G=(n("e6db"),Object($["a"])(z,O,N,!1,null,"7c381064",null)),K=G.exports,Y={name:"CodeListingFilename",components:{FileIcon:K},props:{isActionable:{type:Boolean,default:()=>!1},fileType:String}},X=Y,Z=(n("8608"),Object($["a"])(X,C,S,!1,null,"c8c40662",null)),J=Z.exports,Q={name:"CodeListing",components:{Filename:J},data(){return{syntaxHighlightedLines:[]}},props:{fileName:String,isFileNameActionable:{type:Boolean,default:()=>!1},syntax:String,fileType:String,content:{type:Array,required:!0},startLineNumber:{type:Number,default:()=>1},highlights:{type:Array,default:()=>[]},showLineNumbers:{type:Boolean,default:()=>!1}},computed:{escapedContent:({content:e})=>e.map(r["c"]),highlightedLineNumbers(){return new Set(this.highlights.map(({line:e})=>e))},syntaxNameNormalized(){const e={occ:a["a"].objectiveC.key.url};return e[this.syntax]||this.syntax}},watch:{content:{handler:"syntaxHighlightLines",immediate:!0}},methods:{isHighlighted(e){return this.highlightedLineNumbers.has(this.lineNumberFor(e))},lineNumberFor(e){return this.startLineNumber+e},async syntaxHighlightLines(){let e;try{await b(this.syntaxNameNormalized),e=T(this.content,this.syntaxNameNormalized)}catch(t){e=this.escapedContent}this.syntaxHighlightedLines=e.map(e=>""===e?"\n":e)}}},ee=Q,te=(n("2d80"),Object($["a"])(ee,i,s,!1,null,"193a0b82",null));t["a"]=te.exports},"80c8":function(e,t,n){},"830f":function(e,t,n){"use strict";n("30b0")},8608:function(e,t,n){"use strict";n("a7f3")},8649:function(e,t,n){"use strict";t["a"]={objectiveC:{name:"Objective-C",key:{api:"occ",url:"objc"}},swift:{name:"Swift",key:{api:"swift",url:"swift"}}}},"86d8":function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(e.refComponent,{tag:"component",attrs:{url:e.urlWithParams,"is-active":e.isActiveComputed}},[e._t("default")],2)},s=[],r=n("d26a"),a=n("66cd"),o=n("9895"),c=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.isActive?n("a",{attrs:{href:e.url}},[e._t("default")],2):n("span",[e._t("default")],2)},l=[],u={name:"ReferenceExternal",props:{url:{type:String,required:!0},isActive:{type:Boolean,default:!0}}},d=u,h=n("2877"),p=Object(h["a"])(d,c,l,!1,null,null,null),f=p.exports,g=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ReferenceInternal",e._b({},"ReferenceInternal",e.$props,!1),[n("CodeVoice",[e._t("default")],2)],1)},m=[],b=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.isActive?n("router-link",{attrs:{to:e.url}},[e._t("default")],2):n("span",[e._t("default")],2)},v=[],y={name:"ReferenceInternal",props:{url:{type:String,required:!0},isActive:{type:Boolean,default:!0}}},w=y,x=Object(h["a"])(w,b,v,!1,null,null,null),E=x.exports,_=n("52e4"),k={name:"ReferenceInternalSymbol",props:E.props,components:{ReferenceInternal:E,CodeVoice:_["a"]}},j=k,T=Object(h["a"])(j,g,m,!1,null,null,null),C=T.exports,S={name:"Reference",computed:{isInternal({url:e}){if(!e.startsWith("/")&&!e.startsWith("#"))return!1;const{resolved:{name:t}={}}=this.$router.resolve(e)||{};return t!==o["b"]},isSymbolReference(){return"symbol"===this.kind&&(this.role===a["a"].symbol||this.role===a["a"].dictionarySymbol)},isDisplaySymbol({isSymbolReference:e,titleStyle:t,ideTitle:n}){return n?e&&"symbol"===t:e},refComponent(){return this.isInternal?this.isDisplaySymbol?C:E:f},urlWithParams({isInternal:e}){return e?Object(r["b"])(this.url,this.$route.query):this.url},isActiveComputed({url:e,isActive:t}){return!(!e||!t)}},props:{url:{type:String,required:!0},kind:{type:String,required:!1},role:{type:String,required:!1},isActive:{type:Boolean,required:!1,default:!0},ideTitle:{type:String,required:!1},titleStyle:{type:String,required:!1}}},O=S,N=Object(h["a"])(O,i,s,!1,null,null,null);t["a"]=N.exports},"8a61":function(e,t,n){"use strict";t["a"]={methods:{scrollToElement(e){const t=this.$router.resolve({hash:e});return this.$router.options.scrollBehavior(t.route).then(({selector:e,offset:t})=>{const n=document.querySelector(e);return n?(n.scrollIntoView(),window.scrollBy(-t.x,-t.y),n):null})}}}},"8bd9":function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("picture",[e.prefersAuto&&e.darkVariantAttributes?n("source",{attrs:{media:"(prefers-color-scheme: dark)",srcset:e.darkVariantAttributes.srcSet}}):e._e(),e.prefersDark&&e.darkVariantAttributes?n("img",e._b({attrs:{alt:e.alt}},"img",e.darkVariantAttributes,!1)):n("img",e._b({attrs:{alt:e.alt}},"img",e.defaultAttributes,!1))])},s=[],r=n("748c"),a={props:{variants:{type:Array,required:!0}},computed:{variantsGroupedByAppearance(){return Object(r["d"])(this.variants)},lightVariants(){return Object(r["a"])(this.variantsGroupedByAppearance.light)},darkVariants(){return Object(r["a"])(this.variantsGroupedByAppearance.dark)}}},o=n("e425"),c=n("821b");function l(e){if(!e.length)return null;const t=e.map(e=>`${Object(r["b"])(e.src)} ${e.density}`).join(", "),n=e[0],i={srcSet:t,src:Object(r["b"])(n.src)},{width:s}=n.size||{width:null};return s&&(i.width=s,i.height="auto"),i}var u={name:"ImageAsset",mixins:[a],data:()=>({appState:o["a"].state}),computed:{defaultAttributes:({lightVariantAttributes:e,darkVariantAttributes:t})=>e||t,darkVariantAttributes:({darkVariants:e})=>l(e),lightVariantAttributes:({lightVariants:e})=>l(e),preferredColorScheme:({appState:e})=>e.preferredColorScheme,prefersAuto:({preferredColorScheme:e})=>e===c["a"].auto.value,prefersDark:({preferredColorScheme:e})=>e===c["a"].dark.value},props:{alt:{type:String,default:""},variants:{type:Array,required:!0}}},d=u,h=n("2877"),p=Object(h["a"])(d,i,s,!1,null,null,null);t["a"]=p.exports},"8c92":function(e,t,n){"use strict";n("80c8")},"90f3":function(e,t,n){"use strict";n("6cc4")},9152:function(e,t,n){"use strict";n("50fc")},"95da":function(e,t,n){"use strict";function i(e,t){const n=document.body;let s=e,r=e;while(s=s.previousElementSibling)t(s);while(r=r.nextElementSibling)t(r);e.parentElement&&e.parentElement!==n&&i(e.parentElement,t)}const s="data-original-",r="aria-hidden",a=s+r,o=e=>{let t=e.getAttribute(a);t||(t=e.getAttribute(r)||"",e.setAttribute(a,t)),e.setAttribute(r,"true")},c=e=>{const t=e.getAttribute(a);"string"===typeof t&&(t.length?e.setAttribute(r,t):e.removeAttribute(r)),e.removeAttribute(a)};t["a"]={hide(e){i(e,o)},show(e){i(e,c)}}},"971b":function(e,t,n){},"9a2b":function(e,t,n){"use strict";n("dce7")},"9b30":function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",{staticClass:"nav-menu-items",attrs:{"data-previous-menu-children-count":e.previousSiblingChildren}},[e._t("default")],2)},s=[],r={name:"NavMenuItems",props:{previousSiblingChildren:{type:Number,default:0}}},a=r,o=(n("502c"),n("2877")),c=Object(o["a"])(a,i,s,!1,null,"aa06bfc4",null);t["a"]=c.exports},"9bb2":function(e,t,n){"use strict";n("3b8f")},a1bd:function(e,t,n){},a7f3:function(e,t,n){},a97e:function(e,t,n){"use strict";var i=n("63b8");const s={default:"default",nav:"nav"},r={[s.default]:{[i["a"].large]:{minWidth:1069,contentWidth:980},[i["a"].medium]:{minWidth:736,maxWidth:1068,contentWidth:692},[i["a"].small]:{minWidth:320,maxWidth:735,contentWidth:280}},[s.nav]:{[i["a"].large]:{minWidth:1024},[i["a"].medium]:{minWidth:768,maxWidth:1023},[i["a"].small]:{minWidth:320,maxWidth:767}}},a=e=>e?`(max-width: ${e}px)`:"",o=e=>e?`(min-width: ${e}px)`:"";function c({minWidth:e,maxWidth:t}){return["only screen",o(e),a(t)].filter(Boolean).join(" and ")}function l({maxWidth:e,minWidth:t}){return window.matchMedia(c({minWidth:t,maxWidth:e}))}var u,d,h={name:"BreakpointEmitter",constants:{BreakpointAttributes:r,BreakpointName:i["a"],BreakpointScopes:s},props:{scope:{type:String,default:()=>s.default,validator:e=>e in s}},render(){return this.$scopedSlots.default?this.$scopedSlots.default({matchingBreakpoint:this.matchingBreakpoint}):null},data:()=>({matchingBreakpoint:null}),methods:{initMediaQuery(e,t){const n=l(t),i=t=>this.handleMediaQueryChange(t,e);n.addListener(i),this.$once("hook:beforeDestroy",()=>{n.removeListener(i)}),i(n)},handleMediaQueryChange(e,t){e.matches&&(this.matchingBreakpoint=t,this.$emit("change",t))}},mounted(){const e=r[this.scope]||{};Object.entries(e).forEach(([e,t])=>{this.initMediaQuery(e,t)})}},p=h,f=n("2877"),g=Object(f["a"])(p,u,d,!1,null,null,null);t["a"]=g.exports},b1d4:function(e,t,n){},b392:function(e,t,n){},bab1:function(e,t,n){"use strict";n("a1bd")},bb52:function(e,t,n){"use strict";t["a"]={inject:{performanceMetricsEnabled:{default:!1},isTargetIDE:{default:!1}},methods:{newContentMounted(){let e;this.performanceMetricsEnabled&&(e=Math.round(window.performance.now()),window.renderedTimes||(window.renderedTimes=[]),window.renderedTimes.push(e)),this.$bridge.send({type:"rendered",data:{time:e}})}}}},be08:function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("svg",{staticClass:"svg-icon",attrs:{"aria-hidden":"true",xmlns:"http://www.w3.org/2000/svg"}},[e._t("default")],2)},s=[],r={name:"SVGIcon"},a=r,o=(n("9bb2"),n("2877")),c=Object(o["a"])(a,i,s,!1,null,"0137d411",null);t["a"]=c.exports},c064:function(e,t,n){"use strict";n("ca8c")},c081:function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.action?n("DestinationDataProvider",{attrs:{destination:e.action},scopedSlots:e._u([{key:"default",fn:function(t){var i=t.url,s=t.title;return n("ButtonLink",{attrs:{url:i,isDark:e.isDark}},[e._v(" "+e._s(s)+" ")])}}],null,!1,1264376715)}):e._e()},s=[],r=n("76ab"),a=n("c7ea"),o={name:"CallToActionButton",components:{DestinationDataProvider:a["a"],ButtonLink:r["a"]},props:{action:{type:Object,required:!0},isDark:{type:Boolean,default:!1}}},c=o,l=n("2877"),u=Object(l["a"])(c,i,s,!1,null,null,null);t["a"]=u.exports},c7ea:function(e,t,n){"use strict";const i={link:"link",reference:"reference",text:"text"};var s,r,a={name:"DestinationDataProvider",props:{destination:{type:Object,required:!0,default:()=>({})}},inject:{references:{default:()=>({})},isTargetIDE:{default:()=>!1}},constants:{DestinationType:i},computed:{isExternal:({reference:e,destination:t})=>e.type===i.link||t.type===i.link,shouldAppendOpensInBrowser:({isExternal:e,isTargetIDE:t})=>e&&t,reference:({references:e,destination:t})=>e[t.identifier]||{},linkUrl:({destination:e,reference:t})=>({[i.link]:e.destination,[i.reference]:t.url,[i.text]:e.text}[e.type]),linkTitle:({reference:e,destination:t})=>({[i.link]:t.title,[i.reference]:t.overridingTitle||e.title,[i.text]:""}[t.type])},methods:{formatAriaLabel(e){return this.shouldAppendOpensInBrowser?e+" (opens in browser)":e}},render(){return this.$scopedSlots.default({url:this.linkUrl||"",title:this.linkTitle||"",formatAriaLabel:this.formatAriaLabel,isExternal:this.isExternal})}},o=a,c=n("2877"),l=Object(c["a"])(o,s,r,!1,null,null,null);t["a"]=l.exports},c8e2:function(e,t,n){"use strict";function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return o}));const s=["input","select","textarea","button","optgroup","option","menuitem","fieldset","object","a[href]","*[tabindex]","*[contenteditable]"],r=s.join(",");var a={getTabbableElements(e){const t=e.querySelectorAll(r),n=t.length;let i;const s=[];for(i=0;i=0},isFocusableElement(e){const t=e.nodeName.toLowerCase(),n=s.includes(t);return!("a"!==t||!e.getAttribute("href"))||(n?!e.disabled:"true"===e.getAttribute("contenteditable")||!Number.isNaN(parseFloat(e.getAttribute("tabindex"))))}};class o{constructor(e){i(this,"focusContainer",null),i(this,"tabTargets",[]),i(this,"firstTabTarget",null),i(this,"lastTabTarget",null),i(this,"lastFocusedElement",null),this.focusContainer=e,this.onFocus=this.onFocus.bind(this)}updateFocusContainer(e){this.focusContainer=e}start(){this.collectTabTargets(),this.firstTabTarget?this.focusContainer.contains(document.activeElement)||this.firstTabTarget.focus():console.warn("There are no focusable elements. FocusTrap needs at least one."),this.lastFocusedElement=document.activeElement,document.addEventListener("focus",this.onFocus,!0)}stop(){document.removeEventListener("focus",this.onFocus,!0)}collectTabTargets(){this.tabTargets=a.getTabbableElements(this.focusContainer),this.firstTabTarget=this.tabTargets[0],this.lastTabTarget=this.tabTargets[this.tabTargets.length-1]}onFocus(e){if(this.focusContainer.contains(e.target))this.lastFocusedElement=e.target;else{if(e.preventDefault(),this.collectTabTargets(),this.lastFocusedElement===this.lastTabTarget||!this.lastFocusedElement)return this.firstTabTarget.focus(),void(this.lastFocusedElement=this.firstTabTarget);this.lastFocusedElement===this.firstTabTarget&&(this.lastTabTarget.focus(),this.lastFocusedElement=this.lastTabTarget)}}destroy(){this.stop(),this.focusContainer=null,this.tabTargets=[],this.firstTabTarget=null,this.lastTabTarget=null,this.lastFocusedElement=null}}},c919:function(e,t,n){"use strict";n("e5ca")},ca8c:function(e,t,n){},cb92:function(e,t,n){"use strict";n("598a")},cbcf:function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("nav",{ref:"nav",staticClass:"nav",class:e.rootClasses,attrs:{role:"navigation"}},[n("div",{ref:"wrapper",staticClass:"nav__wrapper"},[n("div",{staticClass:"nav__background"}),e.hasOverlay?n("div",{staticClass:"nav-overlay",on:{click:e.closeNav}}):e._e(),n("div",{staticClass:"nav-content"},[e.$slots.default?n("div",{staticClass:"nav-title"},[e._t("default")],2):e._e(),e._t("after-title"),n("div",{staticClass:"nav-menu"},[n("a",{ref:"axToggle",staticClass:"nav-ax-toggle",attrs:{href:"#",role:"button"},on:{click:function(t){return t.preventDefault(),e.toggleNav.apply(null,arguments)}}},[n("span",{staticClass:"visuallyhidden"},[e.isOpen?[e._v("Close Menu")]:[e._v("Open Menu")]],2)]),n("div",{ref:"tray",staticClass:"nav-menu-tray",on:{transitionend:function(t){return t.target!==t.currentTarget?null:e.onTransitionEnd.apply(null,arguments)},click:e.handleTrayClick}},[e._t("tray",(function(){return[n("NavMenuItems",[e._t("menu-items")],2)]}))],2)]),n("div",{staticClass:"nav-actions"},[n("a",{staticClass:"nav-menucta",attrs:{href:"#",tabindex:"-1","aria-hidden":"true"},on:{click:function(t){return t.preventDefault(),e.toggleNav.apply(null,arguments)}}},[n("span",{staticClass:"nav-menucta-chevron"})])])],2),e._t("after-content")],2),n("BreakpointEmitter",{attrs:{scope:e.BreakpointScopes.nav},on:{change:e.onBreakpointChange}})],1)},s=[],r=n("72e7"),a=n("9b30"),o=n("a97e"),c=n("c8e2"),l=n("f2af"),u=n("942d"),d=n("63b8"),h=n("95da");const{BreakpointName:p,BreakpointScopes:f}=o["a"].constants,g={isDark:"theme-dark",isOpen:"nav--is-open",inBreakpoint:"nav--in-breakpoint-range",isTransitioning:"nav--is-opening",isSticking:"nav--is-sticking",hasSolidBackground:"nav--solid-background",hasNoBorder:"nav--noborder",hasFullWidthBorder:"nav--fullwidth-border"};var m={name:"NavBase",components:{NavMenuItems:a["a"],BreakpointEmitter:o["a"]},constants:{NavStateClasses:g},props:{breakpoint:{type:String,default:p.small},hasOverlay:{type:Boolean,default:!0},hasSolidBackground:{type:Boolean,default:!1},hasNoBorder:{type:Boolean,default:!1},hasFullWidthBorder:{type:Boolean,default:!1},isDark:{type:Boolean,default:!1}},mixins:[r["a"]],data(){return{isOpen:!1,inBreakpoint:!1,isTransitioning:!1,isSticking:!1,focusTrapInstance:null}},computed:{BreakpointScopes:()=>f,rootClasses:({isOpen:e,inBreakpoint:t,isTransitioning:n,isSticking:i,hasSolidBackground:s,hasNoBorder:r,hasFullWidthBorder:a,isDark:o})=>({[g.isDark]:o,[g.isOpen]:e,[g.inBreakpoint]:t,[g.isTransitioning]:n,[g.isSticking]:i,[g.hasSolidBackground]:s,[g.hasNoBorder]:r,[g.hasFullWidthBorder]:a})},watch:{isOpen(e){this.$emit("change",e),e?this.onExpand():this.onClose()}},async mounted(){window.addEventListener("keydown",this.onEscape),window.addEventListener("popstate",this.closeNav),window.addEventListener("orientationchange",this.closeNav),document.addEventListener("click",this.handleClickOutside),await this.$nextTick(),this.focusTrapInstance=new c["a"](this.$refs.wrapper)},beforeDestroy(){window.removeEventListener("keydown",this.onEscape),window.removeEventListener("popstate",this.closeNav),window.removeEventListener("orientationchange",this.closeNav),document.removeEventListener("click",this.handleClickOutside),this.isOpen&&this.toggleScrollLock(!1),this.focusTrapInstance.destroy()},methods:{getIntersectionTargets(){return[document.getElementById(u["b"])||this.$el]},toggleNav(){this.isOpen=!this.isOpen,this.isTransitioning=!0},closeNav(){this.isOpen=!1},async onTransitionEnd({propertyName:e}){"max-height"===e&&(this.$emit("changed",this.isOpen),this.isTransitioning=!1,this.isOpen?(this.$emit("opened"),this.toggleScrollLock(!0)):this.$emit("closed"))},onBreakpointChange(e){const t=Object(d["b"])(e,this.breakpoint);this.inBreakpoint=!t,t&&this.closeNav()},onIntersect({intersectionRatio:e}){window.scrollY<0||(this.isSticking=1!==e)},onEscape({key:e}){"Escape"===e&&this.isOpen&&(this.closeNav(),this.$refs.axToggle.focus())},handleTrayClick({target:e}){e.href&&this.closeNav()},handleClickOutside({target:e}){this.$refs.nav.contains(e)||this.closeNav()},toggleScrollLock(e){e?l["a"].lockScroll(this.$refs.tray):l["a"].unlockScroll(this.$refs.tray)},onExpand(){this.$emit("open"),this.focusTrapInstance.start(),h["a"].hide(this.$refs.wrapper)},onClose(){this.$emit("close"),this.toggleScrollLock(!1),this.focusTrapInstance.stop(),h["a"].show(this.$refs.wrapper)}}},b=m,v=(n("ef28"),n("2877")),y=Object(v["a"])(b,i,s,!1,null,"aada5b66",null);t["a"]=y.exports},d541:function(e,t,n){},d8ce:function(e,t,n){"use strict";var i=n("6842");t["a"]={created(){if(this.pageTitle){const e=Object(i["c"])(["meta","title"],"Documentation"),t=[this.pageTitle,e].filter(Boolean);document.title=t.join(" | ")}}}},dce7:function(e,t,n){},e1d1:function(e,t,n){},e3ab:function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("aside",{class:e.kind,attrs:{"aria-label":e.kind}},[n("p",{staticClass:"label"},[e._v(e._s(e.label))]),e._t("default")],2)},s=[];const r={deprecated:"deprecated",experiment:"experiment",important:"important",note:"note",tip:"tip",warning:"warning"};var a={name:"Aside",props:{kind:{type:String,required:!0,validator:e=>Object.prototype.hasOwnProperty.call(r,e)},name:{type:String,required:!1}},computed:{label:({kind:e,name:t})=>t||{[r.deprecated]:"Deprecated",[r.experiment]:"Experiment",[r.important]:"Important",[r.note]:"Note",[r.tip]:"Tip",[r.warning]:"Warning"}[e]}},o=a,c=(n("9152"),n("2877")),l=Object(c["a"])(o,i,s,!1,null,"5117d474",null);t["a"]=l.exports},e5ca:function(e,t,n){},e6db:function(e,t,n){"use strict";n("47cc")},e7fb:function(e,t,n){"use strict";n("4c7a")},ef28:function(e,t,n){"use strict";n("2976")},f2af:function(e,t,n){"use strict";let i=!1,s=-1,r=0;const a=()=>window.navigator&&window.navigator.platform&&(/iP(ad|hone|od)/.test(window.navigator.platform)||"MacIntel"===window.navigator.platform&&window.navigator.maxTouchPoints>1);function o(e){e.touches.length>1||e.preventDefault()}const c=e=>!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight;function l(){r=document.body.getBoundingClientRect().top,document.body.style.overflow="hidden scroll",document.body.style.top=r+"px",document.body.style.position="fixed",document.body.style.width="100%"}function u(e){e.ontouchstart=null,e.ontouchmove=null,document.removeEventListener("touchmove",o)}function d(e,t){const n=e.targetTouches[0].clientY-s;return 0===t.scrollTop&&n>0||c(t)&&n<0?o(e):(e.stopPropagation(),!0)}function h(e){e.ontouchstart=e=>{1===e.targetTouches.length&&(s=e.targetTouches[0].clientY)},e.ontouchmove=t=>{1===t.targetTouches.length&&d(t,e)},document.addEventListener("touchmove",o,{passive:!1})}t["a"]={lockScroll(e){i||(a()?h(e):l(),i=!0)},unlockScroll(e){i&&(a()?u(e):(document.body.style.cssText="",window.scrollTo(0,Math.abs(r))),i=!1)}}}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-bash.1b52852f.js b/docs/js/highlight-js-bash.1b52852f.js new file mode 100644 index 0000000..6db1778 --- /dev/null +++ b/docs/js/highlight-js-bash.1b52852f.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-bash"],{f0f8:function(e,s){function t(e){const s=e.regex,t={},n={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{className:"variable",variants:[{begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},i={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},c={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(c);const o={className:"",begin:/\\"/},r={className:"string",begin:/'/,end:/'/},l={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]},p=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],d=e.SHEBANG({binary:`(${p.join("|")})`,relevance:10}),h={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},m=["if","then","else","elif","fi","for","while","in","do","done","case","esac","function"],u=["true","false"],b={match:/(\/[a-z._-]+)+/},g=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],f=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias"],w=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],k=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:m,literal:u,built_in:[...g,...f,"set","shopt",...w,...k]},contains:[d,e.SHEBANG(),h,l,e.HASH_COMMENT_MODE,i,b,c,o,r,t]}}e.exports=t}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-c.d1db3f17.js b/docs/js/highlight-js-c.d1db3f17.js new file mode 100644 index 0000000..3bc41ac --- /dev/null +++ b/docs/js/highlight-js-c.d1db3f17.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-c"],{"1fe5":function(e,n){function s(e){const n=e.regex,s=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),t="decltype\\(auto\\)",a="[a-zA-Z_]\\w*::",i="<[^<>]+>",r="("+t+"|"+n.optional(a)+"[a-zA-Z_]\\w*"+n.optional(i)+")",l={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},o="\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)",c={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+o+"|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},d={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},u={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(c,{className:"string"}),{className:"string",begin:/<.*?>/},s,e.C_BLOCK_COMMENT_MODE]},g={className:"title",begin:n.optional(a)+e.IDENT_RE,relevance:0},p=n.optional(a)+e.IDENT_RE+"\\s*\\(",m=["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],_=["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"],f={keyword:m,type:_,literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},b=[u,l,s,e.C_BLOCK_COMMENT_MODE,d,c],w={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:f,contains:b.concat([{begin:/\(/,end:/\)/,keywords:f,contains:b.concat(["self"]),relevance:0}]),relevance:0},h={begin:"("+r+"[\\*&\\s]+)+"+p,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:f,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:t,keywords:f,relevance:0},{begin:p,returnBegin:!0,contains:[e.inherit(g,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:f,relevance:0,contains:[s,e.C_BLOCK_COMMENT_MODE,c,d,l,{begin:/\(/,end:/\)/,keywords:f,relevance:0,contains:["self",s,e.C_BLOCK_COMMENT_MODE,c,d,l]}]},l,s,e.C_BLOCK_COMMENT_MODE,u]};return{name:"C",aliases:["h"],keywords:f,disableAutodetect:!0,illegal:"=]/,contains:[{beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:u,strings:c,keywords:f}}}e.exports=s}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-cpp.eaddddbe.js b/docs/js/highlight-js-cpp.eaddddbe.js new file mode 100644 index 0000000..db9fd82 --- /dev/null +++ b/docs/js/highlight-js-cpp.eaddddbe.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-cpp"],{"0209":function(e,t){function n(e){const t=e.regex,n=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="<[^<>]+>",s="(?!struct)("+a+"|"+t.optional(i)+"[a-zA-Z_]\\w*"+t.optional(r)+")",c={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o="\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)",l={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+o+"|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},d={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},u={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(l,{className:"string"}),{className:"string",begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},p={className:"title",begin:t.optional(i)+e.IDENT_RE,relevance:0},_=t.optional(i)+e.IDENT_RE+"\\s*\\(",m=["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],g=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],f=["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"],b=["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"],h=["NULL","false","nullopt","nullptr","true"],w=["_Pragma"],y={type:g,keyword:m,literal:h,built_in:w,_type_hints:f},v={className:"function.dispatch",relevance:0,keywords:{_hint:b},begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))},k=[v,u,c,n,e.C_BLOCK_COMMENT_MODE,d,l],x={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:y,contains:k.concat([{begin:/\(/,end:/\)/,keywords:y,contains:k.concat(["self"]),relevance:0}]),relevance:0},E={className:"function",begin:"("+s+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:y,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:y,relevance:0},{begin:_,returnBegin:!0,contains:[p],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[l,d]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:y,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,l,d,c,{begin:/\(/,end:/\)/,keywords:y,relevance:0,contains:["self",n,e.C_BLOCK_COMMENT_MODE,l,d,c]}]},c,n,e.C_BLOCK_COMMENT_MODE,u]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:y,illegal:"",keywords:y,contains:["self",c]},{begin:e.IDENT_RE+"::",keywords:y},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}e.exports=n}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-css.75eab1fe.js b/docs/js/highlight-js-css.75eab1fe.js new file mode 100644 index 0000000..3d507d0 --- /dev/null +++ b/docs/js/highlight-js-css.75eab1fe.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-css"],{ee8c:function(e,t){const o=e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}),i=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],r=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],a=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],n=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],l=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-height","max-width","min-height","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse();function s(e){const t=e.regex,s=o(e),d={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},c="and or not only",g=/@-?\w[\w]*(-\w+)*/,m="[a-zA-Z-][a-zA-Z0-9_-]*",p=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[s.BLOCK_COMMENT,d,s.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+m,relevance:0},s.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+a.join("|")+")"},{begin:":(:)?("+n.join("|")+")"}]},s.CSS_VARIABLE,{className:"attribute",begin:"\\b("+l.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[s.BLOCK_COMMENT,s.HEXCOLOR,s.IMPORTANT,s.CSS_NUMBER_MODE,...p,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},s.FUNCTION_DISPATCH]},{begin:t.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:g},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:c,attribute:r.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...p,s.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+i.join("|")+")\\b"}]}}e.exports=s}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-custom-markdown.7cffc4b3.js b/docs/js/highlight-js-custom-markdown.7cffc4b3.js new file mode 100644 index 0000000..5271416 --- /dev/null +++ b/docs/js/highlight-js-custom-markdown.7cffc4b3.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-custom-markdown","highlight-js-markdown"],{"04b0":function(n,e){function a(n){const e=n.regex,a={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},i={begin:"^[-\\*]{3,}",end:"$"},s={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},t={className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},c={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},d=/[A-Za-z][A-Za-z0-9+.-]*/,l={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:e.concat(/\[.+?\]\(/,d,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},g={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},o={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};g.contains.push(o),o.contains.push(g);let r=[a,l];g.contains=g.contains.concat(r),o.contains=o.contains.concat(r),r=r.concat(g,o);const b={className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:r},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:r}]}]},u={className:"quote",begin:"^>\\s+",contains:r,end:"$"};return{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[b,a,t,g,o,u,s,i,l,c]}}n.exports=a},"84cb":function(n,e,a){"use strict";a.r(e);var i=a("04b0"),s=a.n(i);const t={begin:"",returnBegin:!0,contains:[{className:"link",begin:"doc:",end:">",excludeEnd:!0}]},c={className:"link",begin:/`{2}(?!`)/,end:/`{2}(?!`)/,excludeBegin:!0,excludeEnd:!0},d={begin:"^>\\s+[Note:|Tip:|Important:|Experiment:|Warning:]",end:"$",returnBegin:!0,contains:[{className:"quote",begin:"^>",end:"\\s+"},{className:"type",begin:"Note|Tip|Important|Experiment|Warning",end:":"},{className:"quote",begin:".*",end:"$",endsParent:!0}]},l={begin:"@",end:"[{\\)\\s]",returnBegin:!0,contains:[{className:"title",begin:"@",end:"[\\s+(]",excludeEnd:!0},{begin:":",end:"[,\\)\n\t]",excludeBegin:!0,keywords:{literal:"true false null undefined"},contains:[{className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",endsWithParent:!0,excludeEnd:!0},{className:"string",variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}],endsParent:!0},{className:"link",begin:"http|https",endsWithParent:!0,excludeEnd:!0}]}]};e["default"]=function(n){const e=s()(n),a=e.contains.find(({className:n})=>"code"===n);a.variants=a.variants.filter(({begin:n})=>!n.includes("( {4}|\\t)"));const i=[...e.contains.filter(({className:n})=>"code"!==n),a];return{...e,contains:[c,t,d,l,...i]}}}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-custom-swift.52388c22.js b/docs/js/highlight-js-custom-swift.52388c22.js new file mode 100644 index 0000000..7ec1215 --- /dev/null +++ b/docs/js/highlight-js-custom-swift.52388c22.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-custom-swift","highlight-js-swift"],{"2a39":function(e,n){function t(e){return e?"string"===typeof e?e:e.source:null}function a(e){return i("(?=",e,")")}function i(...e){const n=e.map(e=>t(e)).join("");return n}function s(e){const n=e[e.length-1];return"object"===typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}}function c(...e){const n=s(e),a="("+(n.capture?"":"?:")+e.map(e=>t(e)).join("|")+")";return a}const u=e=>i(/\b/,e,/\w$/.test(e)?/\b/:/\B/),o=["Protocol","Type"].map(u),r=["init","self"].map(u),l=["Any","Self"],m=["actor","associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],p=["false","nil","true"],d=["assignment","associativity","higherThan","left","lowerThan","none","right"],F=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],b=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],f=c(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),h=c(f,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),w=i(f,h,"*"),y=c(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),g=c(y,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),E=i(y,g,"*"),v=i(/[A-Z]/,g,"*"),A=["autoclosure",i(/convention\(/,c("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",i(/objc\(/,E,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],N=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];function C(e){const n={match:/\s+/,relevance:0},t=e.COMMENT("/\\*","\\*/",{contains:["self"]}),s=[e.C_LINE_COMMENT_MODE,t],f={match:[/\./,c(...o,...r)],className:{2:"keyword"}},y={match:i(/\./,c(...m)),relevance:0},C=m.filter(e=>"string"===typeof e).concat(["_|0"]),k=m.filter(e=>"string"!==typeof e).concat(l).map(u),D={variants:[{className:"keyword",match:c(...k,...r)}]},B={$pattern:c(/\b\w+/,/#\w+/),keyword:C.concat(F),literal:p},_=[f,y,D],S={match:i(/\./,c(...b)),relevance:0},x={className:"built_in",match:i(/\b/,c(...b),/(?=\()/)},M=[S,x],I={match:/->/,relevance:0},$={className:"operator",relevance:0,variants:[{match:w},{match:`\\.(\\.|${h})+`}]},O=[I,$],L="([0-9]_*)+",T="([0-9a-fA-F]_*)+",j={className:"number",relevance:0,variants:[{match:`\\b(${L})(\\.(${L}))?([eE][+-]?(${L}))?\\b`},{match:`\\b0x(${T})(\\.(${T}))?([pP][+-]?(${L}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},K=(e="")=>({className:"subst",variants:[{match:i(/\\/,e,/[0\\tnr"']/)},{match:i(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),P=(e="")=>({className:"subst",match:i(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),z=(e="")=>({className:"subst",label:"interpol",begin:i(/\\/,e,/\(/),end:/\)/}),q=(e="")=>({begin:i(e,/"""/),end:i(/"""/,e),contains:[K(e),P(e),z(e)]}),U=(e="")=>({begin:i(e,/"/),end:i(/"/,e),contains:[K(e),z(e)]}),Z={className:"string",variants:[q(),q("#"),q("##"),q("###"),U(),U("#"),U("##"),U("###")]},V={match:i(/`/,E,/`/)},W={className:"variable",match:/\$\d+/},G={className:"variable",match:`\\$${g}+`},J=[V,W,G],R={match:/(@|#)available/,className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:N,contains:[...O,j,Z]}]}},X={className:"keyword",match:i(/@/,c(...A))},H={className:"meta",match:i(/@/,E)},Q=[R,X,H],Y={match:a(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:i(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,g,"+")},{className:"type",match:v,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:i(/\s+&\s+/,a(v)),relevance:0}]},ee={begin://,keywords:B,contains:[...s,..._,...Q,I,Y]};Y.contains.push(ee);const ne={match:i(E,/\s*:/),keywords:"_|0",relevance:0},te={begin:/\(/,end:/\)/,relevance:0,keywords:B,contains:["self",ne,...s,..._,...M,...O,j,Z,...J,...Q,Y]},ae={begin://,contains:[...s,Y]},ie={begin:c(a(i(E,/\s*:/)),a(i(E,/\s+/,E,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:E}]},se={begin:/\(/,end:/\)/,keywords:B,contains:[ie,...s,..._,...O,j,Z,...Q,Y,te],endsParent:!0,illegal:/["']/},ce={match:[/func/,/\s+/,c(V.match,E,w)],className:{1:"keyword",3:"title.function"},contains:[ae,se,n],illegal:[/\[/,/%/]},ue={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[ae,se,n],illegal:/\[|%/},oe={match:[/operator/,/\s+/,w],className:{1:"keyword",3:"title"}},re={begin:[/precedencegroup/,/\s+/,v],className:{1:"keyword",3:"title"},contains:[Y],keywords:[...d,...p],end:/}/};for(const a of Z.variants){const e=a.contains.find(e=>"interpol"===e.label);e.keywords=B;const n=[..._,...M,...O,j,Z,...J];e.contains=[...n,{begin:/\(/,end:/\)/,contains:["self",...n]}]}return{name:"Swift",keywords:B,contains:[...s,ce,ue,{beginKeywords:"struct protocol class extension enum actor",end:"\\{",excludeEnd:!0,keywords:B,contains:[e.inherit(e.TITLE_MODE,{className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),..._]},oe,re,{beginKeywords:"import",end:/$/,contains:[...s],relevance:0},..._,...M,...O,j,Z,...J,...Q,Y,te]}}e.exports=C},"81c8":function(e,n,t){"use strict";t.r(n);var a=t("2a39"),i=t.n(a);n["default"]=function(e){const n=i()(e),t=({beginKeywords:e=""})=>e.split(" ").includes("class"),a=n.contains.findIndex(t);if(a>=0){const{beginKeywords:e,...t}=n.contains[a];n.contains[a]={...t,begin:/(struct|protocol|extension|enum|actor|class\b(?!.*\bfunc\b))/}}return n}}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-diff.62d66733.js b/docs/js/highlight-js-diff.62d66733.js new file mode 100644 index 0000000..64337fa --- /dev/null +++ b/docs/js/highlight-js-diff.62d66733.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-diff"],{"48b8":function(e,n){function a(e){const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}e.exports=a}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-http.163e45b6.js b/docs/js/highlight-js-http.163e45b6.js new file mode 100644 index 0000000..14f39a9 --- /dev/null +++ b/docs/js/highlight-js-http.163e45b6.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-http"],{c01d:function(e,n){function a(e){const n=e.regex,a="HTTP/(2|1\\.[01])",s=/[A-Za-z][A-Za-z0-9-]*/,t={className:"attribute",begin:n.concat("^",s,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},i=[t,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+a+" \\d{3})",end:/$/,contains:[{className:"meta",begin:a},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:i}},{begin:"(?=^[A-Z]+ (.*?) "+a+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:a},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:i}},e.inherit(t,{relevance:0})]}}e.exports=a}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-java.8326d9d8.js b/docs/js/highlight-js-java.8326d9d8.js new file mode 100644 index 0000000..f11ca2a --- /dev/null +++ b/docs/js/highlight-js-java.8326d9d8.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-java"],{"332f":function(e,a){var n="[0-9](_*[0-9])*",s=`\\.(${n})`,i="[0-9a-fA-F](_*[0-9a-fA-F])*",t={className:"number",variants:[{begin:`(\\b(${n})((${s})|\\.)?|(${s}))[eE][+-]?(${n})[fFdD]?\\b`},{begin:`\\b(${n})((${s})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${s})[fFdD]?\\b`},{begin:`\\b(${n})[fFdD]\\b`},{begin:`\\b0[xX]((${i})\\.?|(${i})?\\.(${i}))[pP][+-]?(${n})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${i})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function r(e,a,n){return-1===n?"":e.replace(a,s=>r(e,a,n-1))}function c(e){e.regex;const a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",n=a+r("(?:<"+a+"~~~(?:\\s*,\\s*"+a+"~~~)*>)?",/~~~/g,2),s=["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do"],i=["super","this"],c=["false","true","null"],l=["char","boolean","long","float","int","byte","short","double"],o={keyword:s,literal:c,type:l,built_in:i},b={className:"meta",begin:"@"+a,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},_={className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:o,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,a],className:{1:"keyword",3:"title.class"}},{begin:[a,/\s+/,a,/\s+/,/=/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,a],className:{1:"keyword",3:"title.class"},contains:[_,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+n+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:o,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[b,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,t,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},t,b]}}e.exports=c}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-javascript.acb8a8eb.js b/docs/js/highlight-js-javascript.acb8a8eb.js new file mode 100644 index 0000000..ac843fc --- /dev/null +++ b/docs/js/highlight-js-javascript.acb8a8eb.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-javascript"],{"4dd1":function(e,n){const a="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],s=["true","false","null","undefined","NaN","Infinity"],c=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],r=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],i=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],o=["arguments","this","super","console","window","document","localStorage","module","global"],l=[].concat(i,c,r);function b(e){const n=e.regex,b=(e,{after:n})=>{const a="",end:""},u=/<[A-Za-z0-9\\._:-]+\s*\/>/,m={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{const a=e[0].length+e.index,t=e.input[a];if("<"===t||","===t)return void n.ignoreMatch();let s;">"===t&&(b(e,{after:a})||n.ignoreMatch());const c=e.input.substr(a);(s=c.match(/^\s+extends\s+/))&&0===s.index&&n.ignoreMatch()}},E={$pattern:a,keyword:t,literal:s,built_in:l,"variable.language":o},A="[0-9](_?[0-9])*",y=`\\.(${A})`,N="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",f={className:"number",variants:[{begin:`(\\b(${N})((${y})|\\.)?|(${y}))[eE][+-]?(${A})\\b`},{begin:`\\b(${N})\\b((${y})\\b|\\.)?|(${y})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},h={className:"subst",begin:"\\$\\{",end:"\\}",keywords:E,contains:[]},_={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,h],subLanguage:"xml"}},p={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,h],subLanguage:"css"}},v={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,h]},w=e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:d+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),S={className:"comment",variants:[w,e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},R=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,_,p,v,f];h.contains=R.concat({begin:/\{/,end:/\}/,keywords:E,contains:["self"].concat(R)});const k=[].concat(S,h.contains),O=k.concat([{begin:/\(/,end:/\)/,keywords:E,contains:["self"].concat(k)}]),I={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:O},x={variants:[{match:[/class/,/\s+/,d,/\s+/,/extends/,/\s+/,n.concat(d,"(",n.concat(/\./,d),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,d],scope:{1:"keyword",3:"title.class"}}]},T={relevance:0,match:n.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]+|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+/),className:"title.class",keywords:{_:[...c,...r]}},C={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},M={variants:[{match:[/function/,/\s+/,d,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[I],illegal:/%/},B={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function $(e){return n.concat("(?!",e.join("|"),")")}const D={match:n.concat(/\b/,$([...i,"super"]),d,n.lookahead(/\(/)),className:"title.function",relevance:0},U={begin:n.concat(/\./,n.lookahead(n.concat(d,/(?![0-9A-Za-z$_(])/))),end:d,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Z={match:[/get|set/,/\s+/,d,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},I]},z="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",F={match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,n.lookahead(z)],className:{1:"keyword",3:"title.function"},contains:[I]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:E,exports:{PARAMS_CONTAINS:O,CLASS_REFERENCE:T},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),C,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,_,p,v,S,f,T,{className:"attr",begin:d+n.lookahead(":"),relevance:0},F,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[S,e.REGEXP_MODE,{className:"function",begin:z,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:O}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:g.begin,end:g.end},{match:u},{begin:m.begin,"on:begin":m.isTrulyOpeningTag,end:m.end}],subLanguage:"xml",contains:[{begin:m.begin,end:m.end,skip:!0,contains:["self"]}]}]},M,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[I,e.inherit(e.TITLE_MODE,{begin:d,className:"title.function"})]},{match:/\.\.\./,relevance:0},U,{match:"\\$"+d,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[I]},D,B,x,Z,{match:/\$[(.]/}]}}e.exports=b}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-json.471128d2.js b/docs/js/highlight-js-json.471128d2.js new file mode 100644 index 0000000..c87d3c3 --- /dev/null +++ b/docs/js/highlight-js-json.471128d2.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-json"],{"5ad2":function(n,e){function a(n){const e={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},a={match:/[{}[\],:]/,className:"punctuation",relevance:0},s={beginKeywords:["true","false","null"].join(" ")};return{name:"JSON",contains:[e,a,n.QUOTE_STRING_MODE,s,n.C_NUMBER_MODE,n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}n.exports=a}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-llvm.6100b125.js b/docs/js/highlight-js-llvm.6100b125.js new file mode 100644 index 0000000..0beb806 --- /dev/null +++ b/docs/js/highlight-js-llvm.6100b125.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-llvm"],{"7c30":function(e,n){function a(e){const n=e.regex,a=/([-a-zA-Z$._][\w$.-]*)/,t={className:"type",begin:/\bi\d+(?=\s|\b)/},i={className:"operator",relevance:0,begin:/=/},c={className:"punctuation",relevance:0,begin:/,/},l={className:"number",variants:[{begin:/0[xX][a-fA-F0-9]+/},{begin:/-?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?/}],relevance:0},r={className:"symbol",variants:[{begin:/^\s*[a-z]+:/}],relevance:0},s={className:"variable",variants:[{begin:n.concat(/%/,a)},{begin:/%\d+/},{begin:/#\d+/}]},o={className:"title",variants:[{begin:n.concat(/@/,a)},{begin:/@\d+/},{begin:n.concat(/!/,a)},{begin:n.concat(/!\d+/,a)},{begin:/!\d+/}]};return{name:"LLVM IR",keywords:"begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly double",contains:[t,e.COMMENT(/;\s*$/,null,{relevance:0}),e.COMMENT(/;/,/$/),e.QUOTE_STRING_MODE,{className:"string",variants:[{begin:/"/,end:/[^\\]"/}]},o,c,i,s,r,l]}}e.exports=a}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-markdown.90077643.js b/docs/js/highlight-js-markdown.90077643.js new file mode 100644 index 0000000..dc8d097 --- /dev/null +++ b/docs/js/highlight-js-markdown.90077643.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-markdown"],{"04b0":function(n,e){function a(n){const e=n.regex,a={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},i={begin:"^[-\\*]{3,}",end:"$"},s={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},c={className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},t={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},g=/[A-Za-z][A-Za-z0-9+.-]*/,d={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:e.concat(/\[.+?\]\(/,g,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},l={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},o={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};l.contains.push(o),o.contains.push(l);let b=[a,d];l.contains=l.contains.concat(b),o.contains=o.contains.concat(b),b=b.concat(l,o);const r={className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:b},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:b}]}]},m={className:"quote",begin:"^>\\s+",contains:b,end:"$"};return{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[r,a,c,l,o,m,s,i,d,t]}}n.exports=a}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-objectivec.bcdf5156.js b/docs/js/highlight-js-objectivec.bcdf5156.js new file mode 100644 index 0000000..2456ffc --- /dev/null +++ b/docs/js/highlight-js-objectivec.bcdf5156.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-objectivec"],{"9bf2":function(e,n){function _(e){const n={className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},_=/[a-zA-Z@][a-zA-Z0-9_]*/,i=["int","float","while","char","export","sizeof","typedef","const","struct","for","union","unsigned","long","volatile","static","bool","mutable","if","do","return","goto","void","enum","else","break","extern","asm","case","short","default","double","register","explicit","signed","typename","this","switch","continue","wchar_t","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","super","unichar","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],t=["false","true","FALSE","TRUE","nil","YES","NO","NULL"],a=["BOOL","dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],o={$pattern:_,keyword:i,literal:t,built_in:a},s={$pattern:_,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:o,illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+s.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:s,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}e.exports=_}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-perl.757d7b6f.js b/docs/js/highlight-js-perl.757d7b6f.js new file mode 100644 index 0000000..a4c74d1 --- /dev/null +++ b/docs/js/highlight-js-perl.757d7b6f.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-perl"],{"6a51":function(e,n){function t(e){const n=e.regex,t=["abs","accept","alarm","and","atan2","bind","binmode","bless","break","caller","chdir","chmod","chomp","chop","chown","chr","chroot","close","closedir","connect","continue","cos","crypt","dbmclose","dbmopen","defined","delete","die","do","dump","each","else","elsif","endgrent","endhostent","endnetent","endprotoent","endpwent","endservent","eof","eval","exec","exists","exit","exp","fcntl","fileno","flock","for","foreach","fork","format","formline","getc","getgrent","getgrgid","getgrnam","gethostbyaddr","gethostbyname","gethostent","getlogin","getnetbyaddr","getnetbyname","getnetent","getpeername","getpgrp","getpriority","getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam","getpwuid","getservbyname","getservbyport","getservent","getsockname","getsockopt","given","glob","gmtime","goto","grep","gt","hex","if","index","int","ioctl","join","keys","kill","last","lc","lcfirst","length","link","listen","local","localtime","log","lstat","lt","ma","map","mkdir","msgctl","msgget","msgrcv","msgsnd","my","ne","next","no","not","oct","open","opendir","or","ord","our","pack","package","pipe","pop","pos","print","printf","prototype","push","q|0","qq","quotemeta","qw","qx","rand","read","readdir","readline","readlink","readpipe","recv","redo","ref","rename","require","reset","return","reverse","rewinddir","rindex","rmdir","say","scalar","seek","seekdir","select","semctl","semget","semop","send","setgrent","sethostent","setnetent","setpgrp","setpriority","setprotoent","setpwent","setservent","setsockopt","shift","shmctl","shmget","shmread","shmwrite","shutdown","sin","sleep","socket","socketpair","sort","splice","split","sprintf","sqrt","srand","stat","state","study","sub","substr","symlink","syscall","sysopen","sysread","sysseek","system","syswrite","tell","telldir","tie","tied","time","times","tr","truncate","uc","ucfirst","umask","undef","unless","unlink","unpack","unshift","untie","until","use","utime","values","vec","wait","waitpid","wantarray","warn","when","while","write","x|0","xor","y|0"],s=/[dualxmsipngr]{0,12}/,r={$pattern:/[\w.]+/,keyword:t.join(" ")},i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:r},a={begin:/->\{/,end:/\}/},o={variants:[{begin:/\$\d/},{begin:n.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@][^\s\w{]/,relevance:0}]},c=[e.BACKSLASH_ESCAPE,i,o],g=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],l=(e,t,r="\\1")=>{const i="\\1"===r?r:n.concat(r,t);return n.concat(n.concat("(?:",e,")"),t,/(?:\\.|[^\\\/])*?/,i,/(?:\\.|[^\\\/])*?/,r,s)},d=(e,t,r)=>n.concat(n.concat("(?:",e,")"),t,/(?:\\.|[^\\\/])*?/,r,s),p=[o,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),a,{className:"string",contains:c,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:l("s|tr|y",n.either(...g,{capture:!0}))},{begin:l("s|tr|y","\\(","\\)")},{begin:l("s|tr|y","\\[","\\]")},{begin:l("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:d("(?:m|qr)?",/\//,/\//)},{begin:d("m|qr",n.either(...g,{capture:!0}),/\1/)},{begin:d("m|qr",/\(/,/\)/)},{begin:d("m|qr",/\[/,/\]/)},{begin:d("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return i.contains=p,a.contains=p,{name:"Perl",aliases:["pl","pm"],keywords:r,contains:p}}e.exports=t}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-php.cc8d6c27.js b/docs/js/highlight-js-php.cc8d6c27.js new file mode 100644 index 0000000..3d12a9c --- /dev/null +++ b/docs/js/highlight-js-php.cc8d6c27.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-php"],{2907:function(e,r){function t(e){const r={className:"variable",begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*(?![A-Za-z0-9])(?![$])"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},n=e.inherit(e.APOS_STRING_MODE,{illegal:null}),i=e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(a)}),o=e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*(\w+)\n/,end:/[ \t]*(\w+)\b/,contains:e.QUOTE_STRING_MODE.contains.concat(a)}),l={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[e.inherit(n,{begin:"b'",end:"'"}),e.inherit(i,{begin:'b"',end:'"'}),i,n,o]},c={className:"number",variants:[{begin:"\\b0b[01]+(?:_[01]+)*\\b"},{begin:"\\b0o[0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0x[\\da-f]+(?:_[\\da-f]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:e[+-]?\\d+)?"}],relevance:0},s={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile enum eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list match|0 mixed new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException UnhandledMatchError ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Stringable Throwable Traversable WeakReference WeakMap Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{case_insensitive:!0,keywords:s,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:s,contains:["self",r,e.C_BLOCK_COMMENT_MODE,l,c]}]},{className:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",relevance:0,end:";",contains:[e.UNDERSCORE_TITLE_MODE]},l,c]}}e.exports=t}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-python.c214ed92.js b/docs/js/highlight-js-python.c214ed92.js new file mode 100644 index 0000000..c8d2ed8 --- /dev/null +++ b/docs/js/highlight-js-python.c214ed92.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-python"],{9510:function(e,n){function a(e){const n=e.regex,a=/[\p{XID_Start}_]\p{XID_Continue}*/u,i=["and","as","assert","async","await","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],s=["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],t=["__debug__","Ellipsis","False","None","NotImplemented","True"],r=["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"],l={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:i,built_in:s,literal:t,type:r},o={className:"meta",begin:/^(>>>|\.\.\.) /},b={className:"subst",begin:/\{/,end:/\}/,keywords:l,illegal:/#/},c={begin:/\{\{/,relevance:0},d={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,o],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,o],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,o,c,b]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,o,c,b]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,c,b]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,c,b]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},p="[0-9](_?[0-9])*",g=`(\\b(${p}))?\\.(${p})|\\b(${p})\\.`,m={className:"number",relevance:0,variants:[{begin:`(\\b(${p})|(${g}))[eE][+-]?(${p})[jJ]?\\b`},{begin:`(${g})[jJ]?`},{begin:"\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?\\b"},{begin:"\\b0[bB](_?[01])+[lL]?\\b"},{begin:"\\b0[oO](_?[0-7])+[lL]?\\b"},{begin:"\\b0[xX](_?[0-9a-fA-F])+[lL]?\\b"},{begin:`\\b(${p})[jJ]\\b`}]},_={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:l,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},u={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:l,contains:["self",o,m,d,e.HASH_COMMENT_MODE]}]};return b.contains=[d,m,o],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:l,illegal:/(<\/|->|\?)|=>/,contains:[o,m,{begin:/\bself\b/},{beginKeywords:"if",relevance:0},d,_,e.HASH_COMMENT_MODE,{match:[/def/,/\s+/,a],scope:{1:"keyword",3:"title.function"},contains:[u]},{variants:[{match:[/class/,/\s+/,a,/\s*/,/\(\s*/,a,/\s*\)/]},{match:[/class/,/\s+/,a]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[m,u,d]}]}}e.exports=a}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-ruby.f889d392.js b/docs/js/highlight-js-ruby.f889d392.js new file mode 100644 index 0000000..a8355da --- /dev/null +++ b/docs/js/highlight-js-ruby.f889d392.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-ruby"],{"82cb":function(e,n){function a(e){const n=e.regex,a="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",i={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor __FILE__",built_in:"proc lambda",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},b={begin:"#<",end:">"},c=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],r={className:"subst",begin:/#\{/,end:/\}/,keywords:i},d={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,r]})]}]},t="[1-9](_?[0-9])*|0",o="[0-9](_?[0-9])*",g={className:"number",relevance:0,variants:[{begin:`\\b(${t})(\\.(${o}))?([eE][+-]?(${o})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},l={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:i},_=[d,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE,relevance:0}]}].concat(c)},{className:"function",begin:n.concat(/def\s+/,n.lookahead(a+"\\s*(\\(|;|$)")),relevance:0,keywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:a}),l].concat(c)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[d,{begin:a}],relevance:0},g,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|/,end:/\|/,relevance:0,keywords:i},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,r],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(b,c),relevance:0}].concat(b,c);r.contains=_,l.contains=_;const w="[>?]>",E="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>",N=[{begin:/^\s*=>/,starts:{end:"$",contains:_}},{className:"meta",begin:"^("+w+"|"+E+"|"+u+")(?=[ ])",starts:{end:"$",contains:_}}];return c.unshift(b),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:i,illegal:/\/\*/,contains:[e.SHEBANG({binary:"ruby"})].concat(N).concat(c).concat(_)}}e.exports=a}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-scss.62ee18da.js b/docs/js/highlight-js-scss.62ee18da.js new file mode 100644 index 0000000..8f46244 --- /dev/null +++ b/docs/js/highlight-js-scss.62ee18da.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-scss"],{6113:function(e,t){const i=e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}),o=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],r=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],a=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],n=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],l=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-height","max-width","min-height","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse();function s(e){const t=i(e),s=n,d=a,c="@[a-z-]+",p="and or not only",g="[a-zA-Z-][a-zA-Z0-9_-]*",m={className:"variable",begin:"(\\$"+g+")\\b"};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},t.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+o.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+d.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+s.join("|")+")"},m,{begin:/\(/,end:/\)/,contains:[t.CSS_NUMBER_MODE]},t.CSS_VARIABLE,{className:"attribute",begin:"\\b("+l.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,contains:[t.BLOCK_COMMENT,m,t.HEXCOLOR,t.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,t.IMPORTANT]},{begin:"@(page|font-face)",keywords:{$pattern:c,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:p,attribute:r.join(" ")},contains:[{begin:c,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},m,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,t.HEXCOLOR,t.CSS_NUMBER_MODE]},t.FUNCTION_DISPATCH]}}e.exports=s}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-shell.dd7f411f.js b/docs/js/highlight-js-shell.dd7f411f.js new file mode 100644 index 0000000..999f452 --- /dev/null +++ b/docs/js/highlight-js-shell.dd7f411f.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-shell"],{b65b:function(s,n){function e(s){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}s.exports=e}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-swift.84f3e88c.js b/docs/js/highlight-js-swift.84f3e88c.js new file mode 100644 index 0000000..89d1daf --- /dev/null +++ b/docs/js/highlight-js-swift.84f3e88c.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-swift"],{"2a39":function(e,n){function a(e){return e?"string"===typeof e?e:e.source:null}function t(e){return i("(?=",e,")")}function i(...e){const n=e.map(e=>a(e)).join("");return n}function s(e){const n=e[e.length-1];return"object"===typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}}function u(...e){const n=s(e),t="("+(n.capture?"":"?:")+e.map(e=>a(e)).join("|")+")";return t}const c=e=>i(/\b/,e,/\w$/.test(e)?/\b/:/\B/),o=["Protocol","Type"].map(c),r=["init","self"].map(c),l=["Any","Self"],m=["actor","associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],p=["false","nil","true"],d=["assignment","associativity","higherThan","left","lowerThan","none","right"],F=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],b=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],h=u(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),f=u(h,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),w=i(h,f,"*"),y=u(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),g=u(y,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),E=i(y,g,"*"),v=i(/[A-Z]/,g,"*"),A=["autoclosure",i(/convention\(/,u("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",i(/objc\(/,E,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],N=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];function C(e){const n={match:/\s+/,relevance:0},a=e.COMMENT("/\\*","\\*/",{contains:["self"]}),s=[e.C_LINE_COMMENT_MODE,a],h={match:[/\./,u(...o,...r)],className:{2:"keyword"}},y={match:i(/\./,u(...m)),relevance:0},C=m.filter(e=>"string"===typeof e).concat(["_|0"]),k=m.filter(e=>"string"!==typeof e).concat(l).map(c),D={variants:[{className:"keyword",match:u(...k,...r)}]},B={$pattern:u(/\b\w+/,/#\w+/),keyword:C.concat(F),literal:p},_=[h,y,D],S={match:i(/\./,u(...b)),relevance:0},M={className:"built_in",match:i(/\b/,u(...b),/(?=\()/)},x=[S,M],$={match:/->/,relevance:0},I={className:"operator",relevance:0,variants:[{match:w},{match:`\\.(\\.|${f})+`}]},O=[$,I],L="([0-9]_*)+",T="([0-9a-fA-F]_*)+",j={className:"number",relevance:0,variants:[{match:`\\b(${L})(\\.(${L}))?([eE][+-]?(${L}))?\\b`},{match:`\\b0x(${T})(\\.(${T}))?([pP][+-]?(${L}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},P=(e="")=>({className:"subst",variants:[{match:i(/\\/,e,/[0\\tnr"']/)},{match:i(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),K=(e="")=>({className:"subst",match:i(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),z=(e="")=>({className:"subst",label:"interpol",begin:i(/\\/,e,/\(/),end:/\)/}),q=(e="")=>({begin:i(e,/"""/),end:i(/"""/,e),contains:[P(e),K(e),z(e)]}),U=(e="")=>({begin:i(e,/"/),end:i(/"/,e),contains:[P(e),z(e)]}),Z={className:"string",variants:[q(),q("#"),q("##"),q("###"),U(),U("#"),U("##"),U("###")]},V={match:i(/`/,E,/`/)},W={className:"variable",match:/\$\d+/},G={className:"variable",match:`\\$${g}+`},J=[V,W,G],R={match:/(@|#)available/,className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:N,contains:[...O,j,Z]}]}},X={className:"keyword",match:i(/@/,u(...A))},H={className:"meta",match:i(/@/,E)},Q=[R,X,H],Y={match:t(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:i(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,g,"+")},{className:"type",match:v,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:i(/\s+&\s+/,t(v)),relevance:0}]},ee={begin://,keywords:B,contains:[...s,..._,...Q,$,Y]};Y.contains.push(ee);const ne={match:i(E,/\s*:/),keywords:"_|0",relevance:0},ae={begin:/\(/,end:/\)/,relevance:0,keywords:B,contains:["self",ne,...s,..._,...x,...O,j,Z,...J,...Q,Y]},te={begin://,contains:[...s,Y]},ie={begin:u(t(i(E,/\s*:/)),t(i(E,/\s+/,E,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:E}]},se={begin:/\(/,end:/\)/,keywords:B,contains:[ie,...s,..._,...O,j,Z,...Q,Y,ae],endsParent:!0,illegal:/["']/},ue={match:[/func/,/\s+/,u(V.match,E,w)],className:{1:"keyword",3:"title.function"},contains:[te,se,n],illegal:[/\[/,/%/]},ce={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[te,se,n],illegal:/\[|%/},oe={match:[/operator/,/\s+/,w],className:{1:"keyword",3:"title"}},re={begin:[/precedencegroup/,/\s+/,v],className:{1:"keyword",3:"title"},contains:[Y],keywords:[...d,...p],end:/}/};for(const t of Z.variants){const e=t.contains.find(e=>"interpol"===e.label);e.keywords=B;const n=[..._,...x,...O,j,Z,...J];e.contains=[...n,{begin:/\(/,end:/\)/,contains:["self",...n]}]}return{name:"Swift",keywords:B,contains:[...s,ue,ce,{beginKeywords:"struct protocol class extension enum actor",end:"\\{",excludeEnd:!0,keywords:B,contains:[e.inherit(e.TITLE_MODE,{className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),..._]},oe,re,{beginKeywords:"import",end:/$/,contains:[...s],relevance:0},..._,...x,...O,j,Z,...J,...Q,Y,ae]}}e.exports=C}}]); \ No newline at end of file diff --git a/docs/js/highlight-js-xml.9c3688c7.js b/docs/js/highlight-js-xml.9c3688c7.js new file mode 100644 index 0000000..55cc1e2 --- /dev/null +++ b/docs/js/highlight-js-xml.9c3688c7.js @@ -0,0 +1,10 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-xml"],{"8dcb":function(e,n){function a(e){const n=e.regex,a=n.concat(/[A-Z_]/,n.optional(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),s=/[A-Za-z0-9._:-]+/,t={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},c=e.inherit(i,{begin:/\(/,end:/\)/}),l=e.inherit(e.APOS_STRING_MODE,{className:"string"}),r=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),g={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,r,l,c,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[i,c,r,l]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},t,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[g],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[g],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:n.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:a,relevance:0,starts:g}]},{className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(a,/>/))),contains:[{className:"name",begin:a,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}e.exports=a}}]); \ No newline at end of file diff --git a/docs/js/index.4dfda72c.js b/docs/js/index.4dfda72c.js new file mode 100644 index 0000000..8a53469 --- /dev/null +++ b/docs/js/index.4dfda72c.js @@ -0,0 +1,9 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */(function(e){function t(t){for(var i,r,h=t[0],c=t[1],a=t[2],l=0,u=[];l])/g,r=/^-+/,n=/["'&<>]/g;function s(e){return e.trim().replace(i,"-").replace(r,"").toLowerCase()}function h(e){const t=e=>({'"':""","'":"'","&":"&","<":"<",">":">"}[e]||e);return e.replace(n,t)}const c={zero:"zero",one:"one",two:"two",few:"few",many:"many",other:"other"},a={cardinal:"cardinal",ordinal:"ordinal"};function l(e,t){const{cardinal:o}=a,{one:i,other:r}=c,n="en",s=1===t?i:r;if(!e[n]||!e[n][s])throw new Error("No default choices provided to pluralize using default locale "+n);let h=n,l=s;if("Intl"in window&&"PluralRules"in window.Intl){const i=navigator.languages?navigator.languages:[navigator.language],r=new Intl.PluralRules(i,{type:o}),n=r.select(t),s=r.resolvedOptions().locale;e[s]&&e[s][n]&&(h=s,l=n)}return e[h][l]}function u(e){const t=/#(\d)(.*)/.exec(e);if(null===t)return e;const[o,i]=t.slice(1),r=`\\3${o} `;return`#${r}${i}`}},"1b02":function(e,t,o){"use strict";o("a6ff")},"2be1":function(e,t,o){"use strict";o("9b4f")},3908:function(e,t,o){"use strict";function i(e){let t=null,o=e-1;const i=new Promise(e=>{t=e});return requestAnimationFrame((function e(){o-=1,o<=0?t():requestAnimationFrame(e)})),i}o.d(t,"a",(function(){return i}))},"5c0b":function(e,t,o){"use strict";o("9c0c")},6842:function(e,t,o){"use strict";function i(e,t,o){let i,r=e,n=t;for("string"===typeof n&&(n=[n]),i=0;ie.json()).catch(()=>({}))}const h=(e,t)=>i(r,e,t)},7138:function(e,t,o){"use strict";o("813c")},"813c":function(e,t,o){},"821b":function(e,t,o){"use strict";t["a"]={auto:{label:"Auto",value:"auto"},dark:{label:"Dark",value:"dark"},light:{label:"Light",value:"light"}}},"942d":function(e,t,o){"use strict";o.d(t,"a",(function(){return i})),o.d(t,"b",(function(){return r}));const i=52,r="nav-sticky-anchor"},9895:function(e,t,o){"use strict";o.d(t,"b",(function(){return i})),o.d(t,"a",(function(){return r}));const i="not-found",r="documentation-topic"},"9b4f":function(e,t,o){},"9c0c":function(e,t,o){},a6aa:function(e,t,o){"use strict";o("d964")},a6ff:function(e,t,o){},d26a:function(e,t,o){"use strict";o.d(t,"c",(function(){return r})),o.d(t,"b",(function(){return n})),o.d(t,"a",(function(){return s}));var i={input:"input",tags:"tags"};function r(e={}){return Object.entries(e).reduce((e,[t,o])=>o?e.concat(`${encodeURIComponent(t)}=${encodeURIComponent(o)}`):e,[]).join("&")}function n(e,{changes:t,language:o,context:i}={}){const[n,s]=e.split("#"),h=n.match(/\?.*/),c=r({changes:t,language:o,context:i}),a=h?"&":"?",l=s?n:e,u=c?`${a}${c}`:"",d=s?"#"+s:"";return`${l}${u}${d}`}function s(e,t){const{query:{changes:o,[i.input]:r,[i.tags]:n,...s}={}}=e,{query:{changes:h,[i.input]:c,[i.tags]:a,...l}={}}=t;return e.name===t.name&&JSON.stringify({path:e.path,query:s})===JSON.stringify({path:t.path,query:l})}},d369:function(e,t,o){"use strict";const i={getItem:e=>{try{return localStorage.getItem(e)}catch(t){return null}},setItem:(e,t)=>{try{localStorage.setItem(e,t)}catch(o){}}},r={preferredColorScheme:"developer.setting.preferredColorScheme",preferredLanguage:"docs.setting.preferredLanguage"},n={preferredColorScheme:"docs.setting.preferredColorScheme"};t["a"]=Object.defineProperties({},Object.keys(r).reduce((e,t)=>({...e,[t]:{get:()=>{const e=n[t],o=i.getItem(r[t]);return e?o||i.getItem(e):o},set:e=>i.setItem(r[t],e)}}),{}))},d964:function(e,t,o){},e425:function(e,t,o){"use strict";var i=o("821b"),r=o("d369");const n="undefined"!==typeof window.matchMedia&&[i["a"].light.value,i["a"].dark.value,"no-preference"].some(e=>window.matchMedia(`(prefers-color-scheme: ${e})`).matches),s=n?i["a"].auto:i["a"].light;t["a"]={state:{preferredColorScheme:r["a"].preferredColorScheme||s.value,supportsAutoColorScheme:n,systemColorScheme:i["a"].light.value},setPreferredColorScheme(e){this.state.preferredColorScheme=e,r["a"].preferredColorScheme=e},setSystemColorScheme(e){this.state.systemColorScheme=e},syncPreferredColorScheme(){r["a"].preferredColorScheme&&r["a"].preferredColorScheme!==this.state.preferredColorScheme&&(this.state.preferredColorScheme=r["a"].preferredColorScheme)}}},e4ca:function(e,t,o){},e51f:function(e,t,o){"use strict";o("e4ca")},ed96:function(e,t,o){o.p=window.baseUrl},f161:function(e,t,o){"use strict";o.r(t);o("ed96");var i=o("2b0e"),r=o("8c4f"),n=function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("div",{class:{fromkeyboard:e.fromKeyboard,hascustomheader:e.hasCustomHeader},attrs:{id:"app"}},[o("a",{attrs:{href:"#main",id:"skip-nav"}},[e._v("Skip Navigation")]),o("InitialLoadingPlaceholder"),e._t("header",(function(){return[e.hasCustomHeader?o("custom-header",{attrs:{"data-color-scheme":e.preferredColorScheme}}):e._e()]}),{isTargetIDE:e.isTargetIDE}),o("div",{attrs:{id:e.baseNavStickyAnchorId}}),e._t("default",(function(){return[o("router-view"),e.hasCustomFooter?o("custom-footer",{attrs:{"data-color-scheme":e.preferredColorScheme}}):o("Footer")]}),{isTargetIDE:e.isTargetIDE}),e._t("footer",null,{isTargetIDE:e.isTargetIDE})],2)},s=[],h=o("e425"),c=o("821b"),a=function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("footer",{staticClass:"footer"},[o("div",{staticClass:"row"},[o("ColorSchemeToggle")],1)])},l=[],u=function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("div",{staticClass:"color-scheme-toggle",attrs:{"aria-label":"Select a color scheme preference",role:"radiogroup",tabindex:"0"}},e._l(e.options,(function(t){return o("label",{key:t.value},[o("input",{attrs:{type:"radio"},domProps:{checked:t.value==e.preferredColorScheme,value:t.value},on:{input:e.setPreferredColorScheme}}),o("div",{staticClass:"text"},[e._v(e._s(t.label))])])})),0)},d=[],g={name:"ColorSchemeToggle",data:()=>({appState:h["a"].state}),computed:{options:({supportsAutoColorScheme:e})=>[c["a"].light,c["a"].dark,...e?[c["a"].auto]:[]],preferredColorScheme:({appState:e})=>e.preferredColorScheme,supportsAutoColorScheme:({appState:e})=>e.supportsAutoColorScheme},methods:{setPreferredColorScheme:e=>{h["a"].setPreferredColorScheme(e.target.value)}},watch:{preferredColorScheme:{immediate:!0,handler(e){document.body.dataset.colorScheme=e}}}},f=g,p=(o("2be1"),o("2877")),m=Object(p["a"])(f,u,d,!1,null,"4472ec1e",null),j=m.exports,v={name:"Footer",components:{ColorSchemeToggle:j}},w=v,b=(o("1b02"),Object(p["a"])(w,a,l,!1,null,"67c823d8",null)),y=b.exports,S=function(){var e=this,t=e.$createElement,o=e._self._c||t;return e.loaded?e._e():o("div",{staticClass:"InitialLoadingPlaceholder",attrs:{id:"loading-placeholder"}})},E=[],C={name:"InitialLoadingPlaceholder",data(){return{loaded:!1}},created(){this.$router.onReady(()=>{this.loaded=!0})}},_=C,P=(o("e51f"),Object(p["a"])(_,S,E,!1,null,"47e4ace8",null)),T=P.exports,k=o("942d"),A=o("6842");function O(e,t){return e&&"object"===typeof e&&Object.prototype.hasOwnProperty.call(e,t)&&"string"===typeof e[t]}function L(e,t,o,i){if(!t||"object"!==typeof t||i&&(O(t,"light")||O(t,"dark"))){let r=t;if(O(t,i)&&(r=t[i]),"object"===typeof r)return;o[e]=r}else Object.entries(t).forEach(([t,r])=>{const n=[e,t].join("-");L(n,r,o,i)})}function D(e,t="light"){const o={},i=e||{};return L("-",i,o,t),o}var I={name:"CoreApp",components:{Footer:y,InitialLoadingPlaceholder:T},provide(){return{isTargetIDE:this.isTargetIDE,performanceMetricsEnabled:"true"===Object({NODE_ENV:"production",VUE_APP_TITLE:"Documentation",BASE_URL:"{{BASE_PATH}}/"}).VUE_APP_PERFORMANCE_ENABLED}},data(){return{appState:h["a"].state,fromKeyboard:!1,isTargetIDE:"ide"===Object({NODE_ENV:"production",VUE_APP_TITLE:"Documentation",BASE_URL:"{{BASE_PATH}}/"}).VUE_APP_TARGET,themeSettings:A["d"],baseNavStickyAnchorId:k["b"]}},computed:{currentColorScheme:({appState:e})=>e.systemColorScheme,preferredColorScheme:({appState:e})=>e.preferredColorScheme,CSSCustomProperties:({themeSettings:e,currentColorScheme:t})=>D(e.theme,t),hasCustomHeader:()=>!!window.customElements.get("custom-header"),hasCustomFooter:()=>!!window.customElements.get("custom-footer")},props:{enableThemeSettings:{type:Boolean,default:!0}},watch:{CSSCustomProperties:{immediate:!0,handler(e){this.detachStylesFromRoot(e),this.attachStylesToRoot(e)}}},async created(){window.addEventListener("keydown",this.onKeyDown),this.$bridge.on("navigation",this.handleNavigationRequest),this.enableThemeSettings&&Object.assign(this.themeSettings,await Object(A["b"])()),window.addEventListener("pageshow",this.syncPreferredColorScheme),this.$once("hook:beforeDestroy",()=>{window.removeEventListener("pageshow",this.syncPreferredColorScheme)})},mounted(){(document.querySelector(".footer-current-year")||{}).innerText=(new Date).getFullYear(),this.attachColorSchemeListeners()},beforeDestroy(){this.fromKeyboard?window.removeEventListener("mousedown",this.onMouseDown):window.removeEventListener("keydown",this.onKeyDown),this.$bridge.off("navigation",this.handleNavigationRequest),this.detachStylesFromRoot(this.CSSCustomProperties)},methods:{onKeyDown(){this.fromKeyboard=!0,window.addEventListener("mousedown",this.onMouseDown),window.removeEventListener("keydown",this.onKeyDown)},onMouseDown(){this.fromKeyboard=!1,window.addEventListener("keydown",this.onKeyDown),window.removeEventListener("mousedown",this.onMouseDown)},handleNavigationRequest(e){this.$router.push(e)},attachColorSchemeListeners(){if(!window.matchMedia)return;const e=window.matchMedia("(prefers-color-scheme: dark)");e.addListener(this.onColorSchemePreferenceChange),this.$once("hook:beforeDestroy",()=>{e.removeListener(this.onColorSchemePreferenceChange)}),this.onColorSchemePreferenceChange(e)},onColorSchemePreferenceChange({matches:e}){const t=e?c["a"].dark:c["a"].light;h["a"].setSystemColorScheme(t.value)},attachStylesToRoot(e){const t=document.documentElement;Object.entries(e).filter(([,e])=>Boolean(e)).forEach(([e,o])=>{t.style.setProperty(e,o)})},detachStylesFromRoot(e){const t=document.documentElement;Object.entries(e).forEach(([e])=>{t.style.removeProperty(e)})},syncPreferredColorScheme(){h["a"].syncPreferredColorScheme()}}},x=I,$=(o("5c0b"),o("a6aa"),Object(p["a"])(x,n,s,!1,null,"bf0cd418",null)),N=$.exports;class R{constructor(){this.$send=()=>{}}send(e){this.$send(e)}}class U{constructor(){const{webkit:{messageHandlers:{bridge:e={}}={}}={}}=window;this.bridge=e;const{postMessage:t=(()=>{})}=e;this.$send=t.bind(e)}send(e){this.$send(e)}}class B{constructor(e=new R){this.backend=e,this.listeners={}}send(e){this.backend.send(e)}receive(e){this.emit(e.type,e.data)}emit(e,t){this.listeners[e]&&this.listeners[e].forEach(e=>e(t))}on(e,t){this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t)}off(e,t){this.listeners[e]&&this.listeners[e].delete(t)}}var M={install(e,t){let o;o=t.performanceMetricsEnabled||"ide"===t.appTarget?new U:new R,e.prototype.$bridge=new B(o)}};function V(e){return"custom-"+e}function q(e){return class extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),o=e.content.cloneNode(!0);t.appendChild(o)}}}function F(e){const t=V(e),o=document.getElementById(t);o&&window.customElements.define(t,q(o))}function H(e,t={names:["header","footer"]}){const{names:o}=t;e.config.ignoredElements=/^custom-/,o.forEach(F)}function K(e,t){const{value:o=!1}=t;e.style.display=o?"none":""}var G={hide:K};function J(e,{performanceMetrics:t=!1}={}){e.config.productionTip=!1,e.use(H),e.directive("hide",G.hide),e.use(M,{appTarget:Object({NODE_ENV:"production",VUE_APP_TITLE:"Documentation",BASE_URL:"{{BASE_PATH}}/"}).VUE_APP_TARGET,performanceMetricsEnabled:t}),window.bridge=e.prototype.$bridge,e.config.performance=t}var z=o("9895"),Y=o("3908"),X=o("002d"),Q=o("d26a");function W(){const{location:e}=window;return e.pathname+e.search+e.hash}async function Z(e,t,o){if(o)return await this.app.$nextTick(),o;if(e.hash){const{name:t,query:o,hash:i}=e,r=t.includes(z["a"]),n=!!o.changes,s=r&&n?k["a"]:0,h=k["a"]+s,c="ide"===Object({NODE_ENV:"production",VUE_APP_TITLE:"Documentation",BASE_URL:"{{BASE_PATH}}/"}).VUE_APP_TARGET?0:h;return{selector:Object(X["b"])(i),offset:{x:0,y:c}}}return!Object(Q["a"])(e,t)&&{x:0,y:0}}async function ee(){let e=window.sessionStorage.getItem("scrollPosition");if(e){try{e=JSON.parse(e)}catch(t){return void console.error("Error parsing scrollPosition from sessionStorage",t)}W()===e.location&&(await Object(Y["a"])(2),window.scrollTo(e.x,e.y))}}function te(){window.location.hash||sessionStorage.setItem("scrollPosition",JSON.stringify({x:window.pageXOffset,y:window.pageYOffset,location:W()}))}var oe=function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("GenericError")},ie=[],re=function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("div",{staticClass:"generic-error"},[o("div",{staticClass:"container"},[o("h1",{staticClass:"title error-content"},[e._v(e._s(e.message))]),e._t("default")],2)])},ne=[],se={name:"GenericError",props:{message:{type:String,default:"An unknown error occurred."}}},he=se,ce=(o("7138"),Object(p["a"])(he,re,ne,!1,null,"790053de",null)),ae=ce.exports,le={name:"ServerError",components:{GenericError:ae}},ue=le,de=Object(p["a"])(ue,oe,ie,!1,null,null,null),ge=de.exports,fe=function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("GenericError",{attrs:{message:"The page you’re looking for can’t be found."}},[e._t("default")],2)},pe=[],me={name:"NotFound",components:{GenericError:ae}},je=me,ve=Object(p["a"])(je,fe,pe,!1,null,null,null),we=ve.exports,be=[{path:"/tutorials/:id",name:"tutorials-overview",component:()=>Promise.all([o.e("documentation-topic~topic~tutorials-overview"),o.e("tutorials-overview")]).then(o.bind(null,"f025"))},{path:"/tutorials/:id/*",name:"topic",component:()=>Promise.all([o.e("documentation-topic~topic~tutorials-overview"),o.e("topic")]).then(o.bind(null,"3213"))},{path:"/documentation/*",name:z["a"],component:()=>Promise.all([o.e("documentation-topic~topic~tutorials-overview"),o.e("documentation-topic")]).then(o.bind(null,"f8ac"))},{path:"*",name:z["b"],component:we},{path:"*",name:"server-error",component:ge}];function ye(e={}){const t=new r["a"]({mode:"history",base:A["a"],scrollBehavior:Z,...e,routes:e.routes||be});return t.onReady(()=>{"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual"),ee()}),"ide"!==Object({NODE_ENV:"production",VUE_APP_TITLE:"Documentation",BASE_URL:"{{BASE_PATH}}/"}).VUE_APP_TARGET&&t.onError(e=>{const{route:o={path:"/"}}=e;t.replace({name:"server-error",params:[o.path]})}),window.addEventListener("unload",te),t}i["default"].use(J),i["default"].use(r["a"]),new i["default"]({router:ye(),render:e=>e(N)}).$mount("#app")}}); \ No newline at end of file diff --git a/docs/js/topic.d56fc284.js b/docs/js/topic.d56fc284.js new file mode 100644 index 0000000..2bb6654 --- /dev/null +++ b/docs/js/topic.d56fc284.js @@ -0,0 +1,20 @@ +/*! + * This source file is part of the Swift.org open source project + * + * Copyright (c) 2021 Apple Inc. and the Swift project authors + * Licensed under Apache License v2.0 with Runtime Library Exception + * + * See https://swift.org/LICENSE.txt for license information + * See https://swift.org/CONTRIBUTORS.txt for Swift project authors + */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["topic"],{"00f4":function(e,t,n){"use strict";n("282f")},"0466":function(e,t,n){},"0530":function(e,t,n){"use strict";n("dbeb")},"0b61":function(e,t,n){},1006:function(e,t,n){"use strict";n("a95e")},"14b7":function(e,t,n){},"1aae":function(e,t,n){},"1d42":function(e,t,n){},"1dd5":function(e,t,n){"use strict";n("7b17")},"26d3":function(e,t,n){"use strict";n("bf0f")},"282f":function(e,t,n){},"2b88":function(e,t,n){"use strict"; +/*! + * portal-vue © Thorsten Lünborg, 2019 + * + * Version: 2.1.7 + * + * LICENCE: MIT + * + * https://github.com/linusborg/portal-vue + * + */function s(e){return e&&"object"===typeof e&&"default"in e?e["default"]:e}Object.defineProperty(t,"__esModule",{value:!0});var i=s(n("2b0e"));function r(e){return r="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function o(e){return a(e)||l(e)||c()}function a(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};return e.reduce((function(e,n){var s=n.passengers[0],i="function"===typeof s?s(t):n.passengers;return e.concat(i)}),[])}function h(e,t){return e.map((function(e,t){return[t,e]})).sort((function(e,n){return t(e[1],n[1])||e[0]-n[0]})).map((function(e){return e[1]}))}function m(e,t){return t.reduce((function(t,n){return e.hasOwnProperty(n)&&(t[n]=e[n]),t}),{})}var f={},v={},g={},y=i.extend({data:function(){return{transports:f,targets:v,sources:g,trackInstances:u}},methods:{open:function(e){if(u){var t=e.to,n=e.from,s=e.passengers,r=e.order,o=void 0===r?1/0:r;if(t&&n&&s){var a={to:t,from:n,passengers:d(s),order:o},l=Object.keys(this.transports);-1===l.indexOf(t)&&i.set(this.transports,t,[]);var c=this.$_getTransportIndex(a),p=this.transports[t].slice(0);-1===c?p.push(a):p[c]=a,this.transports[t]=h(p,(function(e,t){return e.order-t.order}))}}},close:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.to,s=e.from;if(n&&(s||!1!==t)&&this.transports[n])if(t)this.transports[n]=[];else{var i=this.$_getTransportIndex(e);if(i>=0){var r=this.transports[n].slice(0);r.splice(i,1),this.transports[n]=r}}},registerTarget:function(e,t,n){u&&(this.trackInstances&&!n&&this.targets[e]&&console.warn("[portal-vue]: Target ".concat(e," already exists")),this.$set(this.targets,e,Object.freeze([t])))},unregisterTarget:function(e){this.$delete(this.targets,e)},registerSource:function(e,t,n){u&&(this.trackInstances&&!n&&this.sources[e]&&console.warn("[portal-vue]: source ".concat(e," already exists")),this.$set(this.sources,e,Object.freeze([t])))},unregisterSource:function(e){this.$delete(this.sources,e)},hasTarget:function(e){return!(!this.targets[e]||!this.targets[e][0])},hasSource:function(e){return!(!this.sources[e]||!this.sources[e][0])},hasContentFor:function(e){return!!this.transports[e]&&!!this.transports[e].length},$_getTransportIndex:function(e){var t=e.to,n=e.from;for(var s in this.transports[t])if(this.transports[t][s].from===n)return+s;return-1}}}),b=new y(f),C=1,w=i.extend({name:"portal",props:{disabled:{type:Boolean},name:{type:String,default:function(){return String(C++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"DIV"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}}},created:function(){var e=this;this.$nextTick((function(){b.registerSource(e.name,e)}))},mounted:function(){this.disabled||this.sendUpdate()},updated:function(){this.disabled?this.clear():this.sendUpdate()},beforeDestroy:function(){b.unregisterSource(this.name),this.clear()},watch:{to:function(e,t){t&&t!==e&&this.clear(t),this.sendUpdate()}},methods:{clear:function(e){var t={from:this.name,to:e||this.to};b.close(t)},normalizeSlots:function(){return this.$scopedSlots.default?[this.$scopedSlots.default]:this.$slots.default},normalizeOwnChildren:function(e){return"function"===typeof e?e(this.slotProps):e},sendUpdate:function(){var e=this.normalizeSlots();if(e){var t={from:this.name,to:this.to,passengers:o(e),order:this.order};b.open(t)}else this.clear()}},render:function(e){var t=this.$slots.default||this.$scopedSlots.default||[],n=this.tag;return t&&this.disabled?t.length<=1&&this.slim?this.normalizeOwnChildren(t)[0]:e(n,[this.normalizeOwnChildren(t)]):this.slim?e():e(n,{class:{"v-portal":!0},style:{display:"none"},key:"v-portal-placeholder"})}}),_=i.extend({name:"portalTarget",props:{multiple:{type:Boolean,default:!1},name:{type:String,required:!0},slim:{type:Boolean,default:!1},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"div"},transition:{type:[String,Object,Function]}},data:function(){return{transports:b.transports,firstRender:!0}},created:function(){var e=this;this.$nextTick((function(){b.registerTarget(e.name,e)}))},watch:{ownTransports:function(){this.$emit("change",this.children().length>0)},name:function(e,t){b.unregisterTarget(t),b.registerTarget(e,this)}},mounted:function(){var e=this;this.transition&&this.$nextTick((function(){e.firstRender=!1}))},beforeDestroy:function(){b.unregisterTarget(this.name)},computed:{ownTransports:function(){var e=this.transports[this.name]||[];return this.multiple?e:0===e.length?[]:[e[e.length-1]]},passengers:function(){return p(this.ownTransports,this.slotProps)}},methods:{children:function(){return 0!==this.passengers.length?this.passengers:this.$scopedSlots.default?this.$scopedSlots.default(this.slotProps):this.$slots.default||[]},noWrapper:function(){var e=this.slim&&!this.transition;return e&&this.children().length>1&&console.warn("[portal-vue]: PortalTarget with `slim` option received more than one child element."),e}},render:function(e){var t=this.noWrapper(),n=this.children(),s=this.transition||this.tag;return t?n[0]:this.slim&&!s?e():e(s,{props:{tag:this.transition&&this.tag?this.tag:void 0},class:{"vue-portal-target":!0}},n)}}),k=0,S=["disabled","name","order","slim","slotProps","tag","to"],x=["multiple","transition"],T=i.extend({name:"MountingPortal",inheritAttrs:!1,props:{append:{type:[Boolean,String]},bail:{type:Boolean},mountTo:{type:String,required:!0},disabled:{type:Boolean},name:{type:String,default:function(){return"mounted_"+String(k++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"DIV"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}},multiple:{type:Boolean,default:!1},targetSlim:{type:Boolean},targetSlotProps:{type:Object,default:function(){return{}}},targetTag:{type:String,default:"div"},transition:{type:[String,Object,Function]}},created:function(){if("undefined"!==typeof document){var e=document.querySelector(this.mountTo);if(e){var t=this.$props;if(b.targets[t.name])t.bail?console.warn("[portal-vue]: Target ".concat(t.name," is already mounted.\n Aborting because 'bail: true' is set")):this.portalTarget=b.targets[t.name];else{var n=t.append;if(n){var s="string"===typeof n?n:"DIV",i=document.createElement(s);e.appendChild(i),e=i}var r=m(this.$props,x);r.slim=this.targetSlim,r.tag=this.targetTag,r.slotProps=this.targetSlotProps,r.name=this.to,this.portalTarget=new _({el:e,parent:this.$parent||this,propsData:r})}}else console.error("[portal-vue]: Mount Point '".concat(this.mountTo,"' not found in document"))}},beforeDestroy:function(){var e=this.portalTarget;if(this.append){var t=e.$el;t.parentNode.removeChild(t)}e.$destroy()},render:function(e){if(!this.portalTarget)return console.warn("[portal-vue] Target wasn't mounted"),e();if(!this.$scopedSlots.manual){var t=m(this.$props,S);return e(w,{props:t,attrs:this.$attrs,on:this.$listeners,scopedSlots:this.$scopedSlots},this.$slots.default)}var n=this.$scopedSlots.manual({to:this.to});return Array.isArray(n)&&(n=n[0]),n||e()}});function A(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.component(t.portalName||"Portal",w),e.component(t.portalTargetName||"PortalTarget",_),e.component(t.MountingPortalName||"MountingPortal",T)}var $={install:A};t.default=$,t.Portal=w,t.PortalTarget=_,t.MountingPortal=T,t.Wormhole=b},"2f9d":function(e,t,n){"use strict";n("525c")},"2fac":function(e,t,n){"use strict";n("1d42")},3012:function(e,t,n){"use strict";n("a60e")},"311b":function(e,t,n){},3213:function(e,t,n){"use strict";n.r(t);var s=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.topicData?n(e.componentFor(e.topicData),e._b({key:e.topicKey,tag:"component",attrs:{hierarchy:e.hierarchy}},"component",e.propsFor(e.topicData),!1)):e._e()],1)},i=[],r=n("25a9"),o=n("a97e");const{BreakpointName:a}=o["a"].constants;var l,c,u={state:{linkableSections:[],breakpoint:a.large},addLinkableSection(e){const t={...e,visibility:0};t.sectionNumber=this.state.linkableSections.length,this.state.linkableSections.push(t)},reset(){this.state.linkableSections=[],this.state.breakpoint=a.large},updateLinkableSection(e){this.state.linkableSections=this.state.linkableSections.map(t=>e.anchor===t.anchor?{...t,visibility:e.visibility}:t)},updateBreakpoint(e){this.state.breakpoint=e}},d=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"article"},[e.isTargetIDE?e._e():n("NavigationBar",{attrs:{chapters:e.hierarchy.modules,technology:e.metadata.category,topic:e.heroTitle||"",rootReference:e.hierarchy.reference}}),n("main",{attrs:{id:"main",role:"main",tabindex:"0"}},[e._t("above-hero"),e._l(e.sections,(function(t,s){return n(e.componentFor(t),e._b({key:s,tag:"component"},"component",e.propsFor(t),!1))}))],2),n("PortalTarget",{attrs:{name:"modal-destination",multiple:""}})],1)},p=[],h=n("2b88"),m=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("NavBase",{attrs:{id:"nav","aria-label":e.technology,hasSolidBackground:""}},[n("template",{slot:"default"},[n("ReferenceUrlProvider",{attrs:{reference:e.rootReference},scopedSlots:e._u([{key:"default",fn:function(t){var s=t.urlWithParams;return n("NavTitleContainer",{attrs:{to:s}},[n("template",{slot:"default"},[e._v(e._s(e.technology))]),n("template",{slot:"subhead"},[e._v("Tutorials")])],2)}}])})],1),n("template",{slot:"after-title"},[n("div",{staticClass:"separator"})]),n("template",{slot:"tray"},[n("div",{staticClass:"mobile-dropdown-container"},[n("MobileDropdown",{attrs:{options:e.chapters,sections:e.optionsForSections,currentOption:e.currentSection?e.currentSection.title:""},on:{"select-section":e.onSelectSection}})],1),n("div",{staticClass:"dropdown-container"},[n("PrimaryDropdown",{staticClass:"primary-dropdown",attrs:{options:e.chapters,currentOption:e.topic}}),n("ChevronIcon",{staticClass:"icon-inline"}),e.currentSection?n("SecondaryDropdown",{staticClass:"secondary-dropdown",attrs:{options:e.optionsForSections,currentOption:e.currentSection.title,sectionTracker:e.sectionIndicatorText},on:{"select-section":e.onSelectSection}}):e._e()],1)])],2)},f=[],v=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"chevron-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M3.22 1.184l0.325-0.38 7.235 6.201-7.235 6.19-0.325-0.38 6.792-5.811-6.792-5.82z"}})])},g=[],y=n("be08"),b={name:"ChevronIcon",components:{SVGIcon:y["a"]}},C=b,w=n("2877"),_=Object(w["a"])(C,v,g,!1,null,null,null),k=_.exports,S=n("d26a"),x={name:"ReferenceUrlProvider",inject:{references:{default:()=>({})}},props:{reference:{type:String,required:!0}},computed:{resolvedReference:({references:e,reference:t})=>e[t]||{},url:({resolvedReference:e})=>e.url,title:({resolvedReference:e})=>e.title},render(){return this.$scopedSlots.default({url:this.url,urlWithParams:Object(S["b"])(this.url,this.$route.query),title:this.title,reference:this.resolvedReference})}},T=x,A=Object(w["a"])(T,l,c,!1,null,null,null),$=A.exports,I=n("8a61"),O=n("cbcf"),P=n("653a"),N=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("NavMenuItems",{staticClass:"mobile-dropdown"},e._l(e.options,(function(t){return n("ReferenceUrlProvider",{key:t.reference,attrs:{reference:t.reference},scopedSlots:e._u([{key:"default",fn:function(s){var i=s.title;return n("NavMenuItemBase",{staticClass:"chapter-list",attrs:{role:"group"}},[n("p",{staticClass:"chapter-name"},[e._v(e._s(i))]),n("ul",{staticClass:"tutorial-list"},e._l(t.projects,(function(t){return n("ReferenceUrlProvider",{key:t.reference,attrs:{reference:t.reference},scopedSlots:e._u([{key:"default",fn:function(t){var s=t.url,i=t.urlWithParams,r=t.title;return n("li",{staticClass:"tutorial-list-item"},[n("router-link",{staticClass:"option tutorial",attrs:{to:i,value:r}},[e._v(" "+e._s(r)+" ")]),s===e.$route.path?n("ul",{staticClass:"section-list",attrs:{role:"listbox"}},e._l(e.sections,(function(t){return n("li",{key:t.title},[n("router-link",{class:e.classesFor(t),attrs:{to:{path:t.path,query:e.$route.query},value:t.title},nativeOn:{click:function(n){return e.onClick(t)}}},[e._v(" "+e._s(t.title)+" ")])],1)})),0):e._e()],1)}}],null,!0)})})),1)])}}],null,!0)})})),1)},j=[],B=n("863d"),D=n("9b30"),M={name:"MobileDropdown",components:{NavMenuItems:D["a"],NavMenuItemBase:B["a"],ReferenceUrlProvider:$},props:{options:{type:Array,required:!0},currentOption:{type:String,required:!0},sections:{type:Array,required:!1,default:()=>[]}},methods:{classesFor(e){return["option","section",{active:this.currentOption===e.title},this.depthClass(e)]},depthClass(e){const{depth:t=0}=e;return"depth"+t},onClick(e){this.$emit("select-section",e.path)}}},q=M,E=(n("2fac"),Object(w["a"])(q,N,j,!1,null,"3d58f504",null)),R=E.exports,V=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("DropdownCustom",{staticClass:"tutorial-dropdown",attrs:{value:e.currentOption,"aria-label":"Current section",isSmall:""},scopedSlots:e._u([{key:"default",fn:function(t){var s=t.closeAndFocusToggler,i=t.contentClasses,r=t.navigateOverOptions,o=t.OptionClass,a=t.ActiveOptionClass;return[n("ul",{staticClass:"options",class:i,attrs:{role:"listbox",tabindex:"0"}},e._l(e.options,(function(t){return n("router-link",{key:t.title,attrs:{to:{path:t.path,query:e.$route.query},custom:""},scopedSlots:e._u([{key:"default",fn:function(i){var l,c=i.navigate;return[n("li",{class:[o,(l={},l[a]=e.currentOption===t.title,l)],attrs:{role:"option",value:t.title,"aria-selected":e.currentOption===t.title,"aria-current":e.ariaCurrent(t.title),tabindex:-1},on:{click:function(n){return e.setActive(t,c,s,n)},keydown:[function(n){return!n.type.indexOf("key")&&e._k(n.keyCode,"enter",13,n.key,"Enter")?null:e.setActive(t,c,s,n)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:s.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"tab",9,t.key,"Tab")?null:s.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),r(t,1))},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),r(t,-1))}]}},[e._v(" "+e._s(t.title)+" ")])]}}],null,!0)})})),1)]}}])},[n("template",{slot:"toggle-post-content"},[n("span",{staticClass:"section-tracker"},[e._v(e._s(e.sectionTracker))])])],2)},L=[],F=function(){var e,t=this,n=t.$createElement,s=t._self._c||n;return s("BaseDropdown",{staticClass:"dropdown-custom",class:(e={},e[t.OpenedClass]=t.isOpen,e["dropdown-small"]=t.isSmall,e),attrs:{value:t.value},scopedSlots:t._u([{key:"dropdown",fn:function(e){var n=e.dropdownClasses;return[s("span",{staticClass:"visuallyhidden",attrs:{id:"DropdownLabel_"+t._uid}},[t._v(t._s(t.ariaLabel))]),s("button",{ref:"dropdownToggle",staticClass:"form-dropdown-toggle",class:n,attrs:{role:"button",id:"DropdownToggle_"+t._uid,"aria-labelledby":"DropdownLabel_"+t._uid+" DropdownToggle_"+t._uid,"aria-expanded":t.isOpen?"true":"false","aria-haspopup":"true"},on:{click:t.toggleDropdown,keydown:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:(e.preventDefault(),t.openDropdown.apply(null,arguments))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"esc",27,e.key,["Esc","Escape"])?null:t.closeAndFocusToggler.apply(null,arguments)},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"down",40,e.key,["Down","ArrowDown"])?null:(e.preventDefault(),t.openDropdown.apply(null,arguments))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"up",38,e.key,["Up","ArrowUp"])?null:(e.preventDefault(),t.openDropdown.apply(null,arguments))}]}},[s("span",{staticClass:"form-dropdown-title"},[t._v(t._s(t.value))]),t._t("toggle-post-content")],2)]}}],null,!0)},[s("template",{slot:"eyebrow"},[t._t("eyebrow")],2),s("template",{slot:"after"},[t._t("default",null,null,{value:t.value,isOpen:t.isOpen,contentClasses:["form-dropdown-content",{"is-open":t.isOpen}],closeDropdown:t.closeDropdown,onChangeAction:t.onChangeAction,closeAndFocusToggler:t.closeAndFocusToggler,navigateOverOptions:t.navigateOverOptions,OptionClass:t.OptionClass,ActiveOptionClass:t.ActiveOptionClass})],2)],2)},z=[],H=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"form-element"},[e._t("dropdown",(function(){return[n("select",e._b({directives:[{name:"model",rawName:"v-model",value:e.modelValue,expression:"modelValue"}],class:e.dropdownClasses,on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.modelValue=t.target.multiple?n:n[0]}}},"select",e.$attrs,!1),[e._t("default")],2)]}),{dropdownClasses:e.dropdownClasses,value:e.value}),n("InlineChevronDownIcon",{staticClass:"form-icon",attrs:{"aria-hidden":"true"}}),e.$slots.eyebrow?n("span",{staticClass:"form-label",attrs:{"aria-hidden":"true"}},[e._t("eyebrow")],2):e._e(),e._t("after")],2)},G=[],U=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"inline-chevron-down-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M12.634 2.964l0.76 0.649-6.343 7.426-6.445-7.423 0.755-0.655 5.683 6.545 5.59-6.542z"}})])},W=[],Q={name:"InlineChevronDownIcon",components:{SVGIcon:y["a"]}},K=Q,X=Object(w["a"])(K,U,W,!1,null,null,null),J=X.exports,Y={name:"BaseDropdown",inheritAttrs:!1,props:{value:{type:String,default:""}},components:{InlineChevronDownIcon:J},computed:{modelValue:{get:({value:e})=>e,set(e){this.$emit("input",e)}},dropdownClasses({value:e}){return["form-dropdown",{"form-dropdown-selectnone":""===e,"no-eyebrow":!this.$slots.eyebrow}]}}},Z=Y,ee=(n("ed71"),Object(w["a"])(Z,H,G,!1,null,"998803d8",null)),te=ee.exports;const ne="is-open",se="option",ie="option-active";var re={name:"DropdownCustom",components:{BaseDropdown:te},constants:{OpenedClass:ne,OptionClass:se,ActiveOptionClass:ie},props:{value:{type:String,default:""},ariaLabel:{type:String,default:""},isSmall:{type:Boolean,default:!1}},data(){return{isOpen:!1,OpenedClass:ne,OptionClass:se,ActiveOptionClass:ie}},mounted(){document.addEventListener("click",this.closeOnLoseFocus)},beforeDestroy(){document.removeEventListener("click",this.closeOnLoseFocus)},methods:{onChangeAction(e){this.$emit("input",e)},toggleDropdown(){this.isOpen?this.closeDropdown():this.openDropdown()},async closeAndFocusToggler(){this.closeDropdown(),await this.$nextTick(),this.$refs.dropdownToggle.focus()},closeDropdown(){this.isOpen=!1,this.$emit("close")},openDropdown(){this.isOpen=!0,this.$emit("open"),this.focusActiveLink()},closeOnLoseFocus(e){!this.$el.contains(e.target)&&this.isOpen&&this.closeDropdown()},navigateOverOptions({target:e},t){const n=this.$el.querySelectorAll("."+se),s=Array.from(n),i=s.indexOf(e),r=s[i+t];r&&r.focus()},async focusActiveLink(){const e=this.$el.querySelector("."+ie);e&&(await this.$nextTick(),e.focus())}}},oe=re,ae=(n("811c"),Object(w["a"])(oe,F,z,!1,null,"47f38161",null)),le=ae.exports,ce={name:"SecondaryDropdown",components:{DropdownCustom:le},props:{options:{type:Array,required:!0},currentOption:{type:String,required:!0},sectionTracker:{type:String,required:!1}},methods:{ariaCurrent(e){return this.currentOption===e&&"section"},setActive(e,t,n,s){t(s),this.$emit("select-section",e.path),n()}}},ue=ce,de=(n("5952"),Object(w["a"])(ue,V,L,!1,null,"4a151342",null)),pe=de.exports,he=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("DropdownCustom",{staticClass:"tutorial-dropdown",attrs:{value:e.currentOption,"aria-label":"Current tutorial",isSmall:""},scopedSlots:e._u([{key:"default",fn:function(t){var s=t.closeAndFocusToggler,i=t.contentClasses,r=t.closeDropdown,o=t.navigateOverOptions,a=t.OptionClass,l=t.ActiveOptionClass;return[n("ul",{staticClass:"options",class:i,attrs:{tabindex:"0"}},e._l(e.options,(function(t){return n("ReferenceUrlProvider",{key:t.reference,attrs:{reference:t.reference},scopedSlots:e._u([{key:"default",fn:function(i){var c=i.title;return n("li",{staticClass:"chapter-list",attrs:{role:"group"}},[n("p",{staticClass:"chapter-name"},[e._v(e._s(c))]),n("ul",{attrs:{role:"listbox"}},e._l(t.projects,(function(t){return n("ReferenceUrlProvider",{key:t.reference,attrs:{reference:t.reference},scopedSlots:e._u([{key:"default",fn:function(t){var i=t.urlWithParams,c=t.title;return[n("router-link",{attrs:{to:i,custom:""},scopedSlots:e._u([{key:"default",fn:function(t){var i,u=t.navigate,d=t.isActive;return[n("li",{class:(i={},i[a]=!0,i[l]=d,i),attrs:{role:"option",value:c,"aria-selected":d,"aria-current":!!d&&"tutorial",tabindex:-1},on:{click:function(t){return e.setActive(u,r,t)},keydown:[function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.setActive(u,r,t)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:s.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"tab",9,t.key,"Tab")?null:s.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),o(t,1))},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),o(t,-1))}]}},[e._v(" "+e._s(c)+" ")])]}}],null,!0)})]}}],null,!0)})})),1)])}}],null,!0)})})),1)]}}])})},me=[],fe={name:"PrimaryDropdown",components:{DropdownCustom:le,ReferenceUrlProvider:$},props:{options:{type:Array,required:!0},currentOption:{type:String,required:!0}},methods:{setActive(e,t,n){e(n),t()}}},ve=fe,ge=(n("e4e4"),Object(w["a"])(ve,he,me,!1,null,"78dc103f",null)),ye=ge.exports,be={name:"NavigationBar",components:{NavTitleContainer:P["a"],NavBase:O["a"],ReferenceUrlProvider:$,PrimaryDropdown:ye,SecondaryDropdown:pe,MobileDropdown:R,ChevronIcon:k},mixins:[I["a"]],inject:["store"],props:{chapters:{type:Array,required:!0},technology:{type:String,required:!0},topic:{type:String,required:!0},rootReference:{type:String,required:!0}},data(){return{currentSection:{sectionNumber:0,title:"Introduction"},tutorialState:this.store.state}},watch:{pageSectionWithHighestVisibility(e){e&&(this.currentSection=e)}},computed:{pageSections(){const e=this.$route.path.replace(/#$/,"");return this.tutorialState.linkableSections.map(t=>({...t,path:`${e}#${t.anchor}`}))},optionsForSections(){return this.pageSections.map(({depth:e,path:t,title:n})=>({depth:e,path:t,title:n}))},pageSectionWithHighestVisibility(){return[...this.pageSections].sort((e,t)=>t.visibility-e.visibility).find(e=>e.visibility>0)},sectionIndicatorText(){const e=this.tutorialState.linkableSections.length-1,{sectionNumber:t}=this.currentSection||{};if(0!==t)return`(${t} of ${e})`}},methods:{onSelectSection(e){const t="#"+e.split("#")[1];this.scrollToElement(t)}}},Ce=be,we=(n("6cd7"),Object(w["a"])(Ce,m,f,!1,null,"7138b5bf",null)),_e=we.exports,ke=n("d8ce"),Se=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"body"},[n("BodyContent",{attrs:{content:e.content}})],1)},xe=[],Te=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("article",{staticClass:"body-content"},e._l(e.content,(function(t,s){return n(e.componentFor(t),e._b({key:s,tag:"component",staticClass:"layout"},"component",e.propsFor(t),!1))})),1)},Ae=[],$e=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"columns",class:e.classes},[e._l(e.columns,(function(t,s){return[n("Asset",{key:t.media,attrs:{identifier:t.media,videoAutoplays:!1}}),t.content?n("ContentNode",{key:s,attrs:{content:t.content}}):e._e()]}))],2)},Ie=[],Oe=n("80e4"),Pe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("BaseContentNode",{attrs:{content:e.articleContent}})},Ne=[],je=n("5677"),Be={name:"ContentNode",components:{BaseContentNode:je["a"]},props:je["a"].props,computed:{articleContent(){return this.map(e=>{switch(e.type){case je["a"].BlockType.codeListing:return{...e,showLineNumbers:!0};case je["a"].BlockType.heading:{const{anchor:t,...n}=e;return n}default:return e}})}},methods:je["a"].methods,BlockType:je["a"].BlockType,InlineType:je["a"].InlineType},De=Be,Me=(n("cb8d"),Object(w["a"])(De,Pe,Ne,!1,null,"3cfe1c35",null)),qe=Me.exports,Ee={name:"Columns",components:{Asset:Oe["a"],ContentNode:qe},props:{columns:{type:Array,required:!0}},computed:{classes(){return{"cols-2":2===this.columns.length,"cols-3":3===this.columns.length}}}},Re=Ee,Ve=(n("e9b0"),Object(w["a"])(Re,$e,Ie,!1,null,"30edf911",null)),Le=Ve.exports,Fe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"content-and-media",class:e.classes},[n("ContentNode",{attrs:{content:e.content}}),n("Asset",{attrs:{identifier:e.media}})],1)},ze=[];const He={leading:"leading",trailing:"trailing"};var Ge={name:"ContentAndMedia",components:{Asset:Oe["a"],ContentNode:qe},props:{content:qe.props.content,media:Oe["a"].props.identifier,mediaPosition:{type:String,default:()=>He.trailing,validator:e=>Object.prototype.hasOwnProperty.call(He,e)}},computed:{classes(){return{"media-leading":this.mediaPosition===He.leading,"media-trailing":this.mediaPosition===He.trailing}}},MediaPosition:He},Ue=Ge,We=(n("1006"),Object(w["a"])(Ue,Fe,ze,!1,null,"3fa44f9e",null)),Qe=We.exports,Ke=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"full-width"},e._l(e.groups,(function(t,s){return n(e.componentFor(t),e._b({key:s,tag:"component",staticClass:"group"},"component",e.propsFor(t),!1),[n("ContentNode",{attrs:{content:t.content}})],1)})),1)},Xe=[],Je=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(e.tag,{tag:"component",attrs:{id:e.anchor}},[e._t("default")],2)},Ye=[],Ze=n("72e7"),et={name:"LinkableElement",mixins:[Ze["a"]],inject:{navigationBarHeight:{default(){}},store:{default(){return{addLinkableSection(){},updateLinkableSection(){}}}}},props:{anchor:{type:String,required:!0},depth:{type:Number,default:()=>0},tag:{type:String,default:()=>"div"},title:{type:String,required:!0}},computed:{intersectionRootMargin(){const e=this.navigationBarHeight?`-${this.navigationBarHeight}px`:"0%";return e+" 0% -50% 0%"}},created(){this.store.addLinkableSection({anchor:this.anchor,depth:this.depth,title:this.title,visibility:0})},methods:{onIntersect(e){const t=Math.min(1,e.intersectionRatio);this.store.updateLinkableSection({anchor:this.anchor,depth:this.depth,title:this.title,visibility:t})}}},tt=et,nt=Object(w["a"])(tt,Je,Ye,!1,null,null,null),st=nt.exports;const{BlockType:it}=qe;var rt={name:"FullWidth",components:{ContentNode:qe,LinkableElement:st},props:qe.props,computed:{groups:({content:e})=>e.reduce((e,t)=>0===e.length||t.type===it.heading?[...e,{heading:t.type===it.heading?t:null,content:[t]}]:[...e.slice(0,e.length-1),{heading:e[e.length-1].heading,content:e[e.length-1].content.concat(t)}],[])},methods:{componentFor(e){return e.heading?st:"div"},depthFor(e){switch(e.level){case 1:case 2:return 0;default:return 1}},propsFor(e){return e.heading?{anchor:e.heading.anchor,depth:this.depthFor(e.heading),title:e.heading.text}:{}}}},ot=rt,at=(n("aece"),Object(w["a"])(ot,Ke,Xe,!1,null,"1f2be54b",null)),lt=at.exports;const ct={columns:"columns",contentAndMedia:"contentAndMedia",fullWidth:"fullWidth"};var ut={name:"BodyContent",props:{content:{type:Array,required:!0,validator:e=>e.every(({kind:e})=>Object.prototype.hasOwnProperty.call(ct,e))}},methods:{componentFor(e){return{[ct.columns]:Le,[ct.contentAndMedia]:Qe,[ct.fullWidth]:lt}[e.kind]},propsFor(e){const{content:t,kind:n,media:s,mediaPosition:i}=e;return{[ct.columns]:{columns:t},[ct.contentAndMedia]:{content:t,media:s,mediaPosition:i},[ct.fullWidth]:{content:t}}[n]}},LayoutKind:ct},dt=ut,pt=(n("1dd5"),Object(w["a"])(dt,Te,Ae,!1,null,"4d5a806e",null)),ht=pt.exports,mt={name:"Body",components:{BodyContent:ht},props:ht.props},ft=mt,vt=(n("5237"),Object(w["a"])(ft,Se,xe,!1,null,"6499e2f2",null)),gt=vt.exports,yt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("TutorialCTA",e._b({},"TutorialCTA",e.$props,!1))},bt=[],Ct=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("BaseCTA",e._b({attrs:{label:"Next"}},"BaseCTA",e.baseProps,!1))},wt=[],_t=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"call-to-action"},[n("Row",[n("LeftColumn",[n("span",{staticClass:"label"},[e._v(e._s(e.label))]),n("h2",[e._v(" "+e._s(e.title)+" ")]),e.abstract?n("ContentNode",{staticClass:"description",attrs:{content:[e.abstractParagraph]}}):e._e(),e.action?n("Button",{attrs:{action:e.action}}):e._e()],1),n("RightColumn",{staticClass:"right-column"},[e.media?n("Asset",{staticClass:"media",attrs:{identifier:e.media}}):e._e()],1)],1)],1)},kt=[],St=n("0f00"),xt=n("620a"),Tt=n("c081"),At={name:"CallToAction",components:{Asset:Oe["a"],Button:Tt["a"],ContentNode:je["a"],LeftColumn:{render(e){return e(xt["a"],{props:{span:{large:5,small:12}}},this.$slots.default)}},RightColumn:{render(e){return e(xt["a"],{props:{span:{large:6,small:12}}},this.$slots.default)}},Row:St["a"]},props:{title:{type:String,required:!0},label:{type:String,required:!0},abstract:{type:Array,required:!1},action:{type:Object,required:!1},media:{type:String,required:!1}},computed:{abstractParagraph(){return{type:"paragraph",inlineContent:this.abstract}}}},$t=At,It=(n("80f7"),Object(w["a"])($t,_t,kt,!1,null,"2016b288",null)),Ot=It.exports,Pt={name:"CallToAction",components:{BaseCTA:Ot},computed:{baseProps(){return{title:this.title,abstract:this.abstract,action:this.action,media:this.media}}},props:{title:{type:String,required:!0},abstract:{type:Array,required:!1},action:{type:Object,required:!1},media:{type:String,required:!1}}},Nt=Pt,jt=Object(w["a"])(Nt,Ct,wt,!1,null,null,null),Bt=jt.exports,Dt={name:"CallToAction",components:{TutorialCTA:Bt},props:Bt.props},Mt=Dt,qt=(n("3e1b"),Object(w["a"])(Mt,yt,bt,!1,null,"426a965c",null)),Et=qt.exports,Rt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("TutorialHero",e._b({},"TutorialHero",e.$props,!1))},Vt=[],Lt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("LinkableSection",{staticClass:"tutorial-hero",attrs:{anchor:"introduction",title:e.sectionTitle}},[n("div",{staticClass:"hero dark"},[e.backgroundImageUrl?n("div",{staticClass:"bg",style:e.bgStyle}):e._e(),e._t("above-title"),n("Row",[n("Column",[n("Headline",{attrs:{level:1}},[e.chapter?n("template",{slot:"eyebrow"},[e._v(e._s(e.chapter))]):e._e(),e._v(" "+e._s(e.title)+" ")],2),e.content||e.video?n("div",{staticClass:"intro"},[e.content?n("ContentNode",{attrs:{content:e.content}}):e._e(),e.video?[n("p",[n("a",{staticClass:"call-to-action",attrs:{href:"#"},on:{click:function(t){return t.preventDefault(),e.toggleCallToActionModal.apply(null,arguments)}}},[e._v(" Watch intro video "),n("PlayIcon",{staticClass:"cta-icon icon-inline"})],1)]),n("GenericModal",{attrs:{visible:e.callToActionModalVisible,isFullscreen:"",theme:"dark"},on:{"update:visible":function(t){e.callToActionModalVisible=t}}},[n("Asset",{directives:[{name:"show",rawName:"v-show",value:e.callToActionModalVisible,expression:"callToActionModalVisible"}],ref:"asset",staticClass:"video-asset",attrs:{identifier:e.video},on:{videoEnded:e.handleVideoEnd}})],1)]:e._e()],2):e._e(),n("Metadata",{staticClass:"metadata",attrs:{projectFilesUrl:e.projectFilesUrl,estimatedTimeInMinutes:e.estimatedTimeInMinutes,xcodeRequirement:e.xcodeRequirementData}})],1)],1)],2)])},Ft=[],zt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"headline"},[e.$slots.eyebrow?n("span",{staticClass:"eyebrow"},[e._t("eyebrow")],2):e._e(),n("Heading",{staticClass:"heading",attrs:{level:e.level}},[e._t("default")],2)],1)},Ht=[];const Gt=1,Ut=6,Wt={type:Number,required:!0,validator:e=>e>=Gt&&e<=Ut},Qt={name:"Heading",render:function(e){return e("h"+this.level,this.$slots.default)},props:{level:Wt}};var Kt={name:"Headline",components:{Heading:Qt},props:{level:Wt}},Xt=Kt,Jt=(n("323a"),Object(w["a"])(Xt,zt,Ht,!1,null,"1898f592",null)),Yt=Jt.exports,Zt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("PortalSource",{attrs:{to:"modal-destination",disabled:!e.isVisible}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.isVisible,expression:"isVisible"}],staticClass:"generic-modal",class:[e.stateClasses,e.themeClass],style:e.modalColors,attrs:{role:"dialog"}},[n("div",{staticClass:"backdrop",on:{click:e.onClickOutside}}),n("div",{ref:"container",staticClass:"container",style:{width:e.width}},[e.showClose?n("button",{ref:"close",staticClass:"close",attrs:{"aria-label":"Close"},on:{click:function(t){return t.preventDefault(),e.closeModal.apply(null,arguments)}}},[n("CloseIcon")],1):e._e(),n("div",{staticClass:"modal-content"},[e._t("default")],2)])])])},en=[],tn=n("f2af"),nn=n("c8e2"),sn=n("95da"),rn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"close-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"m10.3772239 3.1109127.7266116.7266116-3.27800002 3.2763884 3.27072752 3.2703884-.7266116.7266116-3.27011592-3.271-3.26211596 3.2637276-.7266116-.7266116 3.26272756-3.263116-3.27-3.26911596.72661159-.72661159 3.26938841 3.26972755z","fill-rule":"evenodd"}})])},on=[],an={name:"CloseIcon",components:{SVGIcon:y["a"]}},ln=an,cn=Object(w["a"])(ln,rn,on,!1,null,null,null),un=cn.exports;const dn={light:"light",dark:"dark",dynamic:"dynamic",code:"code"};var pn={name:"GenericModal",model:{prop:"visible",event:"update:visible"},components:{CloseIcon:un,PortalSource:h["Portal"]},props:{visible:{type:Boolean,default:!1},isFullscreen:{type:Boolean,default:!1},theme:{type:String,validator:e=>Object.keys(dn).includes(e),default:dn.light},codeBackgroundColorOverride:{type:String,default:""},width:{type:String,default:null},showClose:{type:Boolean,default:!0}},data(){return{lastFocusItem:null,prefersDarkStyle:!1,focusTrapInstance:null}},computed:{isVisible:{get:({visible:e})=>e,set(e){this.$emit("update:visible",e)}},modalColors(){return{"--background":this.codeBackgroundColorOverride}},themeClass({theme:e,prefersDarkStyle:t,isThemeDynamic:n}){let s={};return n&&(s={"theme-light":!t,"theme-dark":t}),["theme-"+e,s]},stateClasses:({isFullscreen:e,isVisible:t,showClose:n})=>({"modal-fullscreen":e,"modal-standard":!e,"modal-open":t,"modal-with-close":n}),isThemeDynamic:({theme:e})=>e===dn.dynamic||e===dn.code},watch:{isVisible(e){e?this.onShow():this.onHide()}},mounted(){if(this.focusTrapInstance=new nn["a"],document.addEventListener("keydown",this.onEscapeClick),this.isThemeDynamic){const e=window.matchMedia("(prefers-color-scheme: dark)");e.addListener(this.onColorSchemePreferenceChange),this.$once("hook:beforeDestroy",()=>{e.removeListener(this.onColorSchemePreferenceChange)}),this.onColorSchemePreferenceChange(e)}},beforeDestroy(){this.isVisible&&tn["a"].unlockScroll(this.$refs.container),document.removeEventListener("keydown",this.onEscapeClick),this.focusTrapInstance.destroy()},methods:{async onShow(){await this.$nextTick(),tn["a"].lockScroll(this.$refs.container),await this.focusCloseButton(),this.focusTrapInstance.updateFocusContainer(this.$refs.container),this.focusTrapInstance.start(),sn["a"].hide(this.$refs.container)},onHide(){tn["a"].unlockScroll(this.$refs.container),this.focusTrapInstance.stop(),this.lastFocusItem&&(this.lastFocusItem.focus({preventScroll:!0}),this.lastFocusItem=null),this.$emit("close"),sn["a"].show(this.$refs.container)},closeModal(){this.isVisible=!1},onClickOutside(){this.closeModal()},onEscapeClick({key:e}){this.isVisible&&"Escape"===e&&this.closeModal()},onColorSchemePreferenceChange({matches:e}){this.prefersDarkStyle=e},async focusCloseButton(){this.lastFocusItem=document.activeElement,await this.$nextTick(),this.$refs.close&&this.$refs.close.focus(),this.$emit("open")}}},hn=pn,mn=(n("bd7a"),Object(w["a"])(hn,Zt,en,!1,null,"0e383dfa",null)),fn=mn.exports,vn=n("c4dd"),gn=n("748c"),yn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"metadata"},[e.estimatedTimeInMinutes?n("div",{staticClass:"item",attrs:{"aria-label":e.estimatedTimeInMinutes+" minutes estimated time"}},[n("div",{staticClass:"content",attrs:{"aria-hidden":"true"}},[n("div",{staticClass:"duration"},[e._v(" "+e._s(e.estimatedTimeInMinutes)+" "),n("div",{staticClass:"minutes"},[e._v("min")])])]),n("div",{staticClass:"bottom",attrs:{"aria-hidden":"true"}},[e._v("Estimated Time")])]):e._e(),e.projectFilesUrl?n("div",{staticClass:"item"},[n("DownloadIcon",{staticClass:"item-large-icon icon-inline"}),n("div",{staticClass:"content bottom"},[n("a",{staticClass:"content-link project-download",attrs:{href:e.projectFilesUrl}},[e._v(" Project files "),n("InlineDownloadIcon",{staticClass:"small-icon icon-inline"})],1)])],1):e._e(),e.xcodeRequirement?n("div",{staticClass:"item"},[n("XcodeIcon",{staticClass:"item-large-icon icon-inline"}),n("div",{staticClass:"content bottom"},[e.isTargetIDE?n("span",[e._v(e._s(e.xcodeRequirement.title))]):n("a",{staticClass:"content-link",attrs:{href:e.xcodeRequirement.url}},[e._v(" "+e._s(e.xcodeRequirement.title)+" "),n("InlineChevronRightIcon",{staticClass:"icon-inline small-icon xcode-icon"})],1)])],1):e._e()])},bn=[],Cn=n("de60"),wn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"xcode-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M2.668 4.452l-1.338-2.229 0.891-0.891 2.229 1.338 1.338 2.228 3.667 3.666 0.194-0.194 2.933 2.933c0.13 0.155 0.209 0.356 0.209 0.576 0 0.497-0.403 0.9-0.9 0.9-0.22 0-0.421-0.079-0.577-0.209l0.001 0.001-2.934-2.933 0.181-0.181-3.666-3.666z"}}),n("path",{attrs:{d:"M11.824 1.277l-0.908 0.908c-0.091 0.091-0.147 0.216-0.147 0.354 0 0.106 0.033 0.205 0.090 0.286l-0.001-0.002 0.058 0.069 0.185 0.185c0.090 0.090 0.215 0.146 0.353 0.146 0.107 0 0.205-0.033 0.286-0.090l-0.002 0.001 0.069-0.057 0.909-0.908c0.118 0.24 0.187 0.522 0.187 0.82 0 1.045-0.848 1.893-1.893 1.893-0.296 0-0.577-0.068-0.826-0.189l0.011 0.005-5.5 5.5c0.116 0.238 0.184 0.518 0.184 0.813 0 1.045-0.848 1.893-1.893 1.893-0.296 0-0.576-0.068-0.826-0.189l0.011 0.005 0.908-0.909c0.090-0.090 0.146-0.215 0.146-0.353 0-0.107-0.033-0.205-0.090-0.286l0.001 0.002-0.057-0.069-0.185-0.185c-0.091-0.091-0.216-0.147-0.354-0.147-0.106 0-0.205 0.033-0.286 0.090l0.002-0.001-0.069 0.058-0.908 0.908c-0.116-0.238-0.184-0.518-0.184-0.813 0-1.045 0.847-1.892 1.892-1.892 0.293 0 0.571 0.067 0.819 0.186l-0.011-0.005 5.5-5.5c-0.116-0.238-0.184-0.519-0.184-0.815 0-1.045 0.847-1.892 1.892-1.892 0.296 0 0.577 0.068 0.827 0.19l-0.011-0.005z"}})])},_n=[],kn={name:"XcodeIcon",components:{SVGIcon:y["a"]}},Sn=kn,xn=Object(w["a"])(Sn,wn,_n,!1,null,null,null),Tn=xn.exports,An=n("34b0"),$n=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"inline-download-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M7 0.5c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5zM7 1.5c-3.038 0-5.5 2.462-5.5 5.5s2.462 5.5 5.5 5.5c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5z"}}),n("path",{attrs:{d:"M7.51 2.964l-0.001 5.431 1.308-2.041 0.842 0.539-2.664 4.162-2.633-4.164 0.845-0.534 1.303 2.059 0.001-5.452z"}})])},In=[],On={name:"InlineDownloadIcon",components:{SVGIcon:y["a"]}},Pn=On,Nn=Object(w["a"])(Pn,$n,In,!1,null,null,null),jn=Nn.exports,Bn={name:"HeroMetadata",components:{InlineDownloadIcon:jn,InlineChevronRightIcon:An["a"],DownloadIcon:Cn["a"],XcodeIcon:Tn},inject:["isTargetIDE"],props:{projectFilesUrl:{type:String},estimatedTimeInMinutes:{type:Number},xcodeRequirement:{type:Object,required:!1}}},Dn=Bn,Mn=(n("5356"),Object(w["a"])(Dn,yn,bn,!1,null,"2fa6f125",null)),qn=Mn.exports,En={name:"Hero",components:{PlayIcon:vn["a"],GenericModal:fn,Column:{render(e){return e(xt["a"],{props:{span:{large:7,medium:9,small:12}}},this.$slots.default)}},ContentNode:je["a"],Headline:Yt,Metadata:qn,Row:St["a"],Asset:Oe["a"],LinkableSection:st},inject:["references"],props:{title:{type:String,required:!0},chapter:{type:String},content:{type:Array},projectFiles:{type:String},estimatedTimeInMinutes:{type:Number},xcodeRequirement:{type:String,required:!1},video:{type:String},backgroundImage:{type:String}},computed:{backgroundImageUrl(){const e=this.references[this.backgroundImage]||{},{variants:t=[]}=e,n=t.find(e=>e.traits.includes("light"));return n?Object(gn["b"])(n.url):""},projectFilesUrl(){return this.projectFiles?Object(gn["b"])(this.references[this.projectFiles].url):null},bgStyle(){return{backgroundImage:`url('${this.backgroundImageUrl}')`}},xcodeRequirementData(){return this.references[this.xcodeRequirement]},sectionTitle(){return"Introduction"}},data(){return{callToActionModalVisible:!1}},methods:{async toggleCallToActionModal(){this.callToActionModalVisible=!0,await this.$nextTick();const e=this.$refs.asset.$el.querySelector("video");if(e)try{await e.play(),e.muted=!1}catch(t){}},handleVideoEnd(){this.callToActionModalVisible=!1}}},Rn=En,Vn=(n("3c4b"),Object(w["a"])(Rn,Lt,Ft,!1,null,"cb87b2d0",null)),Ln=Vn.exports,Fn={name:"Hero",components:{TutorialHero:Ln},props:Ln.props},zn=Fn,Hn=(n("2f9d"),Object(w["a"])(zn,Rt,Vt,!1,null,"35a9482f",null)),Gn=Hn.exports,Un=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("TutorialAssessments",e._b({},"TutorialAssessments",e.$props,!1),[n("p",{attrs:{slot:"success"},slot:"success"},[e._v("Great job, you've answered all the questions for this article.")])])},Wn=[],Qn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("LinkableSection",{staticClass:"assessments-wrapper",attrs:{anchor:e.anchor,title:e.title}},[n("Row",{ref:"assessments",staticClass:"assessments"},[n("MainColumn",[n("Row",{staticClass:"banner"},[n("HeaderColumn",[n("h2",{staticClass:"title"},[e._v(e._s(e.title))])])],1),e.completed?n("div",{staticClass:"success"},[e._t("success",(function(){return[n("p",[e._v("Great job, you've answered all the questions for this tutorial.")])]}))],2):n("div",[n("Progress",e._b({ref:"progress"},"Progress",e.progress,!1)),n("Quiz",{key:e.activeIndex,attrs:{choices:e.activeAssessment.choices,content:e.activeAssessment.content,isLast:e.isLast,title:e.activeAssessment.title},on:{submit:e.onSubmit,advance:e.onAdvance,"see-results":e.onSeeResults}})],1)],1)],1)],1)},Kn=[],Xn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Row",[n("p",{staticClass:"title"},[e._v("Question "+e._s(e.index)+" of "+e._s(e.total))])])},Jn=[],Yn={name:"AssessmentsProgress",components:{Row:St["a"]},props:{index:{type:Number,required:!0},total:{type:Number,required:!0}}},Zn=Yn,es=(n("0530"),Object(w["a"])(Zn,Xn,Jn,!1,null,"8ec95972",null)),ts=es.exports,ns=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"quiz"},[n("ContentNode",{staticClass:"title",attrs:{content:e.title}}),e.content?n("ContentNode",{staticClass:"question-content",attrs:{content:e.content}}):e._e(),n("div",{staticClass:"choices"},e._l(e.choices,(function(t,s){return n("label",{key:s,class:e.choiceClasses[s]},[n(e.getIconComponent(s),{tag:"component",staticClass:"choice-icon"}),n("input",{directives:[{name:"model",rawName:"v-model",value:e.selectedIndex,expression:"selectedIndex"}],attrs:{type:"radio",name:"assessment"},domProps:{value:s,checked:e._q(e.selectedIndex,s)},on:{change:function(t){e.selectedIndex=s}}}),n("ContentNode",{staticClass:"question",attrs:{content:t.content}}),e.userChoices[s].checked?[n("ContentNode",{staticClass:"answer",attrs:{content:t.justification}}),t.reaction?n("p",{staticClass:"answer"},[e._v(e._s(t.reaction))]):e._e(),n("div",{staticClass:"visuallyhidden",attrs:{"aria-live":"assertive"}},[e._v(" "+e._s(t.isCorrect?"Correct Answer":"Incorrect Answer")+" ")])]:e._e()],2)})),0),n("div",{staticClass:"controls"},[n("ButtonLink",{staticClass:"check",attrs:{disabled:null===e.selectedIndex||e.showNextQuestion},nativeOn:{click:function(t){return e.submit.apply(null,arguments)}}},[e._v(" Submit ")]),e.isLast?n("ButtonLink",{staticClass:"results",attrs:{disabled:!e.showNextQuestion},nativeOn:{click:function(t){return e.seeResults.apply(null,arguments)}}},[e._v(" Next ")]):n("ButtonLink",{staticClass:"next",attrs:{disabled:!e.showNextQuestion},nativeOn:{click:function(t){return e.advance.apply(null,arguments)}}},[e._v(" Next Question ")])],1)],1)},ss=[],is=n("76ab"),rs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"reset-circle-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M7 0.5c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5c-3.59 0-6.5-2.91-6.5-6.5v0c0-3.59 2.91-6.5 6.5-6.5v0zM7 1.5c-3.038 0-5.5 2.462-5.5 5.5s2.462 5.5 5.5 5.5c3.038 0 5.5-2.462 5.5-5.5v0c0-3.038-2.462-5.5-5.5-5.5v0z"}}),n("path",{attrs:{d:"M3.828 4.539l0.707-0.707 5.657 5.657-0.707 0.707-5.657-5.657z"}}),n("path",{attrs:{d:"M3.828 9.489l5.657-5.657 0.707 0.707-5.657 5.657-0.707-0.707z"}})])},os=[],as={name:"ResetCircleIcon",components:{SVGIcon:y["a"]}},ls=as,cs=Object(w["a"])(ls,rs,os,!1,null,null,null),us=cs.exports,ds=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"check-circle-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M7 0.5c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5c-3.59 0-6.5-2.91-6.5-6.5v0c0-3.59 2.91-6.5 6.5-6.5v0zM7 1.5c-3.038 0-5.5 2.462-5.5 5.5s2.462 5.5 5.5 5.5c3.038 0 5.5-2.462 5.5-5.5v0c0-3.038-2.462-5.5-5.5-5.5v0z"}}),n("path",{attrs:{d:"M9.626 3.719l0.866 0.5-3.5 6.062-3.464-2 0.5-0.866 2.6 1.5z"}})])},ps=[],hs={name:"CheckCircleIcon",components:{SVGIcon:y["a"]}},ms=hs,fs=Object(w["a"])(ms,ds,ps,!1,null,null,null),vs=fs.exports,gs={name:"Quiz",components:{CheckCircleIcon:vs,ResetCircleIcon:us,ContentNode:je["a"],ButtonLink:is["a"]},props:{content:{type:Array,required:!1},choices:{type:Array,required:!0},isLast:{type:Boolean,default:!1},title:{type:Array,required:!0}},data(){return{userChoices:this.choices.map(()=>({checked:!1})),selectedIndex:null}},computed:{correctChoices(){return this.choices.reduce((e,t,n)=>t.isCorrect?e.add(n):e,new Set)},choiceClasses(){return this.userChoices.map((e,t)=>({choice:!0,active:this.selectedIndex===t,disabled:e.checked||this.showNextQuestion,correct:e.checked&&this.choices[t].isCorrect,incorrect:e.checked&&!this.choices[t].isCorrect}))},showNextQuestion(){return Array.from(this.correctChoices).every(e=>this.userChoices[e].checked)}},methods:{getIconComponent(e){const t=this.userChoices[e];if(t&&t.checked)return this.choices[e].isCorrect?vs:us},submit(){this.$set(this.userChoices,this.selectedIndex,{checked:!0}),this.$emit("submit")},advance(){this.$emit("advance")},seeResults(){this.$emit("see-results")}}},ys=gs,bs=(n("26d3"),Object(w["a"])(ys,ns,ss,!1,null,"71da656d",null)),Cs=bs.exports;const ws=12;var _s={name:"Assessments",components:{LinkableSection:st,Quiz:Cs,Progress:ts,Row:St["a"],HeaderColumn:{render(e){return e(xt["a"],{props:{isCentered:{large:!0},span:{large:10}}},this.$slots.default)}},MainColumn:{render(e){return e(xt["a"],{props:{isCentered:{large:!0},span:{large:10,medium:10,small:12}}},this.$slots.default)}}},props:{assessments:{type:Array,required:!0},anchor:{type:String,required:!0}},inject:["navigationBarHeight"],data(){return{activeIndex:0,completed:!1}},computed:{activeAssessment(){return this.assessments[this.activeIndex]},isLast(){return this.activeIndex===this.assessments.length-1},progress(){return{index:this.activeIndex+1,total:this.assessments.length}},title(){return"Check Your Understanding"}},methods:{scrollTo(e,t=0){e.scrollIntoView(!0),window.scrollBy(0,-this.navigationBarHeight-t)},onSubmit(){this.$nextTick(()=>{this.scrollTo(this.$refs.progress.$el,ws)})},onAdvance(){this.activeIndex+=1,this.$nextTick(()=>{this.scrollTo(this.$refs.progress.$el,ws)})},onSeeResults(){this.completed=!0,this.$nextTick(()=>{this.scrollTo(this.$refs.assessments.$el,ws)})}}},ks=_s,Ss=(n("71b5"),Object(w["a"])(ks,Qn,Kn,!1,null,"6bd5c4e9",null)),xs=Ss.exports,Ts={name:"Assessments",components:{TutorialAssessments:xs},props:xs.props},As=Ts,$s=(n("f264"),Object(w["a"])(As,Un,Wn,!1,null,"3c94366b",null)),Is=$s.exports;const Os={articleBody:"articleBody",callToAction:"callToAction",hero:"hero",assessments:"assessments"};var Ps={name:"Article",components:{NavigationBar:_e,PortalTarget:h["PortalTarget"]},mixins:[ke["a"]],inject:{isTargetIDE:{default:!1},store:{default(){return{reset(){}}}}},props:{hierarchy:{type:Object,required:!0},metadata:{type:Object,required:!0},references:{type:Object,required:!0},sections:{type:Array,required:!0,validator:e=>e.every(({kind:e})=>Object.prototype.hasOwnProperty.call(Os,e))}},computed:{heroSection(){return this.sections.find(this.isHero)},heroTitle(){return(this.heroSection||{}).title},pageTitle(){return this.heroTitle?`${this.heroTitle} — ${this.metadata.category} Tutorials`:void 0}},methods:{componentFor(e){const{kind:t}=e;return{[Os.articleBody]:gt,[Os.callToAction]:Et,[Os.hero]:Gn,[Os.assessments]:Is}[t]},isHero(e){return e.kind===Os.hero},propsFor(e){const{abstract:t,action:n,anchor:s,assessments:i,backgroundImage:r,chapter:o,content:a,estimatedTimeInMinutes:l,kind:c,media:u,projectFiles:d,title:p,video:h,xcodeRequirement:m}=e;return{[Os.articleBody]:{content:a},[Os.callToAction]:{abstract:t,action:n,media:u,title:p},[Os.hero]:{backgroundImage:r,chapter:o,content:a,estimatedTimeInMinutes:l,projectFiles:d,title:p,video:h,xcodeRequirement:m},[Os.assessments]:{anchor:s,assessments:i}}[c]}},provide(){return{references:this.references}},created(){this.store.reset()},SectionKind:Os},Ns=Ps,js=(n("ee73"),Object(w["a"])(Ns,d,p,!1,null,"5f5888a5",null)),Bs=js.exports,Ds=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"tutorial"},[e.isTargetIDE?e._e():n("NavigationBar",{attrs:{technology:e.metadata.category,chapters:e.hierarchy.modules,topic:e.tutorialTitle||"",rootReference:e.hierarchy.reference}}),n("main",{attrs:{id:"main",role:"main",tabindex:"0"}},[e._l(e.sections,(function(e,t){return n("Section",{key:t,attrs:{section:e}})})),n("BreakpointEmitter",{on:{change:e.handleBreakpointChange}})],2),n("PortalTarget",{attrs:{name:"modal-destination",multiple:""}})],1)},Ms=[],qs=n("66c9"),Es={computed:{isClientMobile(){let e=!1;return e="maxTouchPoints"in navigator||"msMaxTouchPoints"in navigator?Boolean(navigator.maxTouchPoints||navigator.msMaxTouchPoints):window.matchMedia?window.matchMedia("(pointer:coarse)").matches:"orientation"in window,e}}},Rs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"sections"},e._l(e.tasks,(function(t,s){return n("Section",e._b({key:s,attrs:{id:t.anchor,sectionNumber:s+1,isRuntimePreviewVisible:e.isRuntimePreviewVisible},on:{"runtime-preview-toggle":e.onRuntimePreviewToggle}},"Section",t,!1))})),1)},Vs=[],Ls=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("LinkableSection",{staticClass:"section",attrs:{anchor:e.anchor,title:e.introProps.title}},[n("Intro",e._b({},"Intro",e.introProps,!1)),e.stepsSection.length>0?n("Steps",{attrs:{content:e.stepsSection,isRuntimePreviewVisible:e.isRuntimePreviewVisible,sectionNumber:e.sectionNumber},on:{"runtime-preview-toggle":e.onRuntimePreviewToggle}}):e._e()],1)},Fs=[],zs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"intro-container"},[n("Row",{class:["intro","intro-"+e.sectionNumber,{ide:e.isTargetIDE}]},[n("Column",{staticClass:"left"},[n("Headline",{attrs:{level:2}},[n("router-link",{attrs:{slot:"eyebrow",to:e.sectionLink},slot:"eyebrow"},[e._v(" Section "+e._s(e.sectionNumber)+" ")]),e._v(" "+e._s(e.title)+" ")],1),n("ContentNode",{attrs:{content:e.content}})],1),n("Column",{staticClass:"right"},[n("div",{staticClass:"media"},[e.media?n("Asset",{attrs:{identifier:e.media,showsReplayButton:!e.isClientMobile,showsVideoControls:e.isClientMobile,videoAutoplays:!e.isClientMobile}}):e._e()],1)])],1),e.expandedSections.length>0?n("ExpandedIntro",{staticClass:"expanded-intro",attrs:{content:e.expandedSections}}):e._e()],1)},Hs=[],Gs={name:"SectionIntro",inject:{isClientMobile:{default:()=>!1},isTargetIDE:{default:()=>!1}},components:{Asset:Oe["a"],ContentNode:je["a"],ExpandedIntro:ht,Headline:Yt,Row:St["a"],Column:{render(e){return e(xt["a"],{props:{span:{large:6,small:12}}},this.$slots.default)}}},props:{sectionAnchor:{type:String,required:!0},content:{type:Array,required:!0},media:{type:String,required:!0},title:{type:String,required:!0},sectionNumber:{type:Number,required:!0},expandedSections:{type:Array,default:()=>[]}},methods:{focus(){this.$emit("focus",this.media)}},computed:{sectionLink(){return{path:this.$route.path,hash:this.sectionAnchor,query:this.$route.query}}}},Us=Gs,Ws=(n("4896"),Object(w["a"])(Us,zs,Hs,!1,null,"54daa228",null)),Qs=Ws.exports,Ks=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"steps"},[n("div",{staticClass:"content-container"},e._l(e.contentNodes,(function(t,s){return n(t.component,e._b({key:s,ref:"contentNodes",refInFor:!0,tag:"component",class:e.contentClass(s),attrs:{currentIndex:e.activeStep}},"component",t.props,!1))})),1),e.isBreakpointSmall?e._e():n("BackgroundTheme",{staticClass:"asset-container",class:e.assetContainerClasses},[n("transition",{attrs:{name:"fade"}},[e.visibleAsset.media?n("div",{key:e.visibleAsset.media,class:["asset-wrapper",{ide:e.isTargetIDE}]},[n("Asset",{ref:"asset",staticClass:"step-asset",attrs:{identifier:e.visibleAsset.media,showsReplayButton:"",showsVideoControls:!1}})],1):e._e(),e.visibleAsset.code?n("CodePreview",{attrs:{code:e.visibleAsset.code,preview:e.visibleAsset.runtimePreview,isRuntimePreviewVisible:e.isRuntimePreviewVisible},on:{"runtime-preview-toggle":e.onRuntimePreviewToggle}},[e.visibleAsset.runtimePreview?n("transition",{attrs:{name:"fade"}},[n("Asset",{key:e.visibleAsset.runtimePreview,attrs:{identifier:e.visibleAsset.runtimePreview}})],1):e._e()],1):e._e()],1)],1)],1)},Xs=[],Js=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["code-preview",{ide:e.isTargetIDE}]},[n("CodeTheme",[e.code?n("CodeListing",e._b({attrs:{showLineNumbers:""}},"CodeListing",e.codeProps,!1)):e._e()],1),n("div",{staticClass:"runtime-preview",class:e.runtimePreviewClasses,style:e.previewStyles},[n("button",{staticClass:"header",attrs:{disabled:!e.hasRuntimePreview,title:e.runtimePreviewTitle},on:{click:e.togglePreview}},[n("span",{staticClass:"runtime-preview-label",attrs:{"aria-label":e.textAriaLabel}},[e._v(e._s(e.togglePreviewText))]),n("DiagonalArrowIcon",{staticClass:"icon-inline preview-icon",class:[e.shouldDisplayHideLabel?"preview-hide":"preview-show"]})],1),n("transition",{on:{leave:e.handleLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.shouldDisplayHideLabel,expression:"shouldDisplayHideLabel"}],staticClass:"runtime-preview-asset"},[e._t("default")],2)])],1)],1)},Ys=[],Zs=n("7b69"),ei=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"diagonal-arrow",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M0.010 12.881l10.429-10.477-3.764 0.824-0.339-1.549 7.653-1.679-1.717 7.622-1.546-0.349 0.847-3.759-10.442 10.487z"}})])},ti=[],ni={name:"DiagonalArrowIcon",components:{SVGIcon:y["a"]}},si=ni,ii=Object(w["a"])(si,ei,ti,!1,null,null,null),ri=ii.exports,oi=n("8590");const{BreakpointName:ai}=o["a"].constants;function li({width:e,height:t},n=1){const s=400,i=e<=s?1.75:3;return{width:e/(i/n),height:t/(i/n)}}var ci={name:"CodePreview",inject:["references","isTargetIDE","store"],components:{DiagonalArrowIcon:ri,CodeListing:Zs["a"],CodeTheme:oi["a"]},props:{code:{type:String,required:!0},preview:{type:String,required:!1},isRuntimePreviewVisible:{type:Boolean,required:!0}},data(){return{tutorialState:this.store.state}},computed:{currentBreakpoint(){return this.tutorialState.breakpoint},hasRuntimePreview(){return!!this.preview},previewAssetSize(){const e=this.hasRuntimePreview?this.references[this.preview]:{},t=(e.variants||[{}])[0]||{},n={width:900};let s=t.size||{};s.width||s.height||(s=n);const i=this.currentBreakpoint===ai.medium?.8:1;return li(s,i)},previewSize(){const e={width:102,height:32};return this.shouldDisplayHideLabel&&this.previewAssetSize?{width:this.previewAssetSize.width,height:this.previewAssetSize.height+e.height}:e},previewStyles(){const{width:e,height:t}=this.previewSize;return{width:e+"px",height:t+"px"}},codeProps(){return this.references[this.code]},runtimePreviewClasses(){return{collapsed:!this.shouldDisplayHideLabel,disabled:!this.hasRuntimePreview,"runtime-preview-ide":this.isTargetIDE}},shouldDisplayHideLabel(){return this.hasRuntimePreview&&this.isRuntimePreviewVisible},runtimePreviewTitle(){return this.hasRuntimePreview?null:"No preview available for this step."},togglePreviewText(){return this.hasRuntimePreview?"Preview":"No Preview"},textAriaLabel:({shouldDisplayHideLabel:e,togglePreviewText:t})=>`${t}, ${e?"Hide":"Show"}`},methods:{handleLeave(e,t){setTimeout(t,200)},togglePreview(){this.hasRuntimePreview&&this.$emit("runtime-preview-toggle",!this.isRuntimePreviewVisible)}}},ui=ci,di=(n("7bc6"),Object(w["a"])(ui,Js,Ys,!1,null,"1890a2ba",null)),pi=di.exports,hi=n("3908"),mi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{style:e.backgroundStyle},[e._t("default")],2)},fi=[],vi={name:"BackgroundTheme",data(){return{codeThemeState:qs["a"].state}},computed:{backgroundStyle(){const{codeColors:e}=this.codeThemeState;return e?{"--background":e.background}:null}}},gi=vi,yi=Object(w["a"])(gi,mi,fi,!1,null,null,null),bi=yi.exports,Ci=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["step-container","step-"+e.stepNumber]},[n("div",{ref:"step",staticClass:"step",class:{focused:e.isActive},attrs:{"data-index":e.index}},[n("p",{staticClass:"step-label"},[e._v("Step "+e._s(e.stepNumber))]),n("ContentNode",{attrs:{content:e.content}}),e.caption&&e.caption.length>0?n("ContentNode",{staticClass:"caption",attrs:{content:e.caption}}):e._e()],1),e.isBreakpointSmall||!e.isTargetIDE?n("div",{staticClass:"media-container"},[e.media?n("Asset",{attrs:{identifier:e.media,showsReplayButton:!e.isClientMobile,showsVideoControls:e.isClientMobile,videoAutoplays:!e.isClientMobile}}):e._e(),e.code?n("MobileCodePreview",{attrs:{code:e.code}},[e.runtimePreview?n("Asset",{staticClass:"preview",attrs:{identifier:e.runtimePreview}}):e._e()],1):e._e()],1):e._e()])},wi=[],_i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("BackgroundTheme",{staticClass:"mobile-code-preview"},[e.code?n("GenericModal",{staticClass:"full-code-listing-modal",attrs:{theme:e.isTargetIDE?"code":"light",codeBackgroundColorOverride:e.modalBackgroundColor,isFullscreen:"",visible:e.fullCodeIsVisible},on:{"update:visible":function(t){e.fullCodeIsVisible=t}}},[n("div",{staticClass:"full-code-listing-modal-content"},[n("CodeTheme",[n("CodeListing",e._b({staticClass:"full-code-listing",attrs:{showLineNumbers:""}},"CodeListing",e.codeProps,!1))],1)],1)]):e._e(),n("CodeTheme",[e.code?n("MobileCodeListing",e._b({attrs:{showLineNumbers:""},on:{"file-name-click":e.toggleFullCode}},"MobileCodeListing",e.codeProps,!1)):e._e()],1),n("CodeTheme",{staticClass:"preview-toggle-container"},[n("PreviewToggle",{attrs:{isActionable:!!e.$slots.default},on:{click:e.togglePreview}})],1),e.$slots.default?n("GenericModal",{staticClass:"runtime-preview-modal",attrs:{theme:e.isTargetIDE?"dynamic":"light",isFullscreen:"",visible:e.previewIsVisible},on:{"update:visible":function(t){e.previewIsVisible=t}}},[n("div",{staticClass:"runtime-preview-modal-content"},[n("span",{staticClass:"runtime-preview-label"},[e._v("Preview")]),e._t("default")],2)]):e._e()],1)},ki=[],Si=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"code-listing-preview",attrs:{"data-syntax":e.syntax}},[n("CodeListing",{attrs:{fileName:e.fileName,syntax:e.syntax,fileType:e.fileType,content:e.previewedLines,startLineNumber:e.displayedRange.start,highlights:e.highlights,showLineNumbers:"",isFileNameActionable:""},on:{"file-name-click":function(t){return e.$emit("file-name-click")}}})],1)},xi=[],Ti={name:"MobileCodeListing",components:{CodeListing:Zs["a"]},props:{fileName:String,syntax:String,fileType:String,content:{type:Array,required:!0},highlights:{type:Array,default:()=>[]}},computed:{highlightedLineNumbers(){return new Set(this.highlights.map(({line:e})=>e))},firstHighlightRange(){if(0===this.highlightedLineNumbers.size)return{start:1,end:this.content.length};const e=Math.min(...this.highlightedLineNumbers.values());let t=e;while(this.highlightedLineNumbers.has(t+1))t+=1;return{start:e,end:t}},displayedRange(){const e=this.firstHighlightRange,t=e.start-2<1?1:e.start-2,n=e.end+3>=this.content.length+1?this.content.length+1:e.end+3;return{start:t,end:n}},previewedLines(){return this.content.slice(this.displayedRange.start-1,this.displayedRange.end-1)}}},Ai=Ti,$i=(n("fae5"),Object(w["a"])(Ai,Si,xi,!1,null,"5ad4e037",null)),Ii=$i.exports,Oi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"toggle-preview"},[e.isActionable?n("a",{staticClass:"toggle-text",attrs:{href:"#"},on:{click:function(t){return t.preventDefault(),e.$emit("click")}}},[e._v(" Preview "),n("InlinePlusCircleIcon",{staticClass:"toggle-icon icon-inline"})],1):n("span",{staticClass:"toggle-text"},[e._v(" No preview ")])])},Pi=[],Ni=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"inline-plus-circle-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M7 0.5c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5c-3.59 0-6.5-2.91-6.5-6.5v0c0-3.59 2.91-6.5 6.5-6.5v0zM7 1.5c-3.038 0-5.5 2.462-5.5 5.5s2.462 5.5 5.5 5.5c3.038 0 5.5-2.462 5.5-5.5v0c0-3.038-2.462-5.5-5.5-5.5v0z"}}),n("path",{attrs:{d:"M4 6.52h6v1h-6v-1z"}}),n("path",{attrs:{d:"M6.5 4.010h1v6h-1v-6z"}})])},ji=[],Bi={name:"InlinePlusCircleIcon",components:{SVGIcon:y["a"]}},Di=Bi,Mi=Object(w["a"])(Di,Ni,ji,!1,null,null,null),qi=Mi.exports,Ei={name:"MobileCodePreviewToggle",components:{InlinePlusCircleIcon:qi},props:{isActionable:{type:Boolean,required:!0}}},Ri=Ei,Vi=(n("e97b"),Object(w["a"])(Ri,Oi,Pi,!1,null,"d0709828",null)),Li=Vi.exports,Fi={name:"MobileCodePreview",inject:["references","isTargetIDE","store"],components:{GenericModal:fn,CodeListing:Zs["a"],MobileCodeListing:Ii,PreviewToggle:Li,CodeTheme:oi["a"],BackgroundTheme:bi},props:{code:{type:String,required:!0}},computed:{codeProps(){return this.references[this.code]},modalBackgroundColor(){const{codeColors:e}=this.store.state;return e?e.background:null}},data(){return{previewIsVisible:!1,fullCodeIsVisible:!1}},methods:{togglePreview(){this.previewIsVisible=!this.previewIsVisible},toggleFullCode(){this.fullCodeIsVisible=!this.fullCodeIsVisible}}},zi=Fi,Hi=(n("3012"),Object(w["a"])(zi,_i,ki,!1,null,"b130569c",null)),Gi=Hi.exports;const{BreakpointName:Ui}=o["a"].constants;var Wi={name:"Step",components:{Asset:Oe["a"],MobileCodePreview:Gi,ContentNode:je["a"]},inject:["isTargetIDE","isClientMobile","store"],props:{code:{type:String,required:!1},content:{type:Array,required:!0},caption:{type:Array,required:!1},media:{type:String,required:!1},runtimePreview:{type:String,required:!1},sectionNumber:{type:Number,required:!0},stepNumber:{type:Number,required:!0},numberOfSteps:{type:Number,required:!0},index:{type:Number,required:!0},currentIndex:{type:Number,required:!0}},data(){return{tutorialState:this.store.state}},computed:{isBreakpointSmall(){return this.tutorialState.breakpoint===Ui.small},isActive:({index:e,currentIndex:t})=>e===t}},Qi=Wi,Ki=(n("bc03"),Object(w["a"])(Qi,Ci,wi,!1,null,"4abdd121",null)),Xi=Ki.exports;const{BreakpointName:Ji}=o["a"].constants,{IntersectionDirections:Yi}=Ze["a"].constants,Zi="-35% 0% -65% 0%";var er={name:"SectionSteps",components:{ContentNode:je["a"],Step:Xi,Asset:Oe["a"],CodePreview:pi,BackgroundTheme:bi},mixins:[Ze["a"]],constants:{IntersectionMargins:Zi},inject:["isTargetIDE","store"],data(){const e=this.content.findIndex(this.isStepNode),{code:t,media:n,runtimePreview:s}=this.content[e]||{};return{tutorialState:this.store.state,visibleAsset:{media:n,code:t,runtimePreview:s},activeStep:e}},computed:{assetContainerClasses(){return{"for-step-code":!!this.visibleAsset.code,ide:this.isTargetIDE}},numberOfSteps(){return this.content.filter(this.isStepNode).length},contentNodes(){return this.content.reduce(({stepCounter:e,nodes:t},n,s)=>{const{type:i,...r}=n,o=this.isStepNode(n),a=o?e+1:e;return o?{stepCounter:e+1,nodes:t.concat({component:Xi,type:i,props:{...r,stepNumber:a,index:s,numberOfSteps:this.numberOfSteps,sectionNumber:this.sectionNumber}})}:{stepCounter:e,nodes:t.concat({component:je["a"],type:i,props:{content:[n]}})}},{stepCounter:0,nodes:[]}).nodes},isBreakpointSmall(){return this.tutorialState.breakpoint===Ji.small},stepNodes:({contentNodes:e,isStepNode:t})=>e.filter(t),intersectionRootMargin:()=>Zi},async mounted(){await Object(hi["a"])(8),this.findClosestStepNode()},methods:{isStepNode({type:e}){return"step"===e},contentClass(e){return{["interstitial interstitial-"+(e+1)]:!this.isStepNode(this.content[e])}},onReverseIntoLastStep(){const{asset:e}=this.$refs;if(e){const t=e.$el.querySelector("video");t&&(t.currentTime=0,t.play().catch(()=>{}))}},onFocus(e){const{code:t,media:n,runtimePreview:s}=this.content[e];this.activeStep=e,this.visibleAsset={code:t,media:n,runtimePreview:s}},onRuntimePreviewToggle(e){this.$emit("runtime-preview-toggle",e)},findClosestStepNode(){const e=.333*window.innerHeight;let t=null,n=0;this.stepNodes.forEach(s=>{const{index:i}=s.props,r=this.$refs.contentNodes[i].$refs.step;if(!r)return;const{top:o,bottom:a}=r.getBoundingClientRect(),l=o-e,c=a-e,u=Math.abs(l+c);(0===n||u<=n)&&(n=u,t=i)}),null!==t&&this.onFocus(t)},getIntersectionTargets(){const{stepNodes:e,$refs:t}=this;return e.map(({props:{index:e}})=>t.contentNodes[e].$refs.step)},onIntersect(e){const{target:t,isIntersecting:n}=e;if(!n)return;const s=parseFloat(t.getAttribute("data-index"));this.intersectionScrollDirection===Yi.down&&s===this.stepNodes[this.stepNodes.length-1].props.index&&this.onReverseIntoLastStep(),this.onFocus(s)}},props:{content:{type:Array,required:!0},isRuntimePreviewVisible:{type:Boolean,require:!0},sectionNumber:{type:Number,required:!0}}},tr=er,nr=(n("00f4"),Object(w["a"])(tr,Ks,Xs,!1,null,"25d30c2c",null)),sr=nr.exports,ir={name:"Section",components:{Intro:Qs,LinkableSection:st,Steps:sr},computed:{introProps(){const[{content:e,media:t},...n]=this.contentSection;return{content:e,expandedSections:n,media:t,sectionAnchor:this.anchor,sectionNumber:this.sectionNumber,title:this.title}}},props:{anchor:{type:String,required:!0},title:{type:String,required:!0},contentSection:{type:Array,required:!0},stepsSection:{type:Array,required:!0},sectionNumber:{type:Number,required:!0},isRuntimePreviewVisible:{type:Boolean,required:!0}},methods:{onRuntimePreviewToggle(e){this.$emit("runtime-preview-toggle",e)}}},rr=ir,or=(n("9dc4"),Object(w["a"])(rr,Ls,Fs,!1,null,"6b3a0b3a",null)),ar=or.exports,lr={name:"SectionList",components:{Section:ar},data(){return{isRuntimePreviewVisible:!0}},props:{tasks:{type:Array,required:!0}},methods:{onRuntimePreviewToggle(e){this.isRuntimePreviewVisible=e}}},cr=lr,ur=(n("4d07"),Object(w["a"])(cr,Rs,Vs,!1,null,"79a75e9e",null)),dr=ur.exports;const pr={assessments:xs,hero:Ln,tasks:dr,callToAction:Bt},hr=new Set(Object.keys(pr)),mr={name:"TutorialSection",render:function(e){const{kind:t,...n}=this.section,s=pr[t];return s?e(s,{props:n}):null},props:{section:{type:Object,required:!0,validator:e=>hr.has(e.kind)}}};var fr={name:"Tutorial",mixins:[ke["a"],Es],components:{NavigationBar:_e,Section:mr,PortalTarget:h["PortalTarget"],BreakpointEmitter:o["a"]},inject:["isTargetIDE","store"],computed:{heroSection(){return this.sections.find(({kind:e})=>"hero"===e)},tutorialTitle(){return(this.heroSection||{}).title},pageTitle(){return this.tutorialTitle?`${this.tutorialTitle} — ${this.metadata.category} Tutorials`:void 0}},props:{sections:{type:Array,required:!0},references:{type:Object,required:!0},hierarchy:{type:Object,required:!0},metadata:{type:Object,required:!0}},methods:{handleBreakpointChange(e){this.store.updateBreakpoint(e)},handleCodeColorsChange(e){qs["a"].updateCodeColors(e)}},created(){this.store.reset()},mounted(){this.$bridge.on("codeColors",this.handleCodeColorsChange),this.$bridge.send({type:"requestCodeColors"})},provide(){return{references:this.references,isClientMobile:this.isClientMobile}},beforeDestroy(){this.$bridge.off("codeColors",this.handleCodeColorsChange)}},vr=fr,gr=(n("3d7d"),Object(w["a"])(vr,Ds,Ms,!1,null,"6e17d3d0",null)),yr=gr.exports,br=n("bb52"),Cr=n("146e");const wr={article:"article",tutorial:"project"};var _r={name:"Topic",inject:{isTargetIDE:{default:!1}},mixins:[br["a"],Cr["a"]],data(){return{topicData:null}},computed:{navigationBarHeight(){return this.isTargetIDE?0:52},store(){return u},hierarchy(){const{hierarchy:e={}}=this.topicData,{technologyNavigation:t=["overview","tutorials","resources"]}=e||{};return{...e,technologyNavigation:t}},topicKey:({$route:e,topicData:t})=>[e.path,t.identifier.interfaceLanguage].join()},beforeRouteEnter(e,t,n){Object(r["b"])(e,t,n).then(e=>n(t=>{t.topicData=e})).catch(n)},beforeRouteUpdate(e,t,n){Object(r["c"])(e,t)?Object(r["b"])(e,t,n).then(e=>{this.topicData=e,n()}).catch(n):n()},created(){this.store.reset()},mounted(){this.$bridge.on("contentUpdate",e=>{this.topicData=e})},methods:{componentFor(e){const{kind:t}=e;return{[wr.article]:Bs,[wr.tutorial]:yr}[t]},propsFor(e){const{hierarchy:t,kind:n,metadata:s,references:i,sections:r}=e;return{[wr.article]:{hierarchy:t,metadata:s,references:i,sections:r},[wr.tutorial]:{hierarchy:t,metadata:s,references:i,sections:r}}[n]}},provide(){return{navigationBarHeight:this.navigationBarHeight,store:this.store}},watch:{topicData(){this.$nextTick(()=>{this.newContentMounted()})}}},kr=_r,Sr=Object(w["a"])(kr,s,i,!1,null,null,null);t["default"]=Sr.exports},"323a":function(e,t,n){"use strict";n("0b61")},"32b1":function(e,t,n){},"385e":function(e,t,n){},"39d2":function(e,t,n){},"3c4b":function(e,t,n){"use strict";n("1aae")},"3d7d":function(e,t,n){"use strict";n("311b")},"3e1b":function(e,t,n){"use strict";n("c5c1")},"3f84":function(e,t,n){"use strict";n("bc48")},4237:function(e,t,n){},4896:function(e,t,n){"use strict";n("fa9c")},"4b4a":function(e,t,n){},"4d07":function(e,t,n){"use strict";n("b52e")},"4eea":function(e,t,n){},5237:function(e,t,n){"use strict";n("4b4a")},"525c":function(e,t,n){},5356:function(e,t,n){"use strict";n("7e3c")},5952:function(e,t,n){"use strict";n("14b7")},"5da4":function(e,t,n){},"63a8":function(e,t,n){},"64fc":function(e,t,n){},"653a":function(e,t,n){"use strict";var s=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("router-link",{staticClass:"nav-title-content",attrs:{to:e.to}},[n("span",{staticClass:"title"},[e._t("default")],2),n("span",{staticClass:"subhead"},[e._v(" "),e._t("subhead")],2)])},i=[],r={name:"NavTitleContainer",props:{to:{type:[String,Object],required:!0}}},o=r,a=(n("a497"),n("2877")),l=Object(a["a"])(o,s,i,!1,null,"60ea3af8",null);t["a"]=l.exports},"66c9":function(e,t,n){"use strict";t["a"]={state:{codeColors:null},reset(){this.state.codeColors=null},updateCodeColors(e){const t=e=>e?`rgba(${e.red}, ${e.green}, ${e.blue}, ${e.alpha})`:null;this.state.codeColors=Object.entries(e).reduce((e,[n,s])=>({...e,[n]:t(s)}),{})}}},"6cd7":function(e,t,n){"use strict";n("a59d")},7096:function(e,t,n){},"71b5":function(e,t,n){"use strict";n("7ca3")},7839:function(e,t,n){"use strict";n("385e")},"78b2":function(e,t,n){},"7b17":function(e,t,n){},"7bc6":function(e,t,n){"use strict";n("b5e5")},"7ca3":function(e,t,n){},"7e3c":function(e,t,n){},"80e4":function(e,t,n){"use strict";var s=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"asset"},[n(e.assetComponent,e._g(e._b({tag:"component"},"component",e.assetProps,!1),e.assetListeners))],1)},i=[],r=n("8bd9"),o=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("video",{attrs:{controls:e.showsControls,autoplay:e.autoplays,poster:e.normalizeAssetUrl(e.defaultPosterAttributes.url),muted:"",playsinline:""},domProps:{muted:!0},on:{playing:function(t){return e.$emit("playing")},ended:function(t){return e.$emit("ended")}}},[n("source",{attrs:{src:e.normalizeAssetUrl(e.videoAttributes.url)}})])},a=[],l=n("748c"),c=n("e425"),u=n("821b"),d={name:"VideoAsset",props:{variants:{type:Array,required:!0},showsControls:{type:Boolean,default:()=>!0},autoplays:{type:Boolean,default:()=>!0},posterVariants:{type:Array,required:!1,default:()=>[]}},data:()=>({appState:c["a"].state}),computed:{preferredColorScheme:({appState:e})=>e.preferredColorScheme,systemColorScheme:({appState:e})=>e.systemColorScheme,userPrefersDark:({preferredColorScheme:e,systemColorScheme:t})=>e===u["a"].dark.value||e===u["a"].auto.value&&t===u["a"].dark.value,shouldShowDarkVariant:({darkVideoVariantAttributes:e,userPrefersDark:t})=>e&&t,defaultVideoAttributes(){return this.videoVariantsGroupedByAppearance.light[0]||this.darkVideoVariantAttributes||{}},darkVideoVariantAttributes(){return this.videoVariantsGroupedByAppearance.dark[0]},videoVariantsGroupedByAppearance(){return Object(l["d"])(this.variants)},posterVariantsGroupedByAppearance(){return Object(l["d"])(this.posterVariants)},defaultPosterAttributes:({posterVariantsGroupedByAppearance:e,userPrefersDark:t})=>t&&e.dark.length?e.dark[0]:e.light[0]||{},videoAttributes:({darkVideoVariantAttributes:e,defaultVideoAttributes:t,shouldShowDarkVariant:n})=>n?e:t},methods:{normalizeAssetUrl:l["b"]}},p=d,h=n("2877"),m=Object(h["a"])(p,o,a,!1,null,null,null),f=m.exports,v=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"video-replay-container"},[n("VideoAsset",{ref:"asset",attrs:{variants:e.variants,showsControls:e.showsControls,autoplays:e.autoplays},on:{ended:e.onVideoEnd}}),n("a",{staticClass:"replay-button",class:{visible:this.showsReplayButton},attrs:{href:"#"},on:{click:function(t){return t.preventDefault(),e.replay.apply(null,arguments)}}},[e._v(" Replay "),n("InlineReplayIcon",{staticClass:"replay-icon icon-inline"})],1)],1)},g=[],y=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SVGIcon",{staticClass:"inline-replay-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M2.254 10.201c-1.633-2.613-0.838-6.056 1.775-7.689 2.551-1.594 5.892-0.875 7.569 1.592l0.12 0.184-0.848 0.53c-1.34-2.145-4.166-2.797-6.311-1.457s-2.797 4.166-1.457 6.311 4.166 2.797 6.311 1.457c1.006-0.629 1.71-1.603 2.003-2.723l0.056-0.242 0.98 0.201c-0.305 1.487-1.197 2.792-2.51 3.612-2.613 1.633-6.056 0.838-7.689-1.775z"}}),n("path",{attrs:{d:"M10.76 1.355l0.984-0.18 0.851 4.651-4.56-1.196 0.254-0.967 3.040 0.796z"}})])},b=[],C=n("be08"),w={name:"InlineReplayIcon",components:{SVGIcon:C["a"]}},_=w,k=Object(h["a"])(_,y,b,!1,null,null,null),S=k.exports,x={name:"ReplayableVideoAsset",components:{InlineReplayIcon:S,VideoAsset:f},props:{variants:{type:Array,required:!0},showsControls:{type:Boolean,default:()=>!0},autoplays:{type:Boolean,default:()=>!0}},data(){return{showsReplayButton:!1}},methods:{async replay(){const e=this.$refs.asset.$el;e&&(this.showsReplayButton=!1,e.currentTime=0,await e.play())},onVideoEnd(){this.showsReplayButton=!0}}},T=x,A=(n("3f84"),Object(h["a"])(T,v,g,!1,null,"7335dbb2",null)),$=A.exports;const I={video:"video",image:"image"};var O={name:"Asset",components:{ImageAsset:r["a"],VideoAsset:f},constants:{AssetTypes:I},inject:["references"],props:{identifier:{type:String,required:!0},showsReplayButton:{type:Boolean,default:()=>!1},showsVideoControls:{type:Boolean,default:()=>!0},videoAutoplays:{type:Boolean,default:()=>!0}},computed:{rawAsset(){return this.references[this.identifier]||{}},isRawAssetVideo:({rawAsset:e})=>e.type===I.video,videoPoster(){return this.isRawAssetVideo&&this.references[this.rawAsset.poster]},asset(){return this.isRawAssetVideo&&this.prefersReducedMotion&&this.videoPoster||this.rawAsset},assetComponent(){switch(this.asset.type){case I.image:return r["a"];case I.video:return this.showsReplayButton?$:f;default:return}},prefersReducedMotion(){return window.matchMedia("(prefers-reduced-motion)").matches},assetProps(){return{[I.image]:this.imageProps,[I.video]:this.videoProps}[this.asset.type]},imageProps(){return{alt:this.asset.alt,variants:this.asset.variants}},videoProps(){return{variants:this.asset.variants,showsControls:this.showsVideoControls,autoplays:!this.prefersReducedMotion&&this.videoAutoplays,posterVariants:this.videoPoster?this.videoPoster.variants:[]}},assetListeners(){return{[I.image]:null,[I.video]:{ended:()=>this.$emit("videoEnded")}}[this.asset.type]}}},P=O,N=(n("7839"),Object(h["a"])(P,s,i,!1,null,"1b5cc854",null));t["a"]=N.exports},"80f7":function(e,t,n){"use strict";n("4eea")},"811c":function(e,t,n){"use strict";n("4237")},8590:function(e,t,n){"use strict";var s=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{style:e.codeStyle},[e._t("default")],2)},i=[],r=n("66c9");const o=0,a=255;function l(e){const t=e.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d+\.?\d*|\.\d+)\s*\)/);if(!t)throw new Error("invalid rgba() input");const n=10;return{r:parseInt(t[1],n),g:parseInt(t[2],n),b:parseInt(t[3],n),a:parseFloat(t[4])}}function c(e){const{r:t,g:n,b:s}=l(e);return.2126*t+.7152*n+.0722*s}function u(e,t){const n=Math.round(a*t),s=l(e),{a:i}=s,[r,c,u]=[s.r,s.g,s.b].map(e=>Math.max(o,Math.min(a,e+n)));return`rgba(${r}, ${c}, ${u}, ${i})`}function d(e,t){return u(e,t)}function p(e,t){return u(e,-1*t)}var h={name:"CodeTheme",data(){return{codeThemeState:r["a"].state}},computed:{codeStyle(){const{codeColors:e}=this.codeThemeState;return e?{"--text":e.text,"--background":e.background,"--line-highlight":e.lineHighlight,"--url":e.commentURL,"--syntax-comment":e.comment,"--syntax-quote":e.comment,"--syntax-keyword":e.keyword,"--syntax-literal":e.keyword,"--syntax-selector-tag":e.keyword,"--syntax-string":e.stringLiteral,"--syntax-bullet":e.stringLiteral,"--syntax-meta":e.keyword,"--syntax-number":e.stringLiteral,"--syntax-symbol":e.stringLiteral,"--syntax-tag":e.stringLiteral,"--syntax-attr":e.typeAnnotation,"--syntax-built_in":e.typeAnnotation,"--syntax-builtin-name":e.typeAnnotation,"--syntax-class":e.typeAnnotation,"--syntax-params":e.typeAnnotation,"--syntax-section":e.typeAnnotation,"--syntax-title":e.typeAnnotation,"--syntax-type":e.typeAnnotation,"--syntax-attribute":e.keyword,"--syntax-identifier":e.text,"--syntax-subst":e.text,"--color-syntax-param-internal-name":this.internalParamNameColor}:null},internalParamNameColor(){const{background:e,text:t}=this.codeThemeState.codeColors;try{const n=c(e),s=n!0},autoplays:{type:Boolean,default:()=>!0},posterVariants:{type:Array,required:!1,default:()=>[]}},data:()=>({appState:l["a"].state}),computed:{preferredColorScheme:({appState:t})=>t.preferredColorScheme,systemColorScheme:({appState:t})=>t.systemColorScheme,userPrefersDark:({preferredColorScheme:t,systemColorScheme:e})=>t===u["a"].dark.value||t===u["a"].auto.value&&e===u["a"].dark.value,shouldShowDarkVariant:({darkVideoVariantAttributes:t,userPrefersDark:e})=>t&&e,defaultVideoAttributes(){return this.videoVariantsGroupedByAppearance.light[0]||this.darkVideoVariantAttributes||{}},darkVideoVariantAttributes(){return this.videoVariantsGroupedByAppearance.dark[0]},videoVariantsGroupedByAppearance(){return Object(c["d"])(this.variants)},posterVariantsGroupedByAppearance(){return Object(c["d"])(this.posterVariants)},defaultPosterAttributes:({posterVariantsGroupedByAppearance:t,userPrefersDark:e})=>e&&t.dark.length?t.dark[0]:t.light[0]||{},videoAttributes:({darkVideoVariantAttributes:t,defaultVideoAttributes:e,shouldShowDarkVariant:n})=>n?t:e},methods:{normalizeAssetUrl:c["b"]}},p=d,m=n("2877"),h=Object(m["a"])(p,o,r,!1,null,null,null),v=h.exports,f=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"video-replay-container"},[n("VideoAsset",{ref:"asset",attrs:{variants:t.variants,showsControls:t.showsControls,autoplays:t.autoplays},on:{ended:t.onVideoEnd}}),n("a",{staticClass:"replay-button",class:{visible:this.showsReplayButton},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.replay.apply(null,arguments)}}},[t._v(" Replay "),n("InlineReplayIcon",{staticClass:"replay-icon icon-inline"})],1)],1)},y=[],b=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("SVGIcon",{staticClass:"inline-replay-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M2.254 10.201c-1.633-2.613-0.838-6.056 1.775-7.689 2.551-1.594 5.892-0.875 7.569 1.592l0.12 0.184-0.848 0.53c-1.34-2.145-4.166-2.797-6.311-1.457s-2.797 4.166-1.457 6.311 4.166 2.797 6.311 1.457c1.006-0.629 1.71-1.603 2.003-2.723l0.056-0.242 0.98 0.201c-0.305 1.487-1.197 2.792-2.51 3.612-2.613 1.633-6.056 0.838-7.689-1.775z"}}),n("path",{attrs:{d:"M10.76 1.355l0.984-0.18 0.851 4.651-4.56-1.196 0.254-0.967 3.040 0.796z"}})])},C=[],_=n("be08"),g={name:"InlineReplayIcon",components:{SVGIcon:_["a"]}},V=g,S=Object(m["a"])(V,b,C,!1,null,null,null),A=S.exports,T={name:"ReplayableVideoAsset",components:{InlineReplayIcon:A,VideoAsset:v},props:{variants:{type:Array,required:!0},showsControls:{type:Boolean,default:()=>!0},autoplays:{type:Boolean,default:()=>!0}},data(){return{showsReplayButton:!1}},methods:{async replay(){const t=this.$refs.asset.$el;t&&(this.showsReplayButton=!1,t.currentTime=0,await t.play())},onVideoEnd(){this.showsReplayButton=!0}}},w=T,k=(n("3f84"),Object(m["a"])(w,f,y,!1,null,"7335dbb2",null)),I=k.exports;const x={video:"video",image:"image"};var O={name:"Asset",components:{ImageAsset:i["a"],VideoAsset:v},constants:{AssetTypes:x},inject:["references"],props:{identifier:{type:String,required:!0},showsReplayButton:{type:Boolean,default:()=>!1},showsVideoControls:{type:Boolean,default:()=>!0},videoAutoplays:{type:Boolean,default:()=>!0}},computed:{rawAsset(){return this.references[this.identifier]||{}},isRawAssetVideo:({rawAsset:t})=>t.type===x.video,videoPoster(){return this.isRawAssetVideo&&this.references[this.rawAsset.poster]},asset(){return this.isRawAssetVideo&&this.prefersReducedMotion&&this.videoPoster||this.rawAsset},assetComponent(){switch(this.asset.type){case x.image:return i["a"];case x.video:return this.showsReplayButton?I:v;default:return}},prefersReducedMotion(){return window.matchMedia("(prefers-reduced-motion)").matches},assetProps(){return{[x.image]:this.imageProps,[x.video]:this.videoProps}[this.asset.type]},imageProps(){return{alt:this.asset.alt,variants:this.asset.variants}},videoProps(){return{variants:this.asset.variants,showsControls:this.showsVideoControls,autoplays:!this.prefersReducedMotion&&this.videoAutoplays,posterVariants:this.videoPoster?this.videoPoster.variants:[]}},assetListeners(){return{[x.image]:null,[x.video]:{ended:()=>this.$emit("videoEnded")}}[this.asset.type]}}},j=O,N=(n("7839"),Object(m["a"])(j,s,a,!1,null,"1b5cc854",null));e["a"]=N.exports},"82d9":function(t,e,n){},"85fb":function(t,e,n){},"8d2d":function(t,e,n){"use strict";var s=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("SVGIcon",{staticClass:"tutorial-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M0.933 6.067h3.733v1.867h-3.733v-1.867z"}}),n("path",{attrs:{d:"M0.933 1.867h3.733v1.867h-3.733v-1.867z"}}),n("path",{attrs:{d:"M13.067 1.867v10.267h-7.467v-10.267zM12.133 2.8h-5.6v8.4h5.6z"}}),n("path",{attrs:{d:"M0.933 10.267h3.733v1.867h-3.733v-1.867z"}})])},a=[],i=n("be08"),o={name:"TutorialIcon",components:{SVGIcon:i["a"]}},r=o,c=n("2877"),l=Object(c["a"])(r,s,a,!1,null,null,null);e["a"]=l.exports},"8f86":function(t,e,n){},"9b79":function(t,e,n){},"9f56":function(t,e,n){},a497:function(t,e,n){"use strict";n("da75")},a8f9:function(t,e,n){"use strict";n("d4d0")},a9f1:function(t,e,n){"use strict";var s=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("SVGIcon",{staticClass:"article-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M8.033 1l3.967 4.015v7.985h-10v-12zM7.615 2h-4.615v10h8v-6.574z"}}),n("path",{attrs:{d:"M7 1h1v4h-1z"}}),n("path",{attrs:{d:"M7 5h5v1h-5z"}})])},a=[],i=n("be08"),o={name:"ArticleIcon",components:{SVGIcon:i["a"]}},r=o,c=n("2877"),l=Object(c["a"])(r,s,a,!1,null,null,null);e["a"]=l.exports},b185:function(t,e,n){},b9c2:function(t,e,n){},bc48:function(t,e,n){},be3b:function(t,e,n){"use strict";n("fb27")},c4dd:function(t,e,n){"use strict";var s=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("SVGIcon",{staticClass:"play-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M7 0.5c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5c-3.59 0-6.5-2.91-6.5-6.5v0c0-3.59 2.91-6.5 6.5-6.5v0zM7 1.5c-3.038 0-5.5 2.462-5.5 5.5s2.462 5.5 5.5 5.5c3.038 0 5.5-2.462 5.5-5.5v0c0-3.038-2.462-5.5-5.5-5.5v0z"}}),n("path",{attrs:{d:"M10.195 7.010l-5 3v-6l5 3z"}})])},a=[],i=n("be08"),o={name:"PlayIcon",components:{SVGIcon:i["a"]}},r=o,c=n("2877"),l=Object(c["a"])(r,s,a,!1,null,null,null);e["a"]=l.exports},c802:function(t,e,n){"use strict";n("f084")},c8fd:function(t,e,n){"use strict";n("1509")},d4d0:function(t,e,n){},d647:function(t,e,n){"use strict";n("b185")},da75:function(t,e,n){},dcb9:function(t,e,n){},de60:function(t,e,n){"use strict";var s=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("SVGIcon",{staticClass:"download-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M7 0.5c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5zM7 1.5c-3.038 0-5.5 2.462-5.5 5.5s2.462 5.5 5.5 5.5c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5z"}}),n("path",{attrs:{d:"M7.51 2.964l-0.001 5.431 1.308-2.041 0.842 0.539-2.664 4.162-2.633-4.164 0.845-0.534 1.303 2.059 0.001-5.452z"}})])},a=[],i=n("be08"),o={name:"DownloadIcon",components:{SVGIcon:i["a"]}},r=o,c=n("2877"),l=Object(c["a"])(r,s,a,!1,null,null,null);e["a"]=l.exports},e929:function(t,e,n){"use strict";n("54b0")},ec73:function(t,e,n){},ee29:function(t,e,n){"use strict";n("b9c2")},f025:function(t,e,n){"use strict";n.r(e);var s=function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.topicData?n("Overview",t._b({key:t.topicKey},"Overview",t.overviewProps,!1)):t._e()},a=[],i=n("25a9"),o=n("bb52"),r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"tutorials-overview"},[t.isTargetIDE?t._e():n("Nav",{staticClass:"theme-dark",attrs:{sections:t.otherSections}},[t._v(" "+t._s(t.title)+" ")]),n("main",{staticClass:"main",attrs:{id:"main",role:"main",tabindex:"0"}},[n("div",{staticClass:"radial-gradient"},[t._t("above-hero"),t.heroSection?n("Hero",{attrs:{action:t.heroSection.action,content:t.heroSection.content,estimatedTime:t.metadata.estimatedTime,image:t.heroSection.image,title:t.heroSection.title}}):t._e()],2),t.otherSections.length>0?n("LearningPath",{attrs:{sections:t.otherSections}}):t._e()],1)],1)},c=[],l={state:{activeTutorialLink:null,activeVolume:null},reset(){this.state.activeTutorialLink=null,this.state.activeVolume=null},setActiveSidebarLink(t){this.state.activeTutorialLink=t},setActiveVolume(t){this.state.activeVolume=t}},u=n("d8ce"),d=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"hero"},[n("div",{staticClass:"copy-container"},[n("h1",{staticClass:"title"},[t._v(t._s(t.title))]),t.content?n("ContentNode",{attrs:{content:t.content}}):t._e(),t.estimatedTime?n("p",{staticClass:"meta"},[n("TimerIcon"),n("span",{staticClass:"meta-content"},[n("strong",{staticClass:"time"},[t._v(t._s(t.estimatedTime))]),n("span",[t._v(" Estimated Time")])])],1):t._e(),t.action?n("CallToActionButton",{attrs:{action:t.action,"aria-label":t.action.overridingTitle+" with "+t.title,isDark:""}}):t._e()],1),t.image?n("Asset",{attrs:{identifier:t.image}}):t._e()],1)},p=[],m=n("80e4"),h=n("c081"),v=n("5677"),f=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("SVGIcon",{staticClass:"timer-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M7 0.5c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5c-3.59 0-6.5-2.91-6.5-6.5v0c0-3.59 2.91-6.5 6.5-6.5v0zM7 2c-2.761 0-5 2.239-5 5s2.239 5 5 5c2.761 0 5-2.239 5-5v0c0-2.761-2.239-5-5-5v0z"}}),n("path",{attrs:{d:"M6.51 3.51h1.5v3.5h-1.5v-3.5z"}}),n("path",{attrs:{d:"M6.51 7.010h4v1.5h-4v-1.5z"}})])},y=[],b=n("be08"),C={name:"TimerIcon",components:{SVGIcon:b["a"]}},_=C,g=n("2877"),V=Object(g["a"])(_,f,y,!1,null,null,null),S=V.exports,A={name:"Hero",components:{Asset:m["a"],CallToActionButton:h["a"],ContentNode:v["a"],TimerIcon:S},props:{action:{type:Object,required:!1},content:{type:Array,required:!1},estimatedTime:{type:String,required:!1},image:{type:String,required:!1},title:{type:String,required:!0}}},T=A,w=(n("f974"),Object(g["a"])(T,d,p,!1,null,"fc7f508c",null)),k=w.exports,I=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"learning-path",class:t.classes},[n("div",{staticClass:"main-container"},[t.isTargetIDE?t._e():n("div",{staticClass:"secondary-content-container"},[n("TutorialsNavigation",{attrs:{sections:t.sections,"aria-label":"On this page"}})],1),n("div",{staticClass:"primary-content-container"},[n("div",{staticClass:"content-sections-container"},[t._l(t.volumes,(function(e,s){return n("Volume",t._b({key:"volume_"+s,staticClass:"content-section"},"Volume",t.propsFor(e),!1))})),t._l(t.otherSections,(function(e,s){return n(t.componentFor(e),t._b({key:"resource_"+s,tag:"component",staticClass:"content-section"},"component",t.propsFor(e),!1))}))],2)])])])},x=[],O=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"resources",attrs:{id:"resources",tabindex:"-1"}},[n("VolumeName",{attrs:{name:"Resources",content:t.content}}),n("TileGroup",{attrs:{tiles:t.tiles}})],1)},j=[],N=n("72e7");const E={topOneThird:"-30% 0% -70% 0%",center:"-50% 0% -50% 0%"};var M={mixins:[N["a"]],computed:{intersectionRoot(){return null},intersectionRootMargin(){return E.center}},methods:{onIntersect(t){if(!t.isIntersecting)return;const e=this.onIntersectViewport;e?e():console.warn("onIntersectViewportCenter not implemented")}}},$=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"volume-name"},[t.image?n("Asset",{staticClass:"image",attrs:{identifier:t.image,"aria-hidden":"true"}}):t._e(),n("h2",{staticClass:"name"},[t._v(" "+t._s(t.name)+" ")]),t.content?n("ContentNode",{attrs:{content:t.content}}):t._e()],1)},q=[],B={name:"VolumeName",components:{ContentNode:v["a"],Asset:m["a"]},props:{image:{type:String,required:!1},content:{type:Array,required:!1},name:{type:String,required:!1}}},R=B,z=(n("c802"),Object(g["a"])(R,$,q,!1,null,"14577284",null)),L=z.exports,D=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"tile-group",class:t.countClass},t._l(t.tiles,(function(e){return n("Tile",t._b({key:e.title},"Tile",t.propsFor(e),!1))})),1)},G=[],P=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"tile"},[t.identifier?n("div",{staticClass:"icon"},[n(t.iconComponent,{tag:"component"})],1):t._e(),n("div",{staticClass:"title"},[t._v(t._s(t.title))]),n("ContentNode",{attrs:{content:t.content}}),t.action?n("DestinationDataProvider",{attrs:{destination:t.action},scopedSlots:t._u([{key:"default",fn:function(e){var s=e.url,a=e.title;return n("Reference",{staticClass:"link",attrs:{url:s}},[t._v(" "+t._s(a)+" "),n("InlineChevronRightIcon",{staticClass:"link-icon icon-inline"})],1)}}],null,!1,3874201962)}):t._e()],1)},F=[],H=n("3b96"),K=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("SVGIcon",{staticClass:"document-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M11.2,5.3,8,2l-.1-.1H2.8V12.1h8.5V6.3l-.1-1ZM8,3.2l2,2.1H8Zm2.4,8H3.6V2.8H7V6.3h3.4Z"}})])},U=[],Z={name:"DocumentIcon",components:{SVGIcon:b["a"]}},J=Z,Q=(n("77e2"),Object(g["a"])(J,K,U,!1,null,"56114692",null)),W=Q.exports,X=n("de60"),Y=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("SVGIcon",{staticClass:"forum-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M13 1v9h-7l-1.5 3-1.5-3h-2v-9zM12 2h-10v7h1.616l0.884 1.763 0.88-1.763h6.62z"}}),n("path",{attrs:{d:"M3 4h8.001v1h-8.001v-1z"}}),n("path",{attrs:{d:"M3 6h8.001v1h-8.001v-1z"}})])},tt=[],et={name:"ForumIcon",components:{SVGIcon:b["a"]}},nt=et,st=Object(g["a"])(nt,Y,tt,!1,null,null,null),at=st.exports,it=n("c4dd"),ot=n("86d8"),rt=n("34b0"),ct=n("c7ea");const lt={documentation:"documentation",downloads:"downloads",featured:"featured",forums:"forums",sampleCode:"sampleCode",videos:"videos"};var ut,dt,pt={name:"Tile",constants:{Identifier:lt},components:{DestinationDataProvider:ct["a"],InlineChevronRightIcon:rt["a"],ContentNode:v["a"],CurlyBracketsIcon:H["a"],DocumentIcon:W,DownloadIcon:X["a"],ForumIcon:at,PlayIcon:it["a"],Reference:ot["a"]},props:{action:{type:Object,required:!1},content:{type:Array,required:!0},identifier:{type:String,required:!1},title:{type:String,require:!0}},computed:{iconComponent:({identifier:t})=>({[lt.documentation]:W,[lt.downloads]:X["a"],[lt.forums]:at,[lt.sampleCode]:H["a"],[lt.videos]:it["a"]}[t])}},mt=pt,ht=(n("0175"),Object(g["a"])(mt,P,F,!1,null,"86db603a",null)),vt=ht.exports,ft={name:"TileGroup",components:{Tile:vt},props:{tiles:{type:Array,required:!0}},computed:{countClass:({tiles:t})=>"count-"+t.length},methods:{propsFor:({action:t,content:e,identifier:n,title:s})=>({action:t,content:e,identifier:n,title:s})}},yt=ft,bt=(n("f0ca"),Object(g["a"])(yt,D,G,!1,null,"015f9f13",null)),Ct=bt.exports,_t={name:"Resources",mixins:[M],inject:{store:{default:()=>({setActiveSidebarLink(){},setActiveVolume(){}})}},components:{VolumeName:L,TileGroup:Ct},computed:{intersectionRootMargin:()=>E.topOneThird},props:{content:{type:Array,required:!1},tiles:{type:Array,required:!0}},methods:{onIntersectViewport(){this.store.setActiveSidebarLink("Resources"),this.store.setActiveVolume(null)}}},gt=_t,Vt=(n("5668"),Object(g["a"])(gt,O,j,!1,null,"49ba6f62",null)),St=Vt.exports,At=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("nav",{staticClass:"tutorials-navigation"},[n("TutorialsNavigationList",t._l(t.sections,(function(e,s){return n("li",{key:e.name+"_"+s,class:t.sectionClasses(e)},[t.isVolume(e)?n(t.componentForVolume(e),t._b({tag:"component",on:{"select-menu":t.onSelectMenu,"deselect-menu":t.onDeselectMenu}},"component",t.propsForVolume(e),!1),t._l(e.chapters,(function(e){return n("li",{key:e.name},[n("TutorialsNavigationLink",[t._v(" "+t._s(e.name)+" ")])],1)})),0):t.isResources(e)?n("TutorialsNavigationLink",[t._v(" Resources ")]):t._e()],1)})),0)],1)},Tt=[],wt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("router-link",{staticClass:"tutorials-navigation-link",class:{active:t.active},attrs:{to:t.fragment},nativeOn:{click:function(e){return t.handleFocus.apply(null,arguments)}}},[t._t("default")],2)},kt=[],It=n("002d"),xt=n("8a61"),Ot={name:"TutorialsNavigationLink",mixins:[xt["a"]],inject:{store:{default:()=>({state:{}})}},data(){return{state:this.store.state}},computed:{active:({state:{activeTutorialLink:t},text:e})=>e===t,fragment:({text:t,$route:e})=>({hash:Object(It["a"])(t),query:e.query}),text:({$slots:{default:[{text:t}]}})=>t.trim()},methods:{async handleFocus(){const{hash:t}=this.fragment,e=document.getElementById(t);e&&(e.focus(),await this.scrollToElement("#"+t))}}},jt=Ot,Nt=(n("6962"),Object(g["a"])(jt,wt,kt,!1,null,"6bb99205",null)),Et=Nt.exports,Mt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("ol",{staticClass:"tutorials-navigation-list",attrs:{role:"list"}},[t._t("default")],2)},$t=[],qt={name:"TutorialsNavigationList"},Bt=qt,Rt=(n("202a"),Object(g["a"])(Bt,Mt,$t,!1,null,"6f2800d1",null)),zt=Rt.exports,Lt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"tutorials-navigation-menu",class:{collapsed:t.collapsed}},[n("button",{staticClass:"toggle",attrs:{"aria-expanded":t.collapsed?"false":"true",type:"button"},on:{click:function(e){return e.stopPropagation(),t.onClick.apply(null,arguments)}}},[n("span",{staticClass:"text"},[t._v(t._s(t.title))]),n("InlineCloseIcon",{staticClass:"toggle-icon icon-inline"})],1),n("transition-expand",[t.collapsed?t._e():n("div",{staticClass:"tutorials-navigation-menu-content"},[n("TutorialsNavigationList",{attrs:{"aria-label":"Chapters"}},[t._t("default")],2)],1)])],1)},Dt=[],Gt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("SVGIcon",{staticClass:"inline-close-icon",attrs:{viewBox:"0 0 14 14"}},[n("path",{attrs:{d:"M11.91 1l1.090 1.090-4.917 4.915 4.906 4.905-1.090 1.090-4.906-4.905-4.892 4.894-1.090-1.090 4.892-4.894-4.903-4.904 1.090-1.090 4.903 4.904z"}})])},Pt=[],Ft={name:"InlineCloseIcon",components:{SVGIcon:b["a"]}},Ht=Ft,Kt=Object(g["a"])(Ht,Gt,Pt,!1,null,null,null),Ut=Kt.exports,Zt={name:"TransitionExpand",functional:!0,render(t,e){const n={props:{name:"expand"},on:{afterEnter(t){t.style.height="auto"},enter(t){const{width:e}=getComputedStyle(t);t.style.width=e,t.style.position="absolute",t.style.visibility="hidden",t.style.height="auto";const{height:n}=getComputedStyle(t);t.style.width=null,t.style.position=null,t.style.visibility=null,t.style.height=0,getComputedStyle(t).height,requestAnimationFrame(()=>{t.style.height=n})},leave(t){const{height:e}=getComputedStyle(t);t.style.height=e,getComputedStyle(t).height,requestAnimationFrame(()=>{t.style.height=0})}}};return t("transition",n,e.children)}},Jt=Zt,Qt=(n("032c"),Object(g["a"])(Jt,ut,dt,!1,null,null,null)),Wt=Qt.exports,Xt={name:"TutorialsNavigationMenu",components:{InlineCloseIcon:Ut,TransitionExpand:Wt,TutorialsNavigationList:zt},props:{collapsed:{type:Boolean,default:!0},title:{type:String,required:!0}},methods:{onClick(){this.collapsed?this.$emit("select-menu",this.title):this.$emit("deselect-menu")}}},Yt=Xt,te=(n("d647"),Object(g["a"])(Yt,Lt,Dt,!1,null,"6513d652",null)),ee=te.exports;const ne={resources:"resources",volume:"volume"};var se={name:"TutorialsNavigation",components:{TutorialsNavigationLink:Et,TutorialsNavigationList:zt,TutorialsNavigationMenu:ee},constants:{SectionKind:ne},inject:{store:{default:()=>({setActiveVolume(){}})}},data(){return{state:this.store.state}},props:{sections:{type:Array,required:!0}},computed:{activeVolume:({state:t})=>t.activeVolume},methods:{sectionClasses(t){return{volume:this.isVolume(t),"volume--named":this.isNamedVolume(t),resource:this.isResources(t)}},componentForVolume:({name:t})=>t?ee:zt,isResources:({kind:t})=>t===ne.resources,isVolume:({kind:t})=>t===ne.volume,activateFirstNamedVolume(){const{isNamedVolume:t,sections:e}=this,n=e.find(t);n&&this.store.setActiveVolume(n.name)},isNamedVolume(t){return this.isVolume(t)&&t.name},onDeselectMenu(){this.store.setActiveVolume(null)},onSelectMenu(t){this.store.setActiveVolume(t)},propsForVolume({name:t}){const{activeVolume:e}=this;return t?{collapsed:t!==e,title:t}:{"aria-label":"Chapters"}}},created(){this.activateFirstNamedVolume()}},ae=se,ie=(n("095b"),Object(g["a"])(ae,At,Tt,!1,null,"0cbd8adb",null)),oe=ie.exports,re=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"volume"},[t.name?n("VolumeName",t._b({},"VolumeName",{name:t.name,image:t.image,content:t.content},!1)):t._e(),t._l(t.chapters,(function(e,s){return n("Chapter",{key:e.name,staticClass:"tile",attrs:{content:e.content,image:e.image,name:e.name,number:s+1,topics:t.lookupTopics(e.tutorials),volumeHasName:!!t.name}})}))],2)},ce=[],le=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"chapter",attrs:{id:t.anchor,tabindex:"-1"}},[n("div",{staticClass:"info"},[n("Asset",{attrs:{identifier:t.image,"aria-hidden":"true"}}),n("div",{staticClass:"intro"},[n(t.volumeHasName?"h3":"h2",{tag:"component",staticClass:"name",attrs:{"aria-label":t.name+" - Chapter "+t.number}},[n("span",{staticClass:"eyebrow",attrs:{"aria-hidden":"true"}},[t._v("Chapter "+t._s(t.number))]),n("span",{staticClass:"name-text",attrs:{"aria-hidden":"true"}},[t._v(t._s(t.name))])]),t.content?n("ContentNode",{attrs:{content:t.content}}):t._e()],1)],1),n("TopicList",{attrs:{topics:t.topics}})],1)},ue=[],de=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("ol",{staticClass:"topic-list"},t._l(t.topics,(function(e){return n("li",{key:e.url,staticClass:"topic",class:t.kindClassFor(e)},[n("div",{staticClass:"topic-icon"},[n(t.iconComponent(e),{tag:"component"})],1),n("router-link",{staticClass:"container",attrs:{to:t.buildUrl(e.url,t.$route.query),"aria-label":t.ariaLabelFor(e)}},[n("div",{staticClass:"link"},[t._v(t._s(e.title))]),e.estimatedTime?n("div",{staticClass:"time"},[n("TimerIcon"),n("span",{staticClass:"time-label"},[t._v(t._s(e.estimatedTime))])],1):t._e()])],1)})),0)},pe=[],me=n("a9f1"),he=n("8d2d"),ve=n("d26a");const fe={article:"article",tutorial:"project"},ye={article:"article",tutorial:"tutorial"},be={[fe.article]:"Article",[fe.tutorial]:"Tutorial"};var Ce={name:"ChapterTopicList",components:{TimerIcon:S},constants:{TopicKind:fe,TopicKindClass:ye,TopicKindIconLabel:be},props:{topics:{type:Array,required:!0}},methods:{buildUrl:ve["b"],iconComponent:({kind:t})=>({[fe.article]:me["a"],[fe.tutorial]:he["a"]}[t]),kindClassFor:({kind:t})=>({[fe.article]:ye.article,[fe.tutorial]:ye.tutorial}[t]),formatTime:t=>t.replace("min"," minutes").replace("hrs"," hours"),ariaLabelFor({title:t,estimatedTime:e,kind:n}){const s=[t,be[n]];return e&&s.push(this.formatTime(e)+" Estimated Time"),s.join(" - ")}}},_e=Ce,ge=(n("be3b"),Object(g["a"])(_e,de,pe,!1,null,"9a8371c6",null)),Ve=ge.exports,Se={name:"Chapter",mixins:[M],inject:{store:{default:()=>({setActiveSidebarLink(){},setActiveVolume(){}})}},components:{Asset:m["a"],ContentNode:v["a"],TopicList:Ve},props:{content:{type:Array,required:!1},image:{type:String,required:!0},name:{type:String,required:!0},number:{type:Number,required:!0},topics:{type:Array,required:!0},volumeHasName:{type:Boolean,default:!1}},computed:{anchor:({name:t})=>Object(It["a"])(t),intersectionRootMargin:()=>E.topOneThird},methods:{onIntersectViewport(){this.store.setActiveSidebarLink(this.name),this.volumeHasName||this.store.setActiveVolume(null)}}},Ae=Se,Te=(n("f31c"),Object(g["a"])(Ae,le,ue,!1,null,"1d13969f",null)),we=Te.exports,ke={name:"Volume",mixins:[M],components:{VolumeName:L,Chapter:we},computed:{intersectionRootMargin:()=>E.topOneThird},inject:{references:{default:()=>({})},store:{default:()=>({setActiveVolume(){}})}},props:{chapters:{type:Array,required:!0},content:{type:Array,required:!1},image:{type:String,required:!1},name:{type:String,required:!1}},methods:{lookupTopics(t){return t.reduce((t,e)=>t.concat(this.references[e]||[]),[])},onIntersectViewport(){this.name&&this.store.setActiveVolume(this.name)}}},Ie=ke,xe=(n("ee29"),Object(g["a"])(Ie,re,ce,!1,null,"2129f58c",null)),Oe=xe.exports;const je={resources:"resources",volume:"volume"};var Ne={name:"LearningPath",components:{Resources:St,TutorialsNavigation:oe,Volume:Oe},constants:{SectionKind:je},inject:{isTargetIDE:{default:!1}},props:{sections:{type:Array,required:!0,validator:t=>t.every(t=>Object.prototype.hasOwnProperty.call(je,t.kind))}},computed:{classes:({isTargetIDE:t})=>({ide:t}),partitionedSections:({sections:t})=>t.reduce(([t,e],n)=>n.kind===je.volume?[t.concat(n),e]:[t,e.concat(n)],[[],[]]),volumes:({partitionedSections:t})=>t[0],otherSections:({partitionedSections:t})=>t[1]},methods:{componentFor:({kind:t})=>({[je.resources]:St,[je.volume]:Oe}[t]),propsFor:({chapters:t,content:e,image:n,kind:s,name:a,tiles:i})=>({[je.resources]:{content:e,tiles:i},[je.volume]:{chapters:t,content:e,image:n,name:a}}[s])}},Ee=Ne,Me=(n("e929"),Object(g["a"])(Ee,I,x,!1,null,"48bfa85c",null)),$e=Me.exports,qe=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("NavBase",[n("NavTitleContainer",{attrs:{to:t.buildUrl(t.$route.path,t.$route.query)}},[n("template",{slot:"default"},[t._t("default")],2),n("template",{slot:"subhead"},[t._v("Tutorials")])],2),n("template",{slot:"menu-items"},[n("li",[n("TutorialsNavigation",{attrs:{sections:t.sections}})],1)])],2)},Be=[],Re=n("cbcf"),ze=n("653a");const Le={resources:"resources",volume:"volume"};var De={name:"Nav",constants:{SectionKind:Le},components:{NavTitleContainer:ze["a"],TutorialsNavigation:oe,NavBase:Re["a"]},props:{sections:{type:Array,require:!0}},methods:{buildUrl:ve["b"]}},Ge=De,Pe=(n("a8f9"),Object(g["a"])(Ge,qe,Be,!1,null,"07700f98",null)),Fe=Pe.exports;const He={hero:"hero",resources:"resources",volume:"volume"};var Ke={name:"TutorialsOverview",components:{Hero:k,LearningPath:$e,Nav:Fe},mixins:[u["a"]],constants:{SectionKind:He},inject:{isTargetIDE:{default:!1}},props:{metadata:{type:Object,default:()=>({})},references:{type:Object,default:()=>({})},sections:{type:Array,default:()=>[],validator:t=>t.every(t=>Object.prototype.hasOwnProperty.call(He,t.kind))}},computed:{pageTitle:({title:t})=>[t,"Tutorials"].join(" "),partitionedSections:({sections:t})=>t.reduce(([t,e],n)=>n.kind===He.hero?[t.concat(n),e]:[t,e.concat(n)],[[],[]]),heroSections:({partitionedSections:t})=>t[0],otherSections:({partitionedSections:t})=>t[1],heroSection:({heroSections:t})=>t[0],store:()=>l,title:({metadata:{category:t=""}})=>t},provide(){return{references:this.references,store:this.store}},created(){this.store.reset()}},Ue=Ke,Ze=(n("c8fd"),Object(g["a"])(Ue,r,c,!1,null,"0c0b1eea",null)),Je=Ze.exports,Qe=n("146e"),We={name:"TutorialsOverview",components:{Overview:Je},mixins:[o["a"],Qe["a"]],data(){return{topicData:null}},computed:{overviewProps:({topicData:{metadata:t,references:e,sections:n}})=>({metadata:t,references:e,sections:n}),topicKey:({$route:t,topicData:e})=>[t.path,e.identifier.interfaceLanguage].join()},beforeRouteEnter(t,e,n){Object(i["b"])(t,e,n).then(t=>n(e=>{e.topicData=t})).catch(n)},beforeRouteUpdate(t,e,n){Object(i["c"])(t,e)?Object(i["b"])(t,e,n).then(t=>{this.topicData=t,n()}).catch(n):n()},watch:{topicData(){this.$nextTick(()=>{this.newContentMounted()})}}},Xe=We,Ye=Object(g["a"])(Xe,s,a,!1,null,null,null);e["default"]=Ye.exports},f084:function(t,e,n){},f0ca:function(t,e,n){"use strict";n("8f86")},f31c:function(t,e,n){"use strict";n("9f56")},f974:function(t,e,n){"use strict";n("dcb9")},fb27:function(t,e,n){},fb73:function(t,e,n){}}]); \ No newline at end of file diff --git a/docs/metadata.json b/docs/metadata.json new file mode 100644 index 0000000..59517ce --- /dev/null +++ b/docs/metadata.json @@ -0,0 +1 @@ +{"bundleDisplayName":"SimpleKeychain","bundleIdentifier":"com.auth0.SimpleKeychain","schemaVersion":{"major":0,"minor":1,"patch":0}} \ No newline at end of file diff --git a/docs/theme-settings.json b/docs/theme-settings.json new file mode 100644 index 0000000..c26c16f --- /dev/null +++ b/docs/theme-settings.json @@ -0,0 +1,59 @@ +{ + "meta": {}, + "theme": { + "colors": { + "text": "", + "text-background": "", + "grid": "", + "article-background": "", + "generic-modal-background": "", + "secondary-label": "", + "header-text": "", + "not-found": { + "input-border": "" + }, + "runtime-preview": { + "text": "" + }, + "tabnav-item": { + "border-color": "" + }, + "svg-icon": { + "fill-light": "", + "fill-dark": "" + }, + "loading-placeholder": { + "background": "" + }, + "button": { + "text": "", + "light": { + "background": "", + "backgroundHover": "", + "backgroundActive": "" + }, + "dark": { + "background": "", + "backgroundHover": "", + "backgroundActive": "" + } + }, + "link": null + }, + "style": { + "button": { + "borderRadius": null + } + }, + "typography": { + "html-font": "" + } + }, + "features": { + "docs": { + "summary": { + "hide": false + } + } + } +} diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 3bb7615..d5b6d3c 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -1,12 +1,11 @@ default_platform :ios platform :ios do - before_all do setup_circle_ci end - desc "Runs all the tests" + desc 'Runs all the tests' lane :test do |options| scheme = options[:scheme] device = options[:device] @@ -19,20 +18,50 @@ platform :ios do ) end - desc "Cocoapods library lint" + desc 'Cocoapods library lint' lane :pod_lint do pod_lib_lint(verbose: false, allow_warnings: true) end - desc "Runs all the tests in a CI environment" + desc 'Runs all the tests in a CI environment' lane :ci do # TODO: Run rest of platforms test end - desc "Tags the release and pushes the Podspec to CocoaPods" + desc 'Tags the release and pushes the Podspec to CocoaPods' lane :release do perform_release target: 'SimpleKeychain-iOS' publish_release repository: 'SimpleKeychain' end + + desc 'Generate API documentation' + lane :build_docs do + target = 'SimpleKeychain' + docs_dir = 'docs' + docs_archive = 'docs.archive' + redirect_file = <<~HEREDOC + + + + + +

+ Redirect +

+ + + HEREDOC + # Work from project root (defaults to /fastlane) + Dir.chdir('..') do + # Clear existing docs + FileUtils.rm_r(docs_dir) + # Generate the .doccarchive + sh "xcodebuild docbuild -scheme #{target}-iOS -configuration Release -destination 'generic/platform=iOS' -derivedDataPath #{docs_archive}" + # Generate the static site + sh "$(xcrun --find docc) process-archive transform-for-static-hosting #{docs_archive}/Build/Products/Release-iphoneos/#{target}.doccarchive --hosting-base-path #{target} --output-path #{docs_dir}" + # Write redirect file + File.write("#{docs_dir}/index.html", redirect_file) + end + end end diff --git a/fastlane/README.md b/fastlane/README.md index 215fe01..0786b3b 100644 --- a/fastlane/README.md +++ b/fastlane/README.md @@ -1,44 +1,64 @@ fastlane documentation -================ +---- + # Installation Make sure you have the latest version of the Xcode command line tools installed: -``` +```sh xcode-select --install ``` -Install _fastlane_ using -``` -[sudo] gem install fastlane -NV -``` -or alternatively using `brew install fastlane` +For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) # Available Actions + ## iOS + ### ios test + +```sh +[bundle exec] fastlane ios test ``` -fastlane ios test -``` + Runs all the tests + ### ios pod_lint + +```sh +[bundle exec] fastlane ios pod_lint ``` -fastlane ios pod_lint -``` + Cocoapods library lint + ### ios ci + +```sh +[bundle exec] fastlane ios ci ``` -fastlane ios ci -``` + Runs all the tests in a CI environment + ### ios release + +```sh +[bundle exec] fastlane ios release ``` -fastlane ios release -``` + Tags the release and pushes the Podspec to CocoaPods +### ios build_docs + +```sh +[bundle exec] fastlane ios build_docs +``` + +Generate API documentation + ---- This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. -More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). -The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). + +More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). + +The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/tvOSTestHost/AppDelegate.swift b/tvOSTestHost/AppDelegate.swift index 85a170c..ce564c9 100644 --- a/tvOSTestHost/AppDelegate.swift +++ b/tvOSTestHost/AppDelegate.swift @@ -1,11 +1,3 @@ -// -// AppDelegate.swift -// tvOSTestHost -// -// Created by Rita Zerrizuela on 20/02/2020. -// Copyright © 2020 Auth0. All rights reserved. -// - import UIKit @UIApplicationMain diff --git a/tvOSTestHost/ViewController.swift b/tvOSTestHost/ViewController.swift index 3e37153..ded49dd 100644 --- a/tvOSTestHost/ViewController.swift +++ b/tvOSTestHost/ViewController.swift @@ -1,11 +1,3 @@ -// -// ViewController.swift -// tvOSTestHost -// -// Created by Rita Zerrizuela on 20/02/2020. -// Copyright © 2020 Auth0. All rights reserved. -// - import UIKit class ViewController: UIViewController {