{"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"]}