pip-requirements-js
Version:
A robust parser for requirements.txt files
142 lines (141 loc) • 6.12 kB
TypeScript
export type Requirement = ProjectNameRequirement | ProjectURLRequirement | RequirementsFileRequirement | ConstraintsFileRequirement;
/** @example pip == 22.0.2 */
export interface ProjectNameRequirement extends ProjectRequirementBase {
type: 'ProjectName';
versionSpec?: VersionSpec[];
}
/** @example pip @ https://github.com/pypa/pip/archive/22.0.2.zip */
export interface ProjectURLRequirement extends ProjectRequirementBase {
type: 'ProjectURL';
url: string;
}
interface ProjectRequirementBase {
name: string;
extras?: string[];
environmentMarkerTree?: EnvironmentMarker;
}
/** @example -r {path} */
export interface RequirementsFileRequirement extends FileRequirementBase {
type: 'RequirementsFile';
}
/** @example -c {path} */
export interface ConstraintsFileRequirement extends FileRequirementBase {
type: 'ConstraintsFile';
}
interface FileRequirementBase {
path: string;
}
export type EnvironmentMarker = EnvironmentMarkerNode | EnvironmentMarkerLeaf;
export interface EnvironmentMarkerNode {
operator: 'and' | 'or';
left: EnvironmentMarker;
right: EnvironmentMarker;
}
export interface EnvironmentMarkerLeaf {
left: EnvironmentMarkerVariable | PythonString;
operator: EnvironmentMarkerVersionOperator;
right: PythonString | EnvironmentMarkerVariable;
}
/** {@link https://peps.python.org/pep-0508/#environment-markers See reference.} */
export declare enum EnvironmentMarkerVariable {
/** Python equivalent: `'.'.join(platform.python_version_tuple()[:2])` @example 3.11 */
PythonVersion = "python_version",
/** Python equivalent: `platform.python_version()` @example 3.11.2 */
PythonFullVersion = "python_full_version",
/** Python equivalent: `os.name` @example posix */
OsName = "os_name",
/** Python equivalent: `sys.platform` @example linux */
SysPlatform = "sys_platform",
/** Python equivalent: `platform.release()` @example 3.14.1-x86_64-linode39 */
PlatformRelease = "platform_release",
/** Python equivalent: `platform.system()` @example Windows */
PlatformSystem = "platform_system",
/** Python equivalent: `platform.version()` @example #1 SMP Debian 4.19 */
PlatformVersion = "platform_version",
/** Python equivalent: `platform.machine()` @example x86_64 */
PlatformMachine = "platform_machine",
/** Python equivalent: `platform.python_implementation()` @example CPython */
PlatformPythonImplementation = "platform_python_implementation",
/** Python equivalent: `sys.implementation.name` @example cpython */
ImplementationName = "implementation_name",
/** Python equivalent: processed `sys.implementation.version` @example 3.11.2 */
ImplementationVersion = "implementation_version",
/** An error except when defined by the context interpreting the specification @example test */
Extra = "extra"
}
export type PythonString = `"${string}"` | `'${string}'`;
export type EnvironmentMarkerVersionOperator = VersionOperator | 'in' | 'not in';
/** {@link https://peps.python.org/pep-0440/#arbitrary-equality See reference.} */
export interface VersionSpec {
operator: VersionOperator;
version: string;
}
/** {@link https://peps.python.org/pep-0440/#version-specifiers See reference.} */
export declare enum VersionOperator {
/** {@link https://peps.python.org/pep-0440/#compatible-release See reference.} */
CompatibleRelease = "~=",
/** {@link https://peps.python.org/pep-0440/#version-matching See reference.} */
VersionMatching = "==",
/** {@link https://peps.python.org/pep-0440/#version-exclusion See reference.} */
VersionExclusion = "!=",
/** {@link https://peps.python.org/pep-0440/#inclusive-ordered-comparison See reference.} */
LessThanOrMatching = "<=",
/** {@link https://peps.python.org/pep-0440/#inclusive-ordered-comparison See reference.} */
GreaterThanOrMatching = ">=",
/** {@link https://peps.python.org/pep-0440/#exclusive-ordered-comparison See reference.} */
LessThan = "<",
/** {@link https://peps.python.org/pep-0440/#exclusive-ordered-comparison See reference.} */
GreaterThan = ">",
/** {@link https://peps.python.org/pep-0440/#arbitrary-equality See reference.} */
ArbitrarilyEqual = "==="
}
/** Barebones name requirement parsed in loose mode. */
export interface LooseProjectNameRequirement {
type: 'ProjectName';
name: string;
versionSpec?: LooseVersionSpec[];
extras?: string[];
}
export interface LooseVersionSpec {
operator: string;
version?: string;
}
export interface SourceLocation {
startIdx: number;
endIdx: number;
}
export interface WithLocation<T> {
data: T;
location: SourceLocation;
}
export type ProjectNameRequirementWithLocation = WithLocation<ProjectRequirementBaseWithLocation & {
type: 'ProjectName';
versionSpec?: WithLocation<VersionSpecWithLocation>[];
}>;
export type ProjectURLRequirementWithLocation = WithLocation<ProjectRequirementBaseWithLocation & {
type: 'ProjectURL';
url: WithLocation<string>;
}>;
interface ProjectRequirementBaseWithLocation {
name: WithLocation<string>;
extras?: WithLocation<string>[];
environmentMarkerTree?: WithLocation<EnvironmentMarker>;
}
export interface VersionSpecWithLocation {
operator: WithLocation<VersionOperator>;
version: WithLocation<string>;
}
export type RequirementsFileRequirementWithLocation = WithLocation<RequirementsFileRequirement>;
export type ConstraintsFileRequirementWithLocation = WithLocation<ConstraintsFileRequirement>;
export type RequirementWithLocation = ProjectNameRequirementWithLocation | ProjectURLRequirementWithLocation | RequirementsFileRequirementWithLocation | ConstraintsFileRequirementWithLocation;
export type LooseProjectNameRequirementWithLocation = WithLocation<{
type: 'ProjectName';
name: WithLocation<string>;
versionSpec?: WithLocation<LooseVersionSpecWithLocation>[];
extras?: WithLocation<string>[];
}>;
export interface LooseVersionSpecWithLocation {
operator: WithLocation<string>;
version?: WithLocation<string>;
}
export {};