mn-docs-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +4 -0
- package/.vscode/extensions.json +4 -0
- package/.vscode/launch.json +11 -0
- package/README.md +99 -0
- package/astro.config.mjs +126 -0
- package/package.json +30 -0
- package/pnpm-workspace.yaml +4 -0
- package/public/favicon.svg +1 -0
- package/scripts/mcp/build-index.mjs +9 -0
- package/scripts/mcp/cli.mjs +61 -0
- package/scripts/mcp/lib.mjs +303 -0
- package/scripts/mcp/server-http.mjs +74 -0
- package/scripts/mcp/server.mjs +91 -0
- package/src/assets/houston.webp +0 -0
- package/src/client/jsb-api-footer.ts +242 -0
- package/src/components/Footer.astro +57 -0
- package/src/components/Search.astro +330 -0
- package/src/content/docs/guides/contributing.md +82 -0
- package/src/content/docs/guides/cookbook/addon-settings.md +53 -0
- package/src/content/docs/guides/cookbook/append-selection-as-comment.md +46 -0
- package/src/content/docs/guides/cookbook/batch-rename-notes.md +53 -0
- package/src/content/docs/guides/cookbook/embed-webview-panel.md +158 -0
- package/src/content/docs/guides/cookbook/export-notebook.md +48 -0
- package/src/content/docs/guides/cookbook/focus-note-in-mindmap.md +34 -0
- package/src/content/docs/guides/cookbook/network-api-call.md +135 -0
- package/src/content/docs/guides/cookbook/webview-bidirectional-js.md +112 -0
- package/src/content/docs/guides/getting-started.md +88 -0
- package/src/content/docs/guides/lifecycle-and-window.md +76 -0
- package/src/content/docs/guides/mindmap-and-selection.md +76 -0
- package/src/content/docs/guides/native-ui.md +136 -0
- package/src/content/docs/guides/network-requests.md +309 -0
- package/src/content/docs/guides/notes-and-database.md +99 -0
- package/src/content/docs/guides/shortcut-keys.md +105 -0
- package/src/content/docs/guides/storage-and-files.md +91 -0
- package/src/content/docs/guides/toolbar-and-commands.md +64 -0
- package/src/content/docs/index.mdx +44 -0
- package/src/content/docs/reference/black-box.md +19 -0
- package/src/content/docs/reference/foundation/ns-array.md +699 -0
- package/src/content/docs/reference/foundation/ns-attributed-string.md +379 -0
- package/src/content/docs/reference/foundation/ns-character-set.md +436 -0
- package/src/content/docs/reference/foundation/ns-counted-set.md +78 -0
- package/src/content/docs/reference/foundation/ns-data.md +183 -0
- package/src/content/docs/reference/foundation/ns-date-components.md +24 -0
- package/src/content/docs/reference/foundation/ns-date-formatter.md +70 -0
- package/src/content/docs/reference/foundation/ns-date.md +236 -0
- package/src/content/docs/reference/foundation/ns-decimal-number.md +437 -0
- package/src/content/docs/reference/foundation/ns-dictionary.md +376 -0
- package/src/content/docs/reference/foundation/ns-enumerator.md +36 -0
- package/src/content/docs/reference/foundation/ns-error.md +75 -0
- package/src/content/docs/reference/foundation/ns-file-handle.md +445 -0
- package/src/content/docs/reference/foundation/ns-file-manager.md +275 -0
- package/src/content/docs/reference/foundation/ns-formatter.md +131 -0
- package/src/content/docs/reference/foundation/ns-hash-table.md +304 -0
- package/src/content/docs/reference/foundation/ns-http-url-response.md +73 -0
- package/src/content/docs/reference/foundation/ns-index-path.md +185 -0
- package/src/content/docs/reference/foundation/ns-index-set.md +527 -0
- package/src/content/docs/reference/foundation/ns-json-serialization.md +24 -0
- package/src/content/docs/reference/foundation/ns-keyed-archiver.md +364 -0
- package/src/content/docs/reference/foundation/ns-keyed-unarchiver.md +324 -0
- package/src/content/docs/reference/foundation/ns-locale.md +82 -0
- package/src/content/docs/reference/foundation/ns-map-table.md +216 -0
- package/src/content/docs/reference/foundation/ns-mutable-array.md +452 -0
- package/src/content/docs/reference/foundation/ns-mutable-attributed-string.md +336 -0
- package/src/content/docs/reference/foundation/ns-mutable-character-set.md +132 -0
- package/src/content/docs/reference/foundation/ns-mutable-data.md +206 -0
- package/src/content/docs/reference/foundation/ns-mutable-dictionary.md +176 -0
- package/src/content/docs/reference/foundation/ns-mutable-index-set.md +155 -0
- package/src/content/docs/reference/foundation/ns-mutable-ordered-set.md +465 -0
- package/src/content/docs/reference/foundation/ns-mutable-set.md +189 -0
- package/src/content/docs/reference/foundation/ns-mutable-string.md +190 -0
- package/src/content/docs/reference/foundation/ns-mutable-url-request.md +26 -0
- package/src/content/docs/reference/foundation/ns-notification-center.md +30 -0
- package/src/content/docs/reference/foundation/ns-notification.md +73 -0
- package/src/content/docs/reference/foundation/ns-null.md +24 -0
- package/src/content/docs/reference/foundation/ns-number-formatter.md +147 -0
- package/src/content/docs/reference/foundation/ns-number.md +393 -0
- package/src/content/docs/reference/foundation/ns-operation-queue.md +227 -0
- package/src/content/docs/reference/foundation/ns-operation.md +248 -0
- package/src/content/docs/reference/foundation/ns-ordered-set.md +706 -0
- package/src/content/docs/reference/foundation/ns-pointer-array.md +192 -0
- package/src/content/docs/reference/foundation/ns-predicate.md +199 -0
- package/src/content/docs/reference/foundation/ns-proxy.md +178 -0
- package/src/content/docs/reference/foundation/ns-scanner.md +448 -0
- package/src/content/docs/reference/foundation/ns-set.md +586 -0
- package/src/content/docs/reference/foundation/ns-simple-c-string.md +20 -0
- package/src/content/docs/reference/foundation/ns-time-zone.md +86 -0
- package/src/content/docs/reference/foundation/ns-timer.md +24 -0
- package/src/content/docs/reference/foundation/ns-url-components.md +80 -0
- package/src/content/docs/reference/foundation/ns-url-connection.md +169 -0
- package/src/content/docs/reference/foundation/ns-url-request.md +224 -0
- package/src/content/docs/reference/foundation/ns-url-response.md +97 -0
- package/src/content/docs/reference/foundation/ns-url.md +31 -0
- package/src/content/docs/reference/foundation/ns-user-defaults.md +302 -0
- package/src/content/docs/reference/foundation/ns-uuid.md +52 -0
- package/src/content/docs/reference/foundation/ns-value.md +194 -0
- package/src/content/docs/reference/global/application.md +301 -0
- package/src/content/docs/reference/global/builtin-commands.md +294 -0
- package/src/content/docs/reference/global/database.md +395 -0
- package/src/content/docs/reference/global/global-variables.md +32 -0
- package/src/content/docs/reference/global/jsb.md +89 -0
- package/src/content/docs/reference/global/note.md +64 -0
- package/src/content/docs/reference/global/popup-menu-item.md +18 -0
- package/src/content/docs/reference/global/popup-menu.md +38 -0
- package/src/content/docs/reference/global/search-manager.md +51 -0
- package/src/content/docs/reference/global/self.md +28 -0
- package/src/content/docs/reference/js-runtime.md +28 -0
- package/src/content/docs/reference/marginnote/document-controller.md +45 -0
- package/src/content/docs/reference/marginnote/jsextension.md +119 -0
- package/src/content/docs/reference/marginnote/mb-book-note.md +192 -0
- package/src/content/docs/reference/marginnote/mb-book.md +35 -0
- package/src/content/docs/reference/marginnote/mb-model-tool.md +66 -0
- package/src/content/docs/reference/marginnote/mb-topic.md +36 -0
- package/src/content/docs/reference/marginnote/mindmap-node.md +27 -0
- package/src/content/docs/reference/marginnote/mindmap-view.md +24 -0
- package/src/content/docs/reference/marginnote/note-comment.md +29 -0
- package/src/content/docs/reference/marginnote/notebook-controller.md +36 -0
- package/src/content/docs/reference/marginnote/outline-view.md +23 -0
- package/src/content/docs/reference/marginnote/reader-controller.md +26 -0
- package/src/content/docs/reference/marginnote/study-controller.md +100 -0
- package/src/content/docs/reference/quartzcore/caanimation-group.md +44 -0
- package/src/content/docs/reference/quartzcore/caanimation.md +23 -0
- package/src/content/docs/reference/quartzcore/cabasic-animation.md +19 -0
- package/src/content/docs/reference/quartzcore/cagradient-layer.md +27 -0
- package/src/content/docs/reference/quartzcore/cakeyframe-animation.md +19 -0
- package/src/content/docs/reference/quartzcore/calayer.md +135 -0
- package/src/content/docs/reference/quartzcore/camedia-timing-function.md +25 -0
- package/src/content/docs/reference/quartzcore/caproperty-animation.md +46 -0
- package/src/content/docs/reference/quartzcore/careplicator-layer.md +27 -0
- package/src/content/docs/reference/quartzcore/cascroll-layer.md +21 -0
- package/src/content/docs/reference/quartzcore/cashape-layer.md +34 -0
- package/src/content/docs/reference/quartzcore/catext-layer.md +28 -0
- package/src/content/docs/reference/quartzcore/catiled-layer.md +26 -0
- package/src/content/docs/reference/quartzcore/catransaction.md +46 -0
- package/src/content/docs/reference/quartzcore/catransform-layer.md +18 -0
- package/src/content/docs/reference/quartzcore/catransition.md +44 -0
- package/src/content/docs/reference/quartzcore/cavalue-function.md +22 -0
- package/src/content/docs/reference/uikit/ns-mutable-paragraph-style.md +20 -0
- package/src/content/docs/reference/uikit/ns-paragraph-style.md +20 -0
- package/src/content/docs/reference/uikit/ns-text-storage.md +20 -0
- package/src/content/docs/reference/uikit/uiactivity-indicator-view.md +20 -0
- package/src/content/docs/reference/uikit/uialertview.md +25 -0
- package/src/content/docs/reference/uikit/uiapplication.md +128 -0
- package/src/content/docs/reference/uikit/uibar-button-item.md +20 -0
- package/src/content/docs/reference/uikit/uibar-item.md +20 -0
- package/src/content/docs/reference/uikit/uibezier-path.md +143 -0
- package/src/content/docs/reference/uikit/uibutton.md +27 -0
- package/src/content/docs/reference/uikit/uicollection-view-cell.md +24 -0
- package/src/content/docs/reference/uikit/uicollection-view-controller.md +32 -0
- package/src/content/docs/reference/uikit/uicollection-view-layout-attributes.md +43 -0
- package/src/content/docs/reference/uikit/uicollection-view-layout.md +60 -0
- package/src/content/docs/reference/uikit/uicollection-view.md +83 -0
- package/src/content/docs/reference/uikit/uicolor.md +23 -0
- package/src/content/docs/reference/uikit/uicontrol.md +20 -0
- package/src/content/docs/reference/uikit/uidate-picker.md +37 -0
- package/src/content/docs/reference/uikit/uidevice.md +83 -0
- package/src/content/docs/reference/uikit/uievent.md +36 -0
- package/src/content/docs/reference/uikit/uifont.md +39 -0
- package/src/content/docs/reference/uikit/uigesture-recognizer.md +152 -0
- package/src/content/docs/reference/uikit/uiimage-picker-controller.md +41 -0
- package/src/content/docs/reference/uikit/uiimage-view.md +38 -0
- package/src/content/docs/reference/uikit/uiimage.md +58 -0
- package/src/content/docs/reference/uikit/uikey-command.md +31 -0
- package/src/content/docs/reference/uikit/uilabel.md +27 -0
- package/src/content/docs/reference/uikit/uilocal-notification.md +28 -0
- package/src/content/docs/reference/uikit/uilong-press-gesture-recognizer.md +25 -0
- package/src/content/docs/reference/uikit/uinavigation-bar.md +52 -0
- package/src/content/docs/reference/uikit/uinavigation-controller.md +46 -0
- package/src/content/docs/reference/uikit/uinavigation-item.md +42 -0
- package/src/content/docs/reference/uikit/uipage-control.md +35 -0
- package/src/content/docs/reference/uikit/uipage-view-controller.md +37 -0
- package/src/content/docs/reference/uikit/uipan-gesture-recognizer.md +32 -0
- package/src/content/docs/reference/uikit/uipasteboard.md +24 -0
- package/src/content/docs/reference/uikit/uipicker-view.md +37 -0
- package/src/content/docs/reference/uikit/uipinch-gesture-recognizer.md +23 -0
- package/src/content/docs/reference/uikit/uipopover-controller.md +39 -0
- package/src/content/docs/reference/uikit/uiresponder.md +20 -0
- package/src/content/docs/reference/uikit/uirotation-gesture-recognizer.md +23 -0
- package/src/content/docs/reference/uikit/uiscreen-mode.md +17 -0
- package/src/content/docs/reference/uikit/uiscreen.md +65 -0
- package/src/content/docs/reference/uikit/uiscrollview.md +134 -0
- package/src/content/docs/reference/uikit/uisearch-bar.md +58 -0
- package/src/content/docs/reference/uikit/uisegmented-control.md +64 -0
- package/src/content/docs/reference/uikit/uislider.md +50 -0
- package/src/content/docs/reference/uikit/uiswipe-gesture-recognizer.md +23 -0
- package/src/content/docs/reference/uikit/uiswitch.md +22 -0
- package/src/content/docs/reference/uikit/uitab-bar-controller.md +39 -0
- package/src/content/docs/reference/uikit/uitab-bar-item.md +34 -0
- package/src/content/docs/reference/uikit/uitab-bar.md +44 -0
- package/src/content/docs/reference/uikit/uitable-view-cell.md +57 -0
- package/src/content/docs/reference/uikit/uitable-view-controller.md +30 -0
- package/src/content/docs/reference/uikit/uitable-view.md +100 -0
- package/src/content/docs/reference/uikit/uitap-gesture-recognizer.md +20 -0
- package/src/content/docs/reference/uikit/uitext-input-mode.md +47 -0
- package/src/content/docs/reference/uikit/uitext-position.md +44 -0
- package/src/content/docs/reference/uikit/uitext-range.md +42 -0
- package/src/content/docs/reference/uikit/uitext-view.md +46 -0
- package/src/content/docs/reference/uikit/uitextfield.md +32 -0
- package/src/content/docs/reference/uikit/uitoolbar.md +35 -0
- package/src/content/docs/reference/uikit/uitouch.md +39 -0
- package/src/content/docs/reference/uikit/uiview-controller.md +36 -0
- package/src/content/docs/reference/uikit/uiview.md +47 -0
- package/src/content/docs/reference/uikit/uiwebview.md +229 -0
- package/src/content/docs/reference/uikit/uiwindow.md +47 -0
- package/src/content/docs/reference/utility/menu-controller.md +27 -0
- package/src/content/docs/reference/utility/speech-manager.md +118 -0
- package/src/content/docs/reference/utility/sqlite-database.md +201 -0
- package/src/content/docs/reference/utility/sqlite-result-set.md +266 -0
- package/src/content/docs/reference/utility/sqlite-statement.md +44 -0
- package/src/content/docs/reference/utility/undo-manager.md +89 -0
- package/src/content/docs/reference/utility/zip-archive.md +29 -0
- package/src/content.config.ts +7 -0
- package/src/definitions/Foundation/JSBFoundation.h +9 -0
- package/src/definitions/Foundation/JSBFoundation.m +530 -0
- package/src/definitions/Foundation/JSBNSArray.h +81 -0
- package/src/definitions/Foundation/JSBNSAssertionHandler.h +23 -0
- package/src/definitions/Foundation/JSBNSAttributedString.h +42 -0
- package/src/definitions/Foundation/JSBNSBlockOperation.h +20 -0
- package/src/definitions/Foundation/JSBNSBundle.h +80 -0
- package/src/definitions/Foundation/JSBNSByteCountFormatter.h +28 -0
- package/src/definitions/Foundation/JSBNSCache.h +31 -0
- package/src/definitions/Foundation/JSBNSCachedURLResponse.h +22 -0
- package/src/definitions/Foundation/JSBNSCalendar.h +88 -0
- package/src/definitions/Foundation/JSBNSCharacterSet.h +50 -0
- package/src/definitions/Foundation/JSBNSCoder.h +88 -0
- package/src/definitions/Foundation/JSBNSComparisonPredicate.h +27 -0
- package/src/definitions/Foundation/JSBNSCompoundPredicate.h +23 -0
- package/src/definitions/Foundation/JSBNSCondition.h +22 -0
- package/src/definitions/Foundation/JSBNSConditionLock.h +26 -0
- package/src/definitions/Foundation/JSBNSConstantString.h +18 -0
- package/src/definitions/Foundation/JSBNSCountedSet.h +21 -0
- package/src/definitions/Foundation/JSBNSData.h +44 -0
- package/src/definitions/Foundation/JSBNSDataDetector.h +20 -0
- package/src/definitions/Foundation/JSBNSDate.h +37 -0
- package/src/definitions/Foundation/JSBNSDateComponents.h +56 -0
- package/src/definitions/Foundation/JSBNSDateFormatter.h +91 -0
- package/src/definitions/Foundation/JSBNSDecimalNumber.h +47 -0
- package/src/definitions/Foundation/JSBNSDecimalNumberHandler.h +23 -0
- package/src/definitions/Foundation/JSBNSDictionary.h +79 -0
- package/src/definitions/Foundation/JSBNSDirectoryEnumerator.h +25 -0
- package/src/definitions/Foundation/JSBNSEnumerator.h +18 -0
- package/src/definitions/Foundation/JSBNSError.h +28 -0
- package/src/definitions/Foundation/JSBNSException.h +30 -0
- package/src/definitions/Foundation/JSBNSExpression.h +48 -0
- package/src/definitions/Foundation/JSBNSFileCoordinator.h +29 -0
- package/src/definitions/Foundation/JSBNSFileHandle.h +51 -0
- package/src/definitions/Foundation/JSBNSFileManager.h +82 -0
- package/src/definitions/Foundation/JSBNSFileSecurity.h +32 -0
- package/src/definitions/Foundation/JSBNSFileVersion.h +35 -0
- package/src/definitions/Foundation/JSBNSFileWrapper.h +41 -0
- package/src/definitions/Foundation/JSBNSFormatter.h +23 -0
- package/src/definitions/Foundation/JSBNSHTTPCookie.h +34 -0
- package/src/definitions/Foundation/JSBNSHTTPCookieStorage.h +26 -0
- package/src/definitions/Foundation/JSBNSHTTPURLResponse.h +21 -0
- package/src/definitions/Foundation/JSBNSHashTable.h +38 -0
- package/src/definitions/Foundation/JSBNSIndexPath.h +34 -0
- package/src/definitions/Foundation/JSBNSIndexSet.h +47 -0
- package/src/definitions/Foundation/JSBNSInputStream.h +28 -0
- package/src/definitions/Foundation/JSBNSInvocation.h +32 -0
- package/src/definitions/Foundation/JSBNSInvocationOperation.h +20 -0
- package/src/definitions/Foundation/JSBNSJSONSerialization.h +19 -0
- package/src/definitions/Foundation/JSBNSKeyedArchiver.h +40 -0
- package/src/definitions/Foundation/JSBNSKeyedUnarchiver.h +38 -0
- package/src/definitions/Foundation/JSBNSLinguisticTagger.h +31 -0
- package/src/definitions/Foundation/JSBNSLocale.h +39 -0
- package/src/definitions/Foundation/JSBNSLock.h +20 -0
- package/src/definitions/Foundation/JSBNSMachPort.h +26 -0
- package/src/definitions/Foundation/JSBNSMapTable.h +34 -0
- package/src/definitions/Foundation/JSBNSMessagePort.h +15 -0
- package/src/definitions/Foundation/JSBNSMetadataItem.h +22 -0
- package/src/definitions/Foundation/JSBNSMetadataQuery.h +53 -0
- package/src/definitions/Foundation/JSBNSMetadataQueryAttributeValueTuple.h +21 -0
- package/src/definitions/Foundation/JSBNSMetadataQueryResultGroup.h +24 -0
- package/src/definitions/Foundation/JSBNSMethodSignature.h +24 -0
- package/src/definitions/Foundation/JSBNSMutableArray.h +51 -0
- package/src/definitions/Foundation/JSBNSMutableAttributedString.h +39 -0
- package/src/definitions/Foundation/JSBNSMutableCharacterSet.h +26 -0
- package/src/definitions/Foundation/JSBNSMutableData.h +29 -0
- package/src/definitions/Foundation/JSBNSMutableDictionary.h +29 -0
- package/src/definitions/Foundation/JSBNSMutableIndexSet.h +25 -0
- package/src/definitions/Foundation/JSBNSMutableOrderedSet.h +50 -0
- package/src/definitions/Foundation/JSBNSMutableSet.h +28 -0
- package/src/definitions/Foundation/JSBNSMutableString.h +31 -0
- package/src/definitions/Foundation/JSBNSMutableURLRequest.h +38 -0
- package/src/definitions/Foundation/JSBNSNetService.h +43 -0
- package/src/definitions/Foundation/JSBNSNetServiceBrowser.h +33 -0
- package/src/definitions/Foundation/JSBNSNotification.h +23 -0
- package/src/definitions/Foundation/JSBNSNotificationCenter.h +27 -0
- package/src/definitions/Foundation/JSBNSNotificationQueue.h +22 -0
- package/src/definitions/Foundation/JSBNSNull.h +17 -0
- package/src/definitions/Foundation/JSBNSNumber.h +51 -0
- package/src/definitions/Foundation/JSBNSNumberFormatter.h +136 -0
- package/src/definitions/Foundation/JSBNSOperation.h +34 -0
- package/src/definitions/Foundation/JSBNSOperationQueue.h +32 -0
- package/src/definitions/Foundation/JSBNSOrderedSet.h +70 -0
- package/src/definitions/Foundation/JSBNSOrthography.h +27 -0
- package/src/definitions/Foundation/JSBNSOutputStream.h +33 -0
- package/src/definitions/Foundation/JSBNSPipe.h +26 -0
- package/src/definitions/Foundation/JSBNSPointerArray.h +33 -0
- package/src/definitions/Foundation/JSBNSPort.h +27 -0
- package/src/definitions/Foundation/JSBNSPredicate.h +31 -0
- package/src/definitions/Foundation/JSBNSProcessInfo.h +42 -0
- package/src/definitions/Foundation/JSBNSProgress.h +45 -0
- package/src/definitions/Foundation/JSBNSPropertyListSerialization.h +24 -0
- package/src/definitions/Foundation/JSBNSProxy.h +29 -0
- package/src/definitions/Foundation/JSBNSPurgeableData.h +16 -0
- package/src/definitions/Foundation/JSBNSRecursiveLock.h +20 -0
- package/src/definitions/Foundation/JSBNSRegularExpression.h +35 -0
- package/src/definitions/Foundation/JSBNSRunLoop.h +38 -0
- package/src/definitions/Foundation/JSBNSScanner.h +44 -0
- package/src/definitions/Foundation/JSBNSSet.h +52 -0
- package/src/definitions/Foundation/JSBNSSimpleCString.h +18 -0
- package/src/definitions/Foundation/JSBNSSortDescriptor.h +32 -0
- package/src/definitions/Foundation/JSBNSStream.h +26 -0
- package/src/definitions/Foundation/JSBNSString.h +178 -0
- package/src/definitions/Foundation/JSBNSTextCheckingResult.h +52 -0
- package/src/definitions/Foundation/JSBNSThread.h +46 -0
- package/src/definitions/Foundation/JSBNSTimeZone.h +46 -0
- package/src/definitions/Foundation/JSBNSTimer.h +29 -0
- package/src/definitions/Foundation/JSBNSURL.h +110 -0
- package/src/definitions/Foundation/JSBNSURLAuthenticationChallenge.h +24 -0
- package/src/definitions/Foundation/JSBNSURLCache.h +30 -0
- package/src/definitions/Foundation/JSBNSURLComponents.h +38 -0
- package/src/definitions/Foundation/JSBNSURLConnection.h +45 -0
- package/src/definitions/Foundation/JSBNSURLCredential.h +30 -0
- package/src/definitions/Foundation/JSBNSURLCredentialStorage.h +25 -0
- package/src/definitions/Foundation/JSBNSURLProtectionSpace.h +29 -0
- package/src/definitions/Foundation/JSBNSURLProtocol.h +32 -0
- package/src/definitions/Foundation/JSBNSURLRequest.h +40 -0
- package/src/definitions/Foundation/JSBNSURLResponse.h +22 -0
- package/src/definitions/Foundation/JSBNSURLSession.h +103 -0
- package/src/definitions/Foundation/JSBNSURLSessionConfiguration.h +58 -0
- package/src/definitions/Foundation/JSBNSURLSessionDataTask.h +18 -0
- package/src/definitions/Foundation/JSBNSURLSessionDownloadTask.h +20 -0
- package/src/definitions/Foundation/JSBNSURLSessionTask.h +58 -0
- package/src/definitions/Foundation/JSBNSURLSessionUploadTask.h +18 -0
- package/src/definitions/Foundation/JSBNSUUID.h +22 -0
- package/src/definitions/Foundation/JSBNSUbiquitousKeyValueStore.h +37 -0
- package/src/definitions/Foundation/JSBNSUndoManager.h +50 -0
- package/src/definitions/Foundation/JSBNSUserDefaults.h +52 -0
- package/src/definitions/Foundation/JSBNSValue.h +53 -0
- package/src/definitions/Foundation/JSBNSValueTransformer.h +24 -0
- package/src/definitions/Foundation/JSBNSXMLParser.h +34 -0
- package/src/definitions/JSBApplication.h +59 -0
- package/src/definitions/JSBDocumentController.h +32 -0
- package/src/definitions/JSBJSExtension.h +34 -0
- package/src/definitions/JSBMNFileSystem.h +50 -0
- package/src/definitions/JSBMNFileSystem.m +267 -0
- package/src/definitions/JSBMarginNote.h +9 -0
- package/src/definitions/JSBMarginNote.m +183 -0
- package/src/definitions/JSBMbBook.h +22 -0
- package/src/definitions/JSBMbBookNote.h +78 -0
- package/src/definitions/JSBMbModelTool.h +47 -0
- package/src/definitions/JSBMbTopic.h +28 -0
- package/src/definitions/JSBMenuController.h +21 -0
- package/src/definitions/JSBMindMapNode.h +20 -0
- package/src/definitions/JSBMindMapView.h +15 -0
- package/src/definitions/JSBNotebookController.h +22 -0
- package/src/definitions/JSBOutlineView.h +14 -0
- package/src/definitions/JSBPopupMenu.h +37 -0
- package/src/definitions/JSBPopupMenuItem.h +19 -0
- package/src/definitions/JSBReaderController.h +18 -0
- package/src/definitions/JSBSQLite.h +109 -0
- package/src/definitions/JSBSearchManager.h +55 -0
- package/src/definitions/JSBSearchManager.m +4 -0
- package/src/definitions/JSBSpeechManager.h +31 -0
- package/src/definitions/JSBStudyController.h +32 -0
- package/src/definitions/JSBUndoManager.h +23 -0
- package/src/definitions/JSBZipArchive.h +28 -0
- package/src/definitions/QuartzCore/JSBCAAnimation.h +21 -0
- package/src/definitions/QuartzCore/JSBCAAnimationGroup.h +37 -0
- package/src/definitions/QuartzCore/JSBCABasicAnimation.h +16 -0
- package/src/definitions/QuartzCore/JSBCADisplayLink.h +26 -0
- package/src/definitions/QuartzCore/JSBCAEAGLLayer.h +16 -0
- package/src/definitions/QuartzCore/JSBCAEmitterBehavior.h +24 -0
- package/src/definitions/QuartzCore/JSBCAEmitterCell.h +40 -0
- package/src/definitions/QuartzCore/JSBCAEmitterLayer.h +31 -0
- package/src/definitions/QuartzCore/JSBCAGradientLayer.h +20 -0
- package/src/definitions/QuartzCore/JSBCAKeyframeAnimation.h +16 -0
- package/src/definitions/QuartzCore/JSBCALayer.h +98 -0
- package/src/definitions/QuartzCore/JSBCAMediaTimingFunction.h +22 -0
- package/src/definitions/QuartzCore/JSBCAPropertyAnimation.h +39 -0
- package/src/definitions/QuartzCore/JSBCAReplicatorLayer.h +23 -0
- package/src/definitions/QuartzCore/JSBCAScrollLayer.h +18 -0
- package/src/definitions/QuartzCore/JSBCAShapeLayer.h +27 -0
- package/src/definitions/QuartzCore/JSBCATextLayer.h +23 -0
- package/src/definitions/QuartzCore/JSBCATiledLayer.h +21 -0
- package/src/definitions/QuartzCore/JSBCATransaction.h +32 -0
- package/src/definitions/QuartzCore/JSBCATransformLayer.h +15 -0
- package/src/definitions/QuartzCore/JSBCATransition.h +37 -0
- package/src/definitions/QuartzCore/JSBCAValueFunction.h +20 -0
- package/src/definitions/QuartzCore/JSBQuartzCore.h +9 -0
- package/src/definitions/QuartzCore/JSBQuartzCore.m +106 -0
- package/src/definitions/UIKit/JSBNSLayoutConstraint.h +30 -0
- package/src/definitions/UIKit/JSBNSLayoutManager.h +94 -0
- package/src/definitions/UIKit/JSBNSMutableParagraphStyle.h +16 -0
- package/src/definitions/UIKit/JSBNSParagraphStyle.h +37 -0
- package/src/definitions/UIKit/JSBNSShadow.h +20 -0
- package/src/definitions/UIKit/JSBNSStringDrawingContext.h +22 -0
- package/src/definitions/UIKit/JSBNSTextAttachment.h +24 -0
- package/src/definitions/UIKit/JSBNSTextContainer.h +27 -0
- package/src/definitions/UIKit/JSBNSTextStorage.h +31 -0
- package/src/definitions/UIKit/JSBNSTextTab.h +38 -0
- package/src/definitions/UIKit/JSBUIAcceleration.h +24 -0
- package/src/definitions/UIKit/JSBUIAccelerometer.h +28 -0
- package/src/definitions/UIKit/JSBUIAccessibilityElement.h +24 -0
- package/src/definitions/UIKit/JSBUIActionSheet.h +37 -0
- package/src/definitions/UIKit/JSBUIActivity.h +26 -0
- package/src/definitions/UIKit/JSBUIActivityIndicatorView.h +22 -0
- package/src/definitions/UIKit/JSBUIActivityItemProvider.h +22 -0
- package/src/definitions/UIKit/JSBUIActivityViewController.h +20 -0
- package/src/definitions/UIKit/JSBUIAlertView.h +39 -0
- package/src/definitions/UIKit/JSBUIApplication.h +37 -0
- package/src/definitions/UIKit/JSBUIAttachmentBehavior.h +26 -0
- package/src/definitions/UIKit/JSBUIBarButtonItem.h +48 -0
- package/src/definitions/UIKit/JSBUIBarItem.h +26 -0
- package/src/definitions/UIKit/JSBUIBezierPath.h +55 -0
- package/src/definitions/UIKit/JSBUIButton.h +51 -0
- package/src/definitions/UIKit/JSBUICollectionReusableView.h +26 -0
- package/src/definitions/UIKit/JSBUICollectionView.h +53 -0
- package/src/definitions/UIKit/JSBUICollectionViewCell.h +14 -0
- package/src/definitions/UIKit/JSBUICollectionViewController.h +21 -0
- package/src/definitions/UIKit/JSBUICollectionViewFlowLayout.h +29 -0
- package/src/definitions/UIKit/JSBUICollectionViewFlowLayoutInvalidationContext.h +25 -0
- package/src/definitions/UIKit/JSBUICollectionViewLayout.h +58 -0
- package/src/definitions/UIKit/JSBUICollectionViewLayoutAttributes.h +40 -0
- package/src/definitions/UIKit/JSBUICollectionViewLayoutInvalidationContext.h +36 -0
- package/src/definitions/UIKit/JSBUICollectionViewTransitionLayout.h +15 -0
- package/src/definitions/UIKit/JSBUICollectionViewUpdateItem.h +36 -0
- package/src/definitions/UIKit/JSBUICollisionBehavior.h +30 -0
- package/src/definitions/UIKit/JSBUIColor.h +67 -0
- package/src/definitions/UIKit/JSBUIControl.h +39 -0
- package/src/definitions/UIKit/JSBUIDatePicker.h +26 -0
- package/src/definitions/UIKit/JSBUIDevice.h +37 -0
- package/src/definitions/UIKit/JSBUIDictationPhrase.h +38 -0
- package/src/definitions/UIKit/JSBUIDocument.h +46 -0
- package/src/definitions/UIKit/JSBUIDocumentInteractionController.h +32 -0
- package/src/definitions/UIKit/JSBUIDynamicAnimator.h +27 -0
- package/src/definitions/UIKit/JSBUIDynamicBehavior.h +27 -0
- package/src/definitions/UIKit/JSBUIDynamicItemBehavior.h +30 -0
- package/src/definitions/UIKit/JSBUIEvent.h +24 -0
- package/src/definitions/UIKit/JSBUIFont.h +30 -0
- package/src/definitions/UIKit/JSBUIFontDescriptor.h +36 -0
- package/src/definitions/UIKit/JSBUIGestureRecognizer.h +44 -0
- package/src/definitions/UIKit/JSBUIGravityBehavior.h +24 -0
- package/src/definitions/UIKit/JSBUIImage.h +59 -0
- package/src/definitions/UIKit/JSBUIImagePickerController.h +30 -0
- package/src/definitions/UIKit/JSBUIImageView.h +28 -0
- package/src/definitions/UIKit/JSBUIInputView.h +15 -0
- package/src/definitions/UIKit/JSBUIInterpolatingMotionEffect.h +18 -0
- package/src/definitions/UIKit/JSBUIKeyCommand.h +25 -0
- package/src/definitions/UIKit/JSBUIKit.h +9 -0
- package/src/definitions/UIKit/JSBUIKit.m +614 -0
- package/src/definitions/UIKit/JSBUILabel.h +38 -0
- package/src/definitions/UIKit/JSBUILocalNotification.h +20 -0
- package/src/definitions/UIKit/JSBUILocalizedIndexedCollation.h +23 -0
- package/src/definitions/UIKit/JSBUILongPressGestureRecognizer.h +22 -0
- package/src/definitions/UIKit/JSBUIManagedDocument.h +26 -0
- package/src/definitions/UIKit/JSBUIMarkupTextPrintFormatter.h +17 -0
- package/src/definitions/UIKit/JSBUIMenuController.h +28 -0
- package/src/definitions/UIKit/JSBUIMenuItem.h +25 -0
- package/src/definitions/UIKit/JSBUIMotionEffect.h +24 -0
- package/src/definitions/UIKit/JSBUIMotionEffectGroup.h +16 -0
- package/src/definitions/UIKit/JSBUINavigationBar.h +47 -0
- package/src/definitions/UIKit/JSBUINavigationController.h +34 -0
- package/src/definitions/UIKit/JSBUINavigationItem.h +45 -0
- package/src/definitions/UIKit/JSBUINib.h +19 -0
- package/src/definitions/UIKit/JSBUIPageControl.h +24 -0
- package/src/definitions/UIKit/JSBUIPageViewController.h +27 -0
- package/src/definitions/UIKit/JSBUIPanGestureRecognizer.h +23 -0
- package/src/definitions/UIKit/JSBUIPasteboard.h +46 -0
- package/src/definitions/UIKit/JSBUIPercentDrivenInteractiveTransition.h +24 -0
- package/src/definitions/UIKit/JSBUIPickerView.h +28 -0
- package/src/definitions/UIKit/JSBUIPinchGestureRecognizer.h +19 -0
- package/src/definitions/UIKit/JSBUIPopoverBackgroundView.h +22 -0
- package/src/definitions/UIKit/JSBUIPopoverController.h +31 -0
- package/src/definitions/UIKit/JSBUIPrintFormatter.h +33 -0
- package/src/definitions/UIKit/JSBUIPrintInfo.h +26 -0
- package/src/definitions/UIKit/JSBUIPrintInteractionController.h +36 -0
- package/src/definitions/UIKit/JSBUIPrintPageRenderer.h +31 -0
- package/src/definitions/UIKit/JSBUIPrintPaper.h +22 -0
- package/src/definitions/UIKit/JSBUIProgressView.h +24 -0
- package/src/definitions/UIKit/JSBUIPushBehavior.h +28 -0
- package/src/definitions/UIKit/JSBUIReferenceLibraryViewController.h +19 -0
- package/src/definitions/UIKit/JSBUIRefreshControl.h +21 -0
- package/src/definitions/UIKit/JSBUIResponder.h +57 -0
- package/src/definitions/UIKit/JSBUIRotationGestureRecognizer.h +19 -0
- package/src/definitions/UIKit/JSBUIScreen.h +36 -0
- package/src/definitions/UIKit/JSBUIScreenEdgePanGestureRecognizer.h +18 -0
- package/src/definitions/UIKit/JSBUIScreenMode.h +19 -0
- package/src/definitions/UIKit/JSBUIScrollView.h +53 -0
- package/src/definitions/UIKit/JSBUISearchBar.h +55 -0
- package/src/definitions/UIKit/JSBUISearchDisplayController.h +28 -0
- package/src/definitions/UIKit/JSBUISegmentedControl.h +46 -0
- package/src/definitions/UIKit/JSBUISimpleTextPrintFormatter.h +18 -0
- package/src/definitions/UIKit/JSBUISlider.h +41 -0
- package/src/definitions/UIKit/JSBUISnapBehavior.h +18 -0
- package/src/definitions/UIKit/JSBUISplitViewController.h +26 -0
- package/src/definitions/UIKit/JSBUIStepper.h +31 -0
- package/src/definitions/UIKit/JSBUIStoryboard.h +19 -0
- package/src/definitions/UIKit/JSBUIStoryboardPopoverSegue.h +17 -0
- package/src/definitions/UIKit/JSBUIStoryboardSegue.h +23 -0
- package/src/definitions/UIKit/JSBUISwipeGestureRecognizer.h +19 -0
- package/src/definitions/UIKit/JSBUISwitch.h +20 -0
- package/src/definitions/UIKit/JSBUITabBar.h +33 -0
- package/src/definitions/UIKit/JSBUITabBarController.h +26 -0
- package/src/definitions/UIKit/JSBUITabBarItem.h +26 -0
- package/src/definitions/UIKit/JSBUITableView.h +70 -0
- package/src/definitions/UIKit/JSBUITableViewCell.h +48 -0
- package/src/definitions/UIKit/JSBUITableViewController.h +19 -0
- package/src/definitions/UIKit/JSBUITableViewHeaderFooterView.h +22 -0
- package/src/definitions/UIKit/JSBUITapGestureRecognizer.h +20 -0
- package/src/definitions/UIKit/JSBUITextChecker.h +27 -0
- package/src/definitions/UIKit/JSBUITextField.h +44 -0
- package/src/definitions/UIKit/JSBUITextInputMode.h +41 -0
- package/src/definitions/UIKit/JSBUITextInputStringTokenizer.h +40 -0
- package/src/definitions/UIKit/JSBUITextPosition.h +38 -0
- package/src/definitions/UIKit/JSBUITextRange.h +38 -0
- package/src/definitions/UIKit/JSBUITextSelectionRect.h +36 -0
- package/src/definitions/UIKit/JSBUITextView.h +34 -0
- package/src/definitions/UIKit/JSBUIToolbar.h +22 -0
- package/src/definitions/UIKit/JSBUITouch.h +49 -0
- package/src/definitions/UIKit/JSBUIVideoEditorController.h +19 -0
- package/src/definitions/UIKit/JSBUIView.h +140 -0
- package/src/definitions/UIKit/JSBUIViewController.h +127 -0
- package/src/definitions/UIKit/JSBUIViewPrintFormatter.h +15 -0
- package/src/definitions/UIKit/JSBUIWebView.h +38 -0
- package/src/definitions/UIKit/JSBUIWindow.h +32 -0
- package/src/styles/starlight-overrides.css +23 -0
- package/tsconfig.json +5 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { FastMCP } from 'fastmcp';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { buildIndex, getPaths, isIndexStale, loadIndex, searchDocs } from './lib.mjs';
|
|
4
|
+
|
|
5
|
+
const TOOL_NAME = 'search_docs';
|
|
6
|
+
const PORT = Number(process.env.MCP_HTTP_PORT || 8788);
|
|
7
|
+
|
|
8
|
+
async function ensureIndex() {
|
|
9
|
+
const { INDEX_PATH } = getPaths();
|
|
10
|
+
try {
|
|
11
|
+
await loadIndex();
|
|
12
|
+
const stale = await isIndexStale();
|
|
13
|
+
if (stale) {
|
|
14
|
+
console.error(`检测到文档更新,开始重建索引:${INDEX_PATH}`);
|
|
15
|
+
await buildIndex();
|
|
16
|
+
}
|
|
17
|
+
} catch {
|
|
18
|
+
console.error(`未找到索引,开始重建:${INDEX_PATH}`);
|
|
19
|
+
await buildIndex();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let initPromise = null;
|
|
24
|
+
function initIndexInBackground() {
|
|
25
|
+
if (!initPromise) {
|
|
26
|
+
initPromise = ensureIndex().catch((error) => {
|
|
27
|
+
console.error('索引初始化失败:', error?.message || error);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return initPromise;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const server = new FastMCP({
|
|
34
|
+
name: 'marginnote-docs-mcp',
|
|
35
|
+
version: '0.1.0',
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
server.addTool({
|
|
39
|
+
name: TOOL_NAME,
|
|
40
|
+
description: '在本地文档索引中检索相关文本片段',
|
|
41
|
+
parameters: z.object({
|
|
42
|
+
query: z.string().describe('检索关键词或问题'),
|
|
43
|
+
top_k: z.number().optional().describe('返回片段数量'),
|
|
44
|
+
}),
|
|
45
|
+
execute: async ({ query, top_k }) => {
|
|
46
|
+
const topK = Number(top_k || 5);
|
|
47
|
+
if (!query.trim()) {
|
|
48
|
+
return { content: [{ type: 'text', text: 'query不能为空' }] };
|
|
49
|
+
}
|
|
50
|
+
if (initPromise) {
|
|
51
|
+
await initPromise;
|
|
52
|
+
} else {
|
|
53
|
+
await initIndexInBackground();
|
|
54
|
+
}
|
|
55
|
+
const results = await searchDocs(query, topK);
|
|
56
|
+
return {
|
|
57
|
+
content: results.map((text) => ({ type: 'text', text })),
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
await server.start({
|
|
63
|
+
transportType: 'httpStream',
|
|
64
|
+
httpStream: {
|
|
65
|
+
port: PORT,
|
|
66
|
+
endpoint: '/mcp',
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// 不阻塞握手,启动后再初始化索引
|
|
71
|
+
// 默认不自动构建,避免阻塞握手;仅在首次查询时构建
|
|
72
|
+
if (process.env.MCP_PREBUILD === '1') {
|
|
73
|
+
setTimeout(() => initIndexInBackground(), 1000);
|
|
74
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { FastMCP } from 'fastmcp';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { buildIndex, getPaths, isIndexStale, loadIndex, searchDocs } from './lib.mjs';
|
|
4
|
+
|
|
5
|
+
const TOOL_NAME = 'search_docs';
|
|
6
|
+
const IS_SILENT = process.env.MCP_SILENT === '1';
|
|
7
|
+
|
|
8
|
+
function logError(...args) {
|
|
9
|
+
if (IS_SILENT) return;
|
|
10
|
+
console.error(...args);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async function ensureIndex() {
|
|
14
|
+
const { INDEX_PATH } = getPaths();
|
|
15
|
+
try {
|
|
16
|
+
await loadIndex();
|
|
17
|
+
const stale = await isIndexStale();
|
|
18
|
+
if (stale) {
|
|
19
|
+
logError(`检测到文档更新,开始重建索引:${INDEX_PATH}`);
|
|
20
|
+
await buildIndex();
|
|
21
|
+
}
|
|
22
|
+
} catch {
|
|
23
|
+
logError(`未找到索引,开始重建:${INDEX_PATH}`);
|
|
24
|
+
await buildIndex();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
let initPromise = null;
|
|
29
|
+
function initIndexInBackground() {
|
|
30
|
+
if (!initPromise) {
|
|
31
|
+
initPromise = ensureIndex().catch((error) => {
|
|
32
|
+
logError('索引初始化失败:', error?.message || error);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return initPromise;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const logger = IS_SILENT
|
|
39
|
+
? {
|
|
40
|
+
debug() {},
|
|
41
|
+
error() {},
|
|
42
|
+
info() {},
|
|
43
|
+
log() {},
|
|
44
|
+
warn() {},
|
|
45
|
+
}
|
|
46
|
+
: {
|
|
47
|
+
debug: (...args) => console.error(...args),
|
|
48
|
+
error: (...args) => console.error(...args),
|
|
49
|
+
info: (...args) => console.error(...args),
|
|
50
|
+
log: (...args) => console.error(...args),
|
|
51
|
+
warn: (...args) => console.error(...args),
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const server = new FastMCP({
|
|
55
|
+
name: 'marginnote-docs-mcp',
|
|
56
|
+
version: '0.1.0',
|
|
57
|
+
logger,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
server.addTool({
|
|
61
|
+
name: TOOL_NAME,
|
|
62
|
+
description: '在本地文档索引中检索相关文本片段',
|
|
63
|
+
parameters: z.object({
|
|
64
|
+
query: z.string().describe('检索关键词或问题'),
|
|
65
|
+
top_k: z.number().optional().describe('返回片段数量'),
|
|
66
|
+
}),
|
|
67
|
+
execute: async ({ query, top_k }) => {
|
|
68
|
+
const topK = Number(top_k || 5);
|
|
69
|
+
if (!query.trim()) {
|
|
70
|
+
return { content: [{ type: 'text', text: 'query不能为空' }] };
|
|
71
|
+
}
|
|
72
|
+
if (initPromise) {
|
|
73
|
+
await initPromise;
|
|
74
|
+
} else {
|
|
75
|
+
await initIndexInBackground();
|
|
76
|
+
}
|
|
77
|
+
const results = await searchDocs(query, topK);
|
|
78
|
+
return {
|
|
79
|
+
content: results.map((text) => ({ type: 'text', text })),
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
await server.start({
|
|
85
|
+
transportType: 'stdio',
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// 默认不自动构建,避免阻塞握手;仅在首次查询时构建
|
|
89
|
+
if (process.env.MCP_PREBUILD === '1') {
|
|
90
|
+
setTimeout(() => initIndexInBackground(), 1000);
|
|
91
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
type JsbApi = {
|
|
2
|
+
protocol: string;
|
|
3
|
+
properties: string[];
|
|
4
|
+
instance_methods: string[];
|
|
5
|
+
class_methods: string[];
|
|
6
|
+
export_aliases: Record<string, string>;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const headerUrlLoaders = import.meta.glob('../definitions/**/*.h', {
|
|
10
|
+
query: '?url',
|
|
11
|
+
import: 'default',
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
type PageConfig = {
|
|
15
|
+
protocol: string;
|
|
16
|
+
only?: Array<'properties' | 'class' | 'instance' | 'aliases'>;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const GLOBAL_PAGE_PROTOCOL_MAP: Record<string, PageConfig> = {
|
|
20
|
+
'reference/global/application': { protocol: 'JSBApplication' },
|
|
21
|
+
'reference/global/database': { protocol: 'JSBMbModelTool' },
|
|
22
|
+
'reference/global/note': { protocol: 'JSBMbBookNote', only: ['class'] },
|
|
23
|
+
'reference/global/self': { protocol: 'JSBJSExtension' },
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
function getPageTitle(): string | null {
|
|
27
|
+
const h1 = document.querySelector('main h1');
|
|
28
|
+
const t = (h1 && h1.textContent ? h1.textContent : '').trim();
|
|
29
|
+
return t || null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function protocolFromTitle(title: string): string {
|
|
33
|
+
return `JSB${title.replace(/\s+/g, '')}`;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function selectorGuessFromDecl(decl: string): string {
|
|
37
|
+
const stripped = decl.split('//', 1)[0].trim().replace(/;$/, '').trim();
|
|
38
|
+
const noPrefix = stripped.replace(/^[-+]\s*\([^)]*\)\s*/, '').trim();
|
|
39
|
+
if (!noPrefix.includes(':')) return noPrefix.split(/\s|\(/, 1)[0].trim();
|
|
40
|
+
const parts = noPrefix.split(':');
|
|
41
|
+
const labels = parts.slice(0, -1).map((p) => {
|
|
42
|
+
const tokens = p.match(/[A-Za-z_][A-Za-z0-9_]*/g);
|
|
43
|
+
return tokens && tokens.length ? tokens[tokens.length - 1] : '';
|
|
44
|
+
});
|
|
45
|
+
return `${labels.join(':')}:`;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function jsNameFromObjcDecl(decl: string): string {
|
|
49
|
+
const stripped = decl.split('//', 1)[0].trim().replace(/;$/, '').trim();
|
|
50
|
+
const noPrefix = stripped.replace(/^[-+]\s*\([^)]*\)\s*/, '').trim();
|
|
51
|
+
if (!noPrefix.includes(':')) return noPrefix.split(/\s|\(/, 1)[0].trim();
|
|
52
|
+
const parts = noPrefix.split(':');
|
|
53
|
+
const labels = parts.slice(0, -1).map((p) => {
|
|
54
|
+
const tokens = p.match(/[A-Za-z_][A-Za-z0-9_]*/g);
|
|
55
|
+
return tokens && tokens.length ? tokens[tokens.length - 1] : '';
|
|
56
|
+
});
|
|
57
|
+
if (!labels.length) return '';
|
|
58
|
+
let js = labels[0];
|
|
59
|
+
for (const lab of labels.slice(1)) {
|
|
60
|
+
if (!lab) continue;
|
|
61
|
+
js += lab[0].toUpperCase() + lab.slice(1);
|
|
62
|
+
}
|
|
63
|
+
return js;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function parseProtocolFromHeader(headerText: string, protocolName: string): JsbApi {
|
|
67
|
+
const lines = headerText.split(/\r?\n/);
|
|
68
|
+
let inProtocol = false;
|
|
69
|
+
const properties: string[] = [];
|
|
70
|
+
const instanceMethods: string[] = [];
|
|
71
|
+
const classMethods: string[] = [];
|
|
72
|
+
const exportAliases: Record<string, string> = {};
|
|
73
|
+
let pendingExportAs: string | null = null;
|
|
74
|
+
|
|
75
|
+
for (const raw of lines) {
|
|
76
|
+
const line = raw.trim();
|
|
77
|
+
if (!line || line.startsWith('#') || line.startsWith('//')) continue;
|
|
78
|
+
const start = line.match(/^@protocol\s+(\w+)\b/);
|
|
79
|
+
if (start) {
|
|
80
|
+
inProtocol = start[1] === protocolName;
|
|
81
|
+
pendingExportAs = null;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (!inProtocol) continue;
|
|
85
|
+
if (line === '@end') break;
|
|
86
|
+
|
|
87
|
+
if (line.startsWith('JSExportAs(')) {
|
|
88
|
+
const m = line.match(/^JSExportAs\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*,/);
|
|
89
|
+
if (m) pendingExportAs = m[1];
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (line.startsWith('@property')) {
|
|
93
|
+
const m = line.match(/([A-Za-z_][A-Za-z0-9_]*)\s*;\s*(?:(?:\/\/).*)?$/);
|
|
94
|
+
if (m) properties.push(m[1]);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (line.startsWith('- (') || line.startsWith('+ (')) {
|
|
98
|
+
const jsName = pendingExportAs || jsNameFromObjcDecl(line);
|
|
99
|
+
const selector = selectorGuessFromDecl(line);
|
|
100
|
+
if (pendingExportAs) exportAliases[jsName] = selector;
|
|
101
|
+
pendingExportAs = null;
|
|
102
|
+
if (line.startsWith('+ (')) classMethods.push(jsName);
|
|
103
|
+
else instanceMethods.push(jsName);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const uniq = (arr: string[]) => Array.from(new Set(arr.filter(Boolean))).sort();
|
|
109
|
+
const sortedAliases = Object.fromEntries(
|
|
110
|
+
Object.entries(exportAliases).sort(([a], [b]) => a.localeCompare(b))
|
|
111
|
+
) as Record<string, string>;
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
protocol: protocolName,
|
|
115
|
+
properties: uniq(properties),
|
|
116
|
+
instance_methods: uniq(instanceMethods),
|
|
117
|
+
class_methods: uniq(classMethods),
|
|
118
|
+
export_aliases: sortedAliases,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function el<K extends keyof HTMLElementTagNameMap>(
|
|
123
|
+
name: K,
|
|
124
|
+
attrs: Record<string, string> = {},
|
|
125
|
+
children: Node[] = []
|
|
126
|
+
): HTMLElementTagNameMap[K] {
|
|
127
|
+
const node = document.createElement(name);
|
|
128
|
+
for (const [k, v] of Object.entries(attrs)) {
|
|
129
|
+
if (k === 'text') node.textContent = v;
|
|
130
|
+
else node.setAttribute(k, v);
|
|
131
|
+
}
|
|
132
|
+
for (const c of children) node.appendChild(c);
|
|
133
|
+
return node;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function code(text: string): HTMLElement {
|
|
137
|
+
return el('code', { text });
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function renderApi(container: HTMLElement, api: JsbApi, only?: PageConfig['only']) {
|
|
141
|
+
const allowed = new Set(only ?? ['properties', 'class', 'instance', 'aliases']);
|
|
142
|
+
container.textContent = '';
|
|
143
|
+
if (allowed.has('properties') && api.properties.length) {
|
|
144
|
+
container.appendChild(el('h3', { text: '属性' }));
|
|
145
|
+
const ul = el('ul');
|
|
146
|
+
for (const p of api.properties) ul.appendChild(el('li', {}, [code(p)]));
|
|
147
|
+
container.appendChild(ul);
|
|
148
|
+
}
|
|
149
|
+
if (allowed.has('class') && api.class_methods.length) {
|
|
150
|
+
container.appendChild(el('h3', { text: '类方法' }));
|
|
151
|
+
const ul = el('ul');
|
|
152
|
+
for (const m of api.class_methods) ul.appendChild(el('li', {}, [code(`${m}()`)]));
|
|
153
|
+
container.appendChild(ul);
|
|
154
|
+
}
|
|
155
|
+
if (allowed.has('instance') && api.instance_methods.length) {
|
|
156
|
+
container.appendChild(el('h3', { text: '实例方法' }));
|
|
157
|
+
const ul = el('ul');
|
|
158
|
+
for (const m of api.instance_methods) ul.appendChild(el('li', {}, [code(`${m}()`)]));
|
|
159
|
+
container.appendChild(ul);
|
|
160
|
+
}
|
|
161
|
+
const aliasKeys = Object.keys(api.export_aliases || {});
|
|
162
|
+
if (allowed.has('aliases') && aliasKeys.length) {
|
|
163
|
+
container.appendChild(el('h3', { text: 'JSExportAs 别名' }));
|
|
164
|
+
const table = el('table');
|
|
165
|
+
const thead = el('thead');
|
|
166
|
+
const trh = el('tr');
|
|
167
|
+
trh.appendChild(el('th', { text: 'JS 名' }));
|
|
168
|
+
trh.appendChild(el('th', { text: 'ObjC selector(推断)' }));
|
|
169
|
+
thead.appendChild(trh);
|
|
170
|
+
table.appendChild(thead);
|
|
171
|
+
const tbody = el('tbody');
|
|
172
|
+
for (const jsName of aliasKeys) {
|
|
173
|
+
const tr = el('tr');
|
|
174
|
+
tr.appendChild(el('td', {}, [code(jsName)]));
|
|
175
|
+
tr.appendChild(el('td', {}, [code(api.export_aliases[jsName])]));
|
|
176
|
+
tbody.appendChild(tr);
|
|
177
|
+
}
|
|
178
|
+
table.appendChild(tbody);
|
|
179
|
+
container.appendChild(table);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async function loadHeaderText(protocol: string): Promise<{ source: string; text: string } | null> {
|
|
184
|
+
const entries = Object.keys(headerUrlLoaders);
|
|
185
|
+
const targetKey = entries.find((k) => k.endsWith(`/${protocol}.h`));
|
|
186
|
+
if (!targetKey) return null;
|
|
187
|
+
const url = (await (headerUrlLoaders as any)[targetKey]()) as string;
|
|
188
|
+
const resp = await fetch(url);
|
|
189
|
+
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
|
|
190
|
+
return { source: targetKey.replace('../definitions/', ''), text: await resp.text() };
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function getSlug(): string {
|
|
194
|
+
return location.pathname.replace(/^\/+/, '').replace(/\/+$/, '');
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export function initJsbApiFooter() {
|
|
198
|
+
const root = document.querySelector<HTMLElement>('[data-jsb-api]');
|
|
199
|
+
if (!root) return;
|
|
200
|
+
|
|
201
|
+
if (!location.pathname.startsWith('/reference/')) {
|
|
202
|
+
root.style.display = 'none';
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const statusEl = root.querySelector<HTMLElement>('[data-jsb-api-status]')!;
|
|
207
|
+
const protocolEl = root.querySelector<HTMLElement>('[data-jsb-api-protocol]')!;
|
|
208
|
+
const sourceEl = root.querySelector<HTMLElement>('[data-jsb-api-source]')!;
|
|
209
|
+
const bodyEl = root.querySelector<HTMLElement>('[data-jsb-api-body]')!;
|
|
210
|
+
|
|
211
|
+
const slug = getSlug();
|
|
212
|
+
const cfg = GLOBAL_PAGE_PROTOCOL_MAP[slug];
|
|
213
|
+
|
|
214
|
+
let protocol: string | null = cfg?.protocol ?? null;
|
|
215
|
+
if (!protocol) {
|
|
216
|
+
const title = getPageTitle();
|
|
217
|
+
if (!title) {
|
|
218
|
+
root.style.display = 'none';
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
protocol = protocolFromTitle(title);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
protocolEl.textContent = protocol;
|
|
225
|
+
|
|
226
|
+
(async () => {
|
|
227
|
+
try {
|
|
228
|
+
const loaded = await loadHeaderText(protocol);
|
|
229
|
+
if (!loaded) {
|
|
230
|
+
root.style.display = 'none';
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
const api = parseProtocolFromHeader(loaded.text, protocol);
|
|
234
|
+
sourceEl.textContent = loaded.source;
|
|
235
|
+
renderApi(bodyEl, api, cfg?.only);
|
|
236
|
+
statusEl.textContent = '';
|
|
237
|
+
} catch (e: any) {
|
|
238
|
+
// Keep user-facing UI clean: hide the block on errors.
|
|
239
|
+
root.style.display = 'none';
|
|
240
|
+
}
|
|
241
|
+
})().catch(() => {});
|
|
242
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
import DefaultFooter from '@astrojs/starlight/components/Footer.astro';
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<section class="jsb-api sl-markdown-content" data-jsb-api>
|
|
6
|
+
<details class="jsb-api__details">
|
|
7
|
+
<summary class="jsb-api__summary">头文件 API 清单</summary>
|
|
8
|
+
<p class="jsb-api__meta">
|
|
9
|
+
<span data-jsb-api-status>正在加载…</span>
|
|
10
|
+
</p>
|
|
11
|
+
<p class="jsb-api__meta">
|
|
12
|
+
协议:<code data-jsb-api-protocol>—</code>,来源:<code data-jsb-api-source>—</code>
|
|
13
|
+
</p>
|
|
14
|
+
<div data-jsb-api-body></div>
|
|
15
|
+
</details>
|
|
16
|
+
</section>
|
|
17
|
+
|
|
18
|
+
<DefaultFooter />
|
|
19
|
+
|
|
20
|
+
<script>
|
|
21
|
+
import { initJsbApiFooter } from '../client/jsb-api-footer';
|
|
22
|
+
|
|
23
|
+
initJsbApiFooter();
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<style>
|
|
27
|
+
@layer starlight.components {
|
|
28
|
+
.jsb-api {
|
|
29
|
+
margin-top: 2rem;
|
|
30
|
+
}
|
|
31
|
+
.jsb-api__details {
|
|
32
|
+
border: 1px solid var(--sl-color-gray-6);
|
|
33
|
+
border-radius: 0.75rem;
|
|
34
|
+
padding: 0.75rem 1rem;
|
|
35
|
+
background: color-mix(in srgb, var(--sl-color-gray-7), transparent 70%);
|
|
36
|
+
}
|
|
37
|
+
.jsb-api__summary {
|
|
38
|
+
cursor: pointer;
|
|
39
|
+
font-weight: 600;
|
|
40
|
+
}
|
|
41
|
+
.jsb-api__meta {
|
|
42
|
+
margin-top: 0.75rem;
|
|
43
|
+
color: var(--sl-color-gray-3);
|
|
44
|
+
font-size: var(--sl-text-sm);
|
|
45
|
+
}
|
|
46
|
+
.jsb-api__meta code {
|
|
47
|
+
word-break: break-all;
|
|
48
|
+
}
|
|
49
|
+
.jsb-api :global(ul) {
|
|
50
|
+
margin-top: 0.5rem;
|
|
51
|
+
}
|
|
52
|
+
.jsb-api :global(table) {
|
|
53
|
+
margin-top: 0.75rem;
|
|
54
|
+
width: 100%;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
</style>
|