skif-js 0.4.0

JavaScript and TypeScript module graph and dependency rules for skif, built on oxc.
Documentation
//! Module graph and JavaScript/TypeScript rules for skif: the knip issue types on top of oxc.
//!
//! [`JsProvider`] is a [`skif_lint::RuleProvider`] with id `"js"`. For a run it
//!
//! 1. discovers source files through a [`skif_core::FileSystem`] and assigns each to its workspace package,
//! 2. collects entry files from configuration, defaults, `package.json` (`main`, `bin`, `exports`), scripts and
//!    [`InputSource`]s (the plugin seam),
//! 3. follows imports with `oxc_resolver` (tsconfig `paths` and references, `exports` and `imports` conditions,
//!    workspace packages, builtins), parsing each round of files in parallel,
//! 4. propagates usage through re-export chains and compares referenced packages and binaries with each manifest.
//!
//! The rules are `unused-dependencies`, `unused-dev-dependencies`, `unlisted-dependencies`, `unresolved-imports`,
//! `stale-mocks`, `unlisted-binaries`, `unused-optional-peer-dependencies`, `unused-files`, `unused-subpath-imports`,
//! `unused-exports`, `unused-types`, `unused-namespace-exports`, `unused-namespace-types`, `unused-enum-members`,
//! `unused-namespace-members`, `duplicate-exports`, `unparseable-files`, `stale-js-config`, `circular-imports` and
//! `unused-subpath-exports`; the last two are off by default.
//!
//! No oxc type appears in the public API.

#![warn(missing_docs)]

mod analysis;
mod ancestors;
mod compilers;
mod components;
mod config_check;
mod config_hints;
mod config_modules;
mod deps;
mod discover;
mod entries;
mod explain;
mod fixture;
mod globs;
mod graph;
mod hoisting;
mod input;
mod listed;
mod lockfile;
mod manifest_paths;
mod plugin_source;
mod provider;
mod resolve;
mod rules;
mod scripts;
mod setup;
mod shared_modules;
mod source_scan;
mod specifier;
mod subpaths;
mod trace;
mod tsconfig_files;
mod tsconfig_paths;
mod usage;

pub use analysis::{JsAnalysis, UnusedFile, discovery_file_system};
pub use config_check::relative_tsconfig;
pub use deps::{DependencyUsage, ForeignMapping, RunsIn, UnlistedBinary, UnlistedConfigDependency, UnlistedImport};
pub use explain::{Absence, EntryReason, ExportReport, ExportUser, Importer, ReExport, UsageReport, Verdict};
#[doc(hidden)]
pub use globs::IncompleteScopeGlobs;
pub use graph::{Module, ModuleGraph, ModuleId, ResolvedImport, Target};
pub use input::{
    BuildDir, ConfigDependency, CustomElementLibrary, IncompleteCause, IncompleteEntries, IncompleteScope,
    InputRequest, InputSource, PathAlias, RunBinary, ScopedEntryRegex, WorkspaceInputs, WorkspaceListing,
};
#[doc(hidden)]
pub use manifest_paths::is_out_dir;
#[doc(hidden)]
pub use manifest_paths::n8n_load_paths;
#[doc(hidden)]
pub use manifest_paths::source_candidates;
pub use plugin_source::PluginSource;
pub use provider::{JsProvider, PROVIDER_ID};
pub use rules::{
    CircularImports, DuplicateExports, JsRule, StaleJsConfig, StaleMocks, UnlistedBinaries, UnlistedDependencies,
    UnparseableFiles, UnresolvedImports, UnusedDependencies, UnusedDevDependencies, UnusedEnumMembers, UnusedExports,
    UnusedFiles, UnusedNamespaceExports, UnusedNamespaceMembers, UnusedNamespaceTypes, UnusedOptionalPeerDependencies,
    UnusedSubpathExports, UnusedSubpathImports, UnusedTypes, rules,
};
pub use shared_modules::SharedModules;
/// The module cache of ADR 0029, re-exported for hosts that keep one.
pub use skif_js_syntax::{CachedModule, MemoryModuleCache, ModuleCache, ModuleKey, cache_version};
pub use trace::{
    DependencyCredit, DependencyExplanation, DependencyImport, DependencyListing, DependencyReference, DependencyTrace,
    DependencyUse, DependencyVerdict, PackageDependencyUsage, UseKind,
};
pub use tsconfig_files::empty_tsconfig_projects;
pub use usage::{ExportUsage, MemberUse};

const _: () = {
    fn assert_send_sync<T: Send + Sync>() {}
    let _ = assert_send_sync::<JsProvider>;
    let _ = assert_send_sync::<ModuleGraph>;
    let _ = assert_send_sync::<ExportUsage>;
    let _ = assert_send_sync::<DependencyUsage>;
    let _ = assert_send_sync::<SharedModules>;
};