@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
1 lines • 3.69 kB
Source Map (JSON)
{"version":3,"sources":["../../../packages/tools/gulp-schema-form/index.ts"],"names":[],"mappings":"","file":"index.d.ts","sourcesContent":["import pluginError from 'plugin-error';\r\nimport through2 from 'through2';\r\n\r\nconst PLUGIN_NAME = 'schema-form-validate-resource-string';\r\n\r\nfunction gulpSchemaFormResourceStringValidator(options) {\r\n const resourceKeyPrefix = 'resources:strings:';\r\n let strings;\r\n\r\n function checkFile(file): boolean {\r\n let validationResult = true;\r\n let stringsFile = process.cwd() + '/src/assets/strings/strings.json';\r\n if (options && options.stringsFile) {\r\n stringsFile = options.stringsFile;\r\n }\r\n strings = require(stringsFile);\r\n const lines = file.contents.toString('utf8').split('\\n');\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i];\r\n const resourceStringStartIndex = line.indexOf(resourceKeyPrefix);\r\n if (resourceStringStartIndex !== -1) {\r\n const resourceString = getResourceString(line, resourceStringStartIndex);\r\n if (resourceString) {\r\n const result = checkResourceString(resourceString);\r\n if (!result) {\r\n // eslint-disable-next-line no-console\r\n console.error(\r\n 'ERROR: '\r\n + file.path\r\n + '['\r\n + (i + 1)\r\n + ', '\r\n + resourceStringStartIndex\r\n + ']: Cannot find resource key: '\r\n + resourceString);\r\n validationResult = false;\r\n }\r\n }\r\n }\r\n }\r\n return validationResult;\r\n }\r\n\r\n function checkResourceString(resourceString: string): boolean {\r\n let currentObject = strings.Strings;\r\n const resourceStringSections = resourceString.split('.');\r\n let valid = true;\r\n for (let i = 0; i < resourceStringSections.length; i++) {\r\n const resourceStringSection = resourceStringSections[i];\r\n if (currentObject.hasOwnProperty(resourceStringSection)) {\r\n currentObject = currentObject[resourceStringSection];\r\n } else {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n return valid;\r\n }\r\n\r\n function getResourceString(code: string, resourceStringStartIndex: number): string {\r\n let result = '';\r\n let useSingleQuote = true;\r\n if (code[resourceStringStartIndex - 1] === '\"\"') {\r\n useSingleQuote = false;\r\n }\r\n for (let i = resourceStringStartIndex + resourceKeyPrefix.length; i < code.length; i++) {\r\n if (((useSingleQuote && code[i] === '\\'') || (!useSingleQuote && code === '\"'))\r\n && code[i - 1] !== '\\\\') {\r\n break;\r\n }\r\n\r\n result += code[i];\r\n }\r\n return result;\r\n }\r\n\r\n return through2.obj(\r\n /**\r\n * Transform\r\n */\r\n function (file, encoding, callback) {\r\n if (checkFile(file)) {\r\n return callback();\r\n }\r\n callback(new pluginError({ plugin: PLUGIN_NAME, message: 'Schema resource string validation failed.' }));\r\n });\r\n}\r\nmodule.exports = gulpSchemaFormResourceStringValidator;\r\n"]}