%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : kowitt.ac.th / Your IP : 216.73.216.120 Web Server : Microsoft-IIS/7.5 System : Windows NT SERVER02 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.6.31 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Program Files/Microsoft VS Code/resources/app/extensions/extension-editing/out/ |
Upload File : |
"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [0, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); var fs = require("fs"); var path = require("path"); var nls = require("vscode-nls"); var localize = nls.loadMessageBundle(__filename); var jsonc_parser_1 = require("jsonc-parser"); var vscode_1 = require("vscode"); var product = require('../../../product.json'); var allowedBadgeProviders = (product.extensionAllowedBadgeProviders || []).map(function (s) { return s.toLowerCase(); }); var httpsRequired = localize(0, null); var svgsNotValid = localize(1, null); var embeddedSvgsNotValid = localize(2, null); var dataUrlsNotValid = localize(3, null); var relativeUrlRequiresHttpsRepository = localize(4, null); var relativeIconUrlRequiresHttpsRepository = localize(5, null); var relativeBadgeUrlRequiresHttpsRepository = localize(6, null); var Context; (function (Context) { Context[Context["ICON"] = 0] = "ICON"; Context[Context["BADGE"] = 1] = "BADGE"; Context[Context["MARKDOWN"] = 2] = "MARKDOWN"; })(Context || (Context = {})); var ExtensionLinter = /** @class */ (function () { function ExtensionLinter() { var _this = this; this.diagnosticsCollection = vscode_1.languages.createDiagnosticCollection('extension-editing'); this.fileWatcher = vscode_1.workspace.createFileSystemWatcher('**/package.json'); this.disposables = [this.diagnosticsCollection, this.fileWatcher]; this.folderToPackageJsonInfo = {}; this.packageJsonQ = new Set(); this.readmeQ = new Set(); this.disposables.push(vscode_1.workspace.onDidOpenTextDocument(function (document) { return _this.queue(document); }), vscode_1.workspace.onDidChangeTextDocument(function (event) { return _this.queue(event.document); }), vscode_1.workspace.onDidCloseTextDocument(function (document) { return _this.clear(document); }), this.fileWatcher.onDidChange(function (uri) { return _this.packageJsonChanged(_this.getUriFolder(uri)); }), this.fileWatcher.onDidCreate(function (uri) { return _this.packageJsonChanged(_this.getUriFolder(uri)); }), this.fileWatcher.onDidDelete(function (uri) { return _this.packageJsonChanged(_this.getUriFolder(uri)); })); vscode_1.workspace.textDocuments.forEach(function (document) { return _this.queue(document); }); } ExtensionLinter.prototype.queue = function (document) { var p = document.uri.path; if (document.languageId === 'json' && endsWith(p, '/package.json')) { this.packageJsonQ.add(document); this.startTimer(); } this.queueReadme(document); }; ExtensionLinter.prototype.queueReadme = function (document) { var p = document.uri.path; if (document.languageId === 'markdown' && (endsWith(p.toLowerCase(), '/readme.md') || endsWith(p.toLowerCase(), '/changelog.md'))) { this.readmeQ.add(document); this.startTimer(); } }; ExtensionLinter.prototype.startTimer = function () { var _this = this; if (this.timer) { clearTimeout(this.timer); } this.timer = setTimeout(function () { _this.lint() .catch(console.error); }, 300); }; ExtensionLinter.prototype.lint = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: this.lintPackageJson(); return [4 /*yield*/, this.lintReadme()]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; ExtensionLinter.prototype.lintPackageJson = function () { var _this = this; this.packageJsonQ.forEach(function (document) { _this.packageJsonQ.delete(document); if (document.isClosed) { return; } var diagnostics = []; var tree = jsonc_parser_1.parseTree(document.getText()); var info = _this.readPackageJsonInfo(_this.getUriFolder(document.uri), tree); if (info.isExtension) { var icon = jsonc_parser_1.findNodeAtLocation(tree, ['icon']); if (icon && icon.type === 'string') { _this.addDiagnostics(diagnostics, document, icon.offset + 1, icon.offset + icon.length - 1, icon.value, Context.ICON, info); } var badges = jsonc_parser_1.findNodeAtLocation(tree, ['badges']); if (badges && badges.type === 'array') { badges.children.map(function (child) { return jsonc_parser_1.findNodeAtLocation(child, ['url']); }) .filter(function (url) { return url && url.type === 'string'; }) .map(function (url) { return _this.addDiagnostics(diagnostics, document, url.offset + 1, url.offset + url.length - 1, url.value, Context.BADGE, info); }); } } _this.diagnosticsCollection.set(document.uri, diagnostics); }); }; ExtensionLinter.prototype.lintReadme = function () { return __awaiter(this, void 0, void 0, function () { var _loop_1, this_1, _i, _a, document, state_1; var _this = this; return __generator(this, function (_b) { switch (_b.label) { case 0: _loop_1 = function (document) { var folder, info, tree, text, tokens, tokensAndPositions, diagnostics, svgStart, _loop_2, _i, tokensAndPositions_1, tnp; return __generator(this, function (_a) { switch (_a.label) { case 0: this_1.readmeQ.delete(document); if (document.isClosed) { return [2 /*return*/, { value: void 0 }]; } folder = this_1.getUriFolder(document.uri); info = this_1.folderToPackageJsonInfo[folder.toString()]; if (!!info) return [3 /*break*/, 2]; return [4 /*yield*/, this_1.loadPackageJson(folder)]; case 1: tree = _a.sent(); info = this_1.readPackageJsonInfo(folder, tree); _a.label = 2; case 2: if (!info.isExtension) { this_1.diagnosticsCollection.set(document.uri, []); return [2 /*return*/, { value: void 0 }]; } text = document.getText(); if (!!this_1.markdownIt) return [3 /*break*/, 4]; return [4 /*yield*/, Promise.resolve().then(function () { return require('markdown-it'); })]; case 3: this_1.markdownIt = new (_a.sent()); _a.label = 4; case 4: tokens = this_1.markdownIt.parse(text, {}); tokensAndPositions = (function toTokensAndPositions(tokens, begin, end) { var _this = this; if (begin === void 0) { begin = 0; } if (end === void 0) { end = text.length; } var tokensAndPositions = tokens.map(function (token) { if (token.map) { var tokenBegin = document.offsetAt(new vscode_1.Position(token.map[0], 0)); var tokenEnd = begin = document.offsetAt(new vscode_1.Position(token.map[1], 0)); return { token: token, begin: tokenBegin, end: tokenEnd }; } var image = token.type === 'image' && _this.locateToken(text, begin, end, token, token.attrGet('src')); var other = image || _this.locateToken(text, begin, end, token, token.content); return other || { token: token, begin: begin, end: begin }; }); return tokensAndPositions.concat.apply(tokensAndPositions, tokensAndPositions.filter(function (tnp) { return tnp.token.children && tnp.token.children.length; }) .map(function (tnp) { return toTokensAndPositions.call(_this, tnp.token.children, tnp.begin, tnp.end); })); }).call(this_1, tokens); diagnostics = []; tokensAndPositions.filter(function (tnp) { return tnp.token.type === 'image' && tnp.token.attrGet('src'); }) .map(function (inp) { var src = inp.token.attrGet('src'); var begin = text.indexOf(src, inp.begin); if (begin !== -1 && begin < inp.end) { _this.addDiagnostics(diagnostics, document, begin, begin + src.length, src, Context.MARKDOWN, info); } else { var content = inp.token.content; var begin_1 = text.indexOf(content, inp.begin); if (begin_1 !== -1 && begin_1 < inp.end) { _this.addDiagnostics(diagnostics, document, begin_1, begin_1 + content.length, src, Context.MARKDOWN, info); } } }); _loop_2 = function (tnp) { var parse5, parser; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!(tnp.token.type === 'text' && tnp.token.content)) return [3 /*break*/, 2]; return [4 /*yield*/, Promise.resolve().then(function () { return require('parse5'); })]; case 1: parse5 = _a.sent(); parser = new parse5.SAXParser({ locationInfo: true }); parser.on('startTag', function (name, attrs, selfClosing, location) { if (name === 'img') { var src = attrs.find(function (a) { return a.name === 'src'; }); if (src && src.value) { var begin = text.indexOf(src.value, tnp.begin + location.startOffset); if (begin !== -1 && begin < tnp.end) { _this.addDiagnostics(diagnostics, document, begin, begin + src.value.length, src.value, Context.MARKDOWN, info); } } } else if (name === 'svg') { var begin = tnp.begin + location.startOffset; var end = tnp.begin + location.endOffset; var range = new vscode_1.Range(document.positionAt(begin), document.positionAt(end)); svgStart = new vscode_1.Diagnostic(range, embeddedSvgsNotValid, vscode_1.DiagnosticSeverity.Warning); diagnostics.push(svgStart); } }); parser.on('endTag', function (name, location) { if (name === 'svg' && svgStart) { var end = tnp.begin + location.endOffset; svgStart.range = new vscode_1.Range(svgStart.range.start, document.positionAt(end)); } }); parser.write(tnp.token.content); parser.end(); _a.label = 2; case 2: return [2 /*return*/]; } }); }; _i = 0, tokensAndPositions_1 = tokensAndPositions; _a.label = 5; case 5: if (!(_i < tokensAndPositions_1.length)) return [3 /*break*/, 8]; tnp = tokensAndPositions_1[_i]; return [5 /*yield**/, _loop_2(tnp)]; case 6: _a.sent(); _a.label = 7; case 7: _i++; return [3 /*break*/, 5]; case 8: this_1.diagnosticsCollection.set(document.uri, diagnostics); return [2 /*return*/]; } }); }; this_1 = this; _i = 0, _a = Array.from(this.readmeQ); _b.label = 1; case 1: if (!(_i < _a.length)) return [3 /*break*/, 4]; document = _a[_i]; return [5 /*yield**/, _loop_1(document)]; case 2: state_1 = _b.sent(); if (typeof state_1 === "object") return [2 /*return*/, state_1.value]; _b.label = 3; case 3: _i++; return [3 /*break*/, 1]; case 4: return [2 /*return*/]; } }); }); }; ExtensionLinter.prototype.locateToken = function (text, begin, end, token, content) { if (content) { var tokenBegin = text.indexOf(content, begin); if (tokenBegin !== -1) { var tokenEnd = tokenBegin + content.length; if (tokenEnd <= end) { begin = tokenEnd; return { token: token, begin: tokenBegin, end: tokenEnd }; } } } }; ExtensionLinter.prototype.readPackageJsonInfo = function (folder, tree) { var engine = tree && jsonc_parser_1.findNodeAtLocation(tree, ['engines', 'vscode']); var repo = tree && jsonc_parser_1.findNodeAtLocation(tree, ['repository', 'url']); var info = { isExtension: !!(engine && engine.type === 'string'), hasHttpsRepository: !!(repo && repo.type === 'string' && repo.value && parseUri(repo.value).scheme.toLowerCase() === 'https') }; var str = folder.toString(); var oldInfo = this.folderToPackageJsonInfo[str]; if (oldInfo && (oldInfo.isExtension !== info.isExtension || oldInfo.hasHttpsRepository !== info.hasHttpsRepository)) { this.packageJsonChanged(folder); // clears this.folderToPackageJsonInfo[str] } this.folderToPackageJsonInfo[str] = info; return info; }; ExtensionLinter.prototype.loadPackageJson = function (folder) { return __awaiter(this, void 0, void 0, function () { var file, exists, document; return __generator(this, function (_a) { switch (_a.label) { case 0: file = folder.with({ path: path.posix.join(folder.path, 'package.json') }); return [4 /*yield*/, fileExists(file.fsPath)]; case 1: exists = _a.sent(); if (!exists) { return [2 /*return*/, undefined]; } return [4 /*yield*/, vscode_1.workspace.openTextDocument(file)]; case 2: document = _a.sent(); return [2 /*return*/, jsonc_parser_1.parseTree(document.getText())]; } }); }); }; ExtensionLinter.prototype.packageJsonChanged = function (folder) { var _this = this; delete this.folderToPackageJsonInfo[folder.toString()]; var str = folder.toString().toLowerCase(); vscode_1.workspace.textDocuments.filter(function (document) { return _this.getUriFolder(document.uri).toString().toLowerCase() === str; }) .forEach(function (document) { return _this.queueReadme(document); }); }; ExtensionLinter.prototype.getUriFolder = function (uri) { return uri.with({ path: path.posix.dirname(uri.path) }); }; ExtensionLinter.prototype.addDiagnostics = function (diagnostics, document, begin, end, src, context, info) { var uri = parseUri(src); var scheme = uri.scheme.toLowerCase(); if (scheme && scheme !== 'https' && scheme !== 'data') { var range = new vscode_1.Range(document.positionAt(begin), document.positionAt(end)); diagnostics.push(new vscode_1.Diagnostic(range, httpsRequired, vscode_1.DiagnosticSeverity.Warning)); } if (scheme === 'data') { var range = new vscode_1.Range(document.positionAt(begin), document.positionAt(end)); diagnostics.push(new vscode_1.Diagnostic(range, dataUrlsNotValid, vscode_1.DiagnosticSeverity.Warning)); } if (!scheme && !info.hasHttpsRepository) { var range = new vscode_1.Range(document.positionAt(begin), document.positionAt(end)); var message = (function () { switch (context) { case Context.ICON: return relativeIconUrlRequiresHttpsRepository; case Context.BADGE: return relativeBadgeUrlRequiresHttpsRepository; default: return relativeUrlRequiresHttpsRepository; } })(); diagnostics.push(new vscode_1.Diagnostic(range, message, vscode_1.DiagnosticSeverity.Warning)); } if (endsWith(uri.path.toLowerCase(), '.svg') && allowedBadgeProviders.indexOf(uri.authority.toLowerCase()) === -1) { var range = new vscode_1.Range(document.positionAt(begin), document.positionAt(end)); diagnostics.push(new vscode_1.Diagnostic(range, svgsNotValid, vscode_1.DiagnosticSeverity.Warning)); } }; ExtensionLinter.prototype.clear = function (document) { this.diagnosticsCollection.delete(document.uri); this.packageJsonQ.delete(document); }; ExtensionLinter.prototype.dispose = function () { this.disposables.forEach(function (d) { return d.dispose(); }); this.disposables = []; }; return ExtensionLinter; }()); exports.ExtensionLinter = ExtensionLinter; function endsWith(haystack, needle) { var diff = haystack.length - needle.length; if (diff > 0) { return haystack.indexOf(needle, diff) === diff; } else if (diff === 0) { return haystack === needle; } else { return false; } } function fileExists(path) { return new Promise(function (resolve, reject) { fs.lstat(path, function (err, stats) { if (!err) { resolve(true); } else if (err.code === 'ENOENT') { resolve(false); } else { reject(err); } }); }); } function parseUri(src) { try { return vscode_1.Uri.parse(src); } catch (err) { try { return vscode_1.Uri.parse(encodeURI(src)); } catch (err) { return vscode_1.Uri.parse(''); } } } //# sourceMappingURL=https://ticino.blob.core.windows.net/sourcemaps/0f080e5267e829de46638128001aeb7ca2d6d50e/extensions\extension-editing\out/extensionLinter.js.map