syncpack
Version:
Consistent dependency versions in large JavaScript Monorepos
76 lines (75 loc) • 2.82 kB
JavaScript
import { DELETE } from '../version-group/lib/delete.js';
import { AliasSpecifier } from './alias.js';
import { DeleteSpecifier } from './delete.js';
import { ExactSpecifier } from './exact.js';
import { FileSpecifier } from './file.js';
import { HostedGitSpecifier } from './hosted-git.js';
import { LatestSpecifier } from './latest.js';
import { parseSpecifier } from './lib/parse-specifier.js';
import { RangeSpecifier } from './range.js';
import { TagSpecifier } from './tag.js';
import { UnsupportedSpecifier } from './unsupported.js';
import { UrlSpecifier } from './url.js';
import { WorkspaceProtocolSpecifier } from './workspace-protocol.js';
export var Specifier;
(function (Specifier) {
Specifier.Alias = AliasSpecifier;
Specifier.Delete = DeleteSpecifier;
Specifier.Exact = ExactSpecifier;
Specifier.File = FileSpecifier;
Specifier.HostedGit = HostedGitSpecifier;
Specifier.Latest = LatestSpecifier;
Specifier.Range = RangeSpecifier;
Specifier.Tag = TagSpecifier;
Specifier.Unsupported = UnsupportedSpecifier;
Specifier.Url = UrlSpecifier;
Specifier.WorkspaceProtocol = WorkspaceProtocolSpecifier;
function create(instance, raw) {
if (raw === DELETE) {
return new Specifier.Delete({ instance, raw });
}
if (!raw) {
return new Specifier.Unsupported({ instance, raw });
}
try {
const data = {
instance,
raw: raw === 'latest' ? '*' : raw,
};
const parsed = parseSpecifier(instance.name, data.raw, instance.packageJsonFile);
const type = parsed.type;
if (data.raw === '*') {
return new Specifier.Latest(data);
}
if (type === 'version') {
return new Specifier.Exact(data);
}
if (type === 'range') {
return new Specifier.Range(data);
}
if (type === 'workspaceProtocol') {
return new Specifier.WorkspaceProtocol(data);
}
if (type === 'alias') {
return new Specifier.Alias(data);
}
if (type === 'file' || type === 'directory') {
return new Specifier.File(data);
}
if (type === 'remote') {
return new Specifier.Url(data);
}
if (type === 'git') {
return new Specifier.HostedGit(data);
}
if (type === 'tag') {
return new Specifier.Tag(data);
}
return new Specifier.Unsupported(data);
}
catch {
return new Specifier.Unsupported({ instance, raw });
}
}
Specifier.create = create;
})(Specifier || (Specifier = {}));