@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
87 lines (85 loc) • 3.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const plugin_error_1 = tslib_1.__importDefault(require("plugin-error"));
const through2_1 = tslib_1.__importDefault(require("through2"));
const PLUGIN_NAME = 'schema-form-validate-resource-string';
function gulpSchemaFormResourceStringValidator(options) {
const resourceKeyPrefix = 'resources:strings:';
let strings;
function checkFile(file) {
let validationResult = true;
let stringsFile = process.cwd() + '/src/assets/strings/strings.json';
if (options && options.stringsFile) {
stringsFile = options.stringsFile;
}
strings = require(stringsFile);
const lines = file.contents.toString('utf8').split('\n');
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
const resourceStringStartIndex = line.indexOf(resourceKeyPrefix);
if (resourceStringStartIndex !== -1) {
const resourceString = getResourceString(line, resourceStringStartIndex);
if (resourceString) {
const result = checkResourceString(resourceString);
if (!result) {
// eslint-disable-next-line no-console
console.error('ERROR: '
+ file.path
+ '['
+ (i + 1)
+ ', '
+ resourceStringStartIndex
+ ']: Cannot find resource key: '
+ resourceString);
validationResult = false;
}
}
}
}
return validationResult;
}
function checkResourceString(resourceString) {
let currentObject = strings.Strings;
const resourceStringSections = resourceString.split('.');
let valid = true;
for (let i = 0; i < resourceStringSections.length; i++) {
const resourceStringSection = resourceStringSections[i];
if (currentObject.hasOwnProperty(resourceStringSection)) {
currentObject = currentObject[resourceStringSection];
}
else {
valid = false;
break;
}
}
return valid;
}
function getResourceString(code, resourceStringStartIndex) {
let result = '';
let useSingleQuote = true;
if (code[resourceStringStartIndex - 1] === '""') {
useSingleQuote = false;
}
for (let i = resourceStringStartIndex + resourceKeyPrefix.length; i < code.length; i++) {
if (((useSingleQuote && code[i] === '\'') || (!useSingleQuote && code === '"'))
&& code[i - 1] !== '\\') {
break;
}
result += code[i];
}
return result;
}
return through2_1.default.obj(
/**
* Transform
*/
function (file, encoding, callback) {
if (checkFile(file)) {
return callback();
}
callback(new plugin_error_1.default({ plugin: PLUGIN_NAME, message: 'Schema resource string validation failed.' }));
});
}
module.exports = gulpSchemaFormResourceStringValidator;
//# sourceMappingURL=index.js.map