@sdkrun/metadata-index
v0.3.0
Published
Parses NativeScript-generated platform typings into a queryable SQLite ground-truth index
Readme
@sdkrun/metadata-index
Builds a queryable SQLite ground-truth index of native platform SDK APIs from NativeScript's machine-generated typings — the data layer behind sdk.run and @sdkrun/platform-oracle.
The corpus is compiler-parsed truth, not scraped docs: per-framework .d.ts files from the NativeScript metadata generator (Apple platforms) or dts-generator (Android), enriched with sidecar metadata the typings can't express — OS-version availability and native ObjC selectors on Apple, API levels and JNI signatures on Android.
Requires Node ≥ 24 (uses the built-in node:sqlite; no native build dependencies).
Building an index
# Apple platform (types + metadata-json produced by the napi-ios generator)
sdkrun-index index \
--types packages/macos/types \
--meta-json packages/macos/metadata-json \
--platform macos --out platforms.db --label "macOS SDK 26.5"
# Android (types from dts-generator; availability joined from the SDK's own lint data)
sdkrun-index index \
--types ./android-types \
--android-api-versions $ANDROID_HOME/platforms/android-36/data/api-versions.xml \
--split-namespaces \
--platform android --out platforms.db --label "android-36"
sdkrun-index stats --db platforms.dbMultiple platforms live in one database; re-ingesting a platform replaces it wholesale.
--meta-json <dir>—nativescript-metadata-json@1sidecars (availability + selectors) emitted by the napi-ios metadata generator's JSON emitter.--android-api-versions <xml>— joins per-class/per-membersince/deprecated/removedAPI levels and JNI signatures fromapi-versions.xml. Availability fields carry API levels as strings (introduced: "26"= API level 26).--split-namespaces— splits a single-file Java corpus into package facets (android.view,java.util, …) indexed as frameworks.
What's in the database
frameworks / symbols (name, kind, extends, implements, declaration text, availability) / members (name, kind, signature, native selector, availability), plus FTS5 tables with porter stemming and camelCase-aware tokenization for task-phrase search.
Programmatic API
import { MetadataDb, parseDts } from '@sdkrun/metadata-index';
const db = new MetadataDb('platforms.db', { readonly: true });
const [win] = db.lookupSymbol('NSWindow', 'macos');
db.findMember(win.id, 'makeKeyAndOrderFront');
db.superclassChain(win);Query it through MCP instead with @sdkrun/platform-oracle.
