dockerfile-language-service
Version:
A language service for Dockerfiles to enable the creation of feature-rich Dockerfile editors.
88 lines (87 loc) • 3.96 kB
JavaScript
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "vscode-languageserver-types", "dockerfile-ast"], factory);
}
})(function (require, exports) {
/* --------------------------------------------------------------------------------------------
* Copyright (c) Remy Suen. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
* ------------------------------------------------------------------------------------------ */
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
exports.DockerLinks = void 0;
var vscode_languageserver_types_1 = require("vscode-languageserver-types");
var dockerfile_ast_1 = require("dockerfile-ast");
var DockerLinks = /** @class */ (function () {
function DockerLinks() {
}
DockerLinks.prototype.getLinks = function (content) {
var dockerfile = dockerfile_ast_1.DockerfileParser.parse(content);
var links = [];
var stages = dockerfile.getFROMs().reduce(function (accumulator, from) {
var stage = from.getBuildStage();
if (stage !== null) {
accumulator.push(stage);
}
return accumulator;
}, []);
for (var _i = 0, _a = dockerfile.getFROMs(); _i < _a.length; _i++) {
var from = _a[_i];
var name = from.getImageName();
var registry = from.getRegistry();
if (registry === "ghcr.io") {
var idx = name.lastIndexOf("/");
if (idx === -1) {
continue;
}
links.push({
range: vscode_languageserver_types_1.Range.create(from.getRegistryRange().start, from.getImageNameRange().end),
target: "https://github.com/".concat(name, "/pkgs/container/").concat(name.substring(idx + 1))
});
continue;
}
if (registry === "mcr.microsoft.com") {
links.push({
range: vscode_languageserver_types_1.Range.create(from.getRegistryRange().start, from.getImageNameRange().end),
target: "https://mcr.microsoft.com/artifact/mar/" + name
});
continue;
}
if (registry === "quay.io") {
links.push({
range: vscode_languageserver_types_1.Range.create(from.getRegistryRange().start, from.getImageNameRange().end),
target: "https://quay.io/repository/" + name
});
continue;
}
if (name !== null && stages.indexOf(name) === -1) {
if (name.indexOf('/') === -1) {
links.push({
range: from.getImageNameRange(),
data: "_/" + name + '/'
});
}
else {
links.push({
range: from.getImageNameRange(),
data: "r/" + name + '/'
});
}
}
}
return links;
};
DockerLinks.prototype.resolveLink = function (link) {
if (link.data) {
link.target = "https://hub.docker.com/" + link.data;
}
return link;
};
return DockerLinks;
}());
exports.DockerLinks = DockerLinks;
});