@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
1 lines • 6.59 kB
Source Map (JSON)
{"version":3,"sources":["../../../packages/tools/gulp-svg-code/svg-code-convert.ts"],"names":[],"mappings":"AAIA,qBAAa,gBAAgB;IACzB,OAAO,CAAC,MAAM,CAAC,aAAa,CAQ9B;IACE,OAAO,CAAC,MAAM,CAAC,cAAc,CAE/B;IACE,OAAO,CAAC,MAAM,CAAC,cAAc,CAK/B;IACE,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAgB;IAEhC,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAEM,YAAY,IAAI,IAAI;IAKpB,QAAQ,CAAC,UAAU,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ/E,OAAO,CAAC,OAAO;IAkEf,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,MAAM;CAQjB","file":"svg-code-convert.d.ts","sourcesContent":["/* eslint-disable unused-imports/no-unused-vars */\r\ndeclare function escape(data: string): string;\r\ndeclare function unescape(data: string): string;\r\n\r\nexport class SvgCodeConverter {\r\n private static openContentTs =\r\n`/* eslint:disable */\r\n/**\r\n * @file Source code generated by gulp-svg-code.\r\n * @version 1.0\r\n */\r\nexport module Svg {\r\n 'use strict'\r\n`;\r\n private static closeContentTs =\r\n`}\r\n`;\r\n private static openContentCss =\r\n`/**\r\n * @file Source code generated by gulp-svg-code.\r\n * @version 1.0\r\n */\r\n`;\r\n private outputCss: string[] = [];\r\n private outputTs: string[] = [];\r\n\r\n public get contentCss(): string {\r\n return this.outputCss.join('');\r\n }\r\n\r\n public get contentTs(): string {\r\n return this.outputTs.join('');\r\n }\r\n\r\n public contentReset(): void {\r\n this.outputCss = [];\r\n this.outputTs = [];\r\n }\r\n\r\n public generate(collection: { [index: string]: any }, pathPrefix: string): void {\r\n const root = this.createStructure(collection, pathPrefix);\r\n this.outputCss.push(SvgCodeConverter.openContentCss);\r\n this.outputTs.push(SvgCodeConverter.openContentTs);\r\n this.addData(root, []);\r\n this.outputTs.push(SvgCodeConverter.closeContentTs);\r\n }\r\n\r\n private addData(current: any, segments: string[]): void {\r\n const ignores = [ '<?xml', '<!-- Generator:', '<!DOCTYPE' ];\r\n const nested: any[] = [];\r\n const keys = Object.keys(current);\r\n for (const key of keys) {\r\n const content = current[key];\r\n segments.push(key);\r\n\r\n if (typeof content === 'object') {\r\n const segs = segments.slice(0);\r\n nested.push({ content, segs });\r\n } else if (typeof content === 'string') {\r\n const cssName = '.svg-' + segments.join('--');\r\n this.outputCss.push(cssName + ' {\\r\\n');\r\n this.outputCss.push(this.indent(1) + 'background-image: url(\"data:image/svg+xml;');\r\n\r\n this.outputTs.push(this.indent(segments.length) + 'export const ' + key + ' = \\'');\r\n\r\n const lines = content.split('\\r');\r\n let svg = '';\r\n lines.forEach((value, index, array) => {\r\n value = value.replace('\\n', '');\r\n if (value && value.length > 1) {\r\n let skip = false;\r\n for (const item of ignores) {\r\n if (value.indexOf(item) >= 0) {\r\n skip = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!skip) {\r\n svg += value;\r\n // this.outputCss.push(value);\r\n this.outputTs.push(value);\r\n }\r\n }\r\n });\r\n\r\n svg = this.replaceAll(svg, '\"', '\\'');\r\n svg = this.replaceAll(svg, '%', '%25');\r\n svg = this.replaceAll(svg, '#', '%23');\r\n svg = this.replaceAll(svg, '{', '%7B');\r\n svg = this.replaceAll(svg, '}', '%7D');\r\n svg = this.replaceAll(svg, '<', '%3C');\r\n svg = this.replaceAll(svg, '>', '%3E');\r\n this.outputCss.push('charset=utf8,' + svg);\r\n\r\n this.outputCss.push('\");\\r\\n');\r\n this.outputCss.push('}\\r\\n');\r\n this.outputCss.push('\\r\\n');\r\n\r\n this.outputTs.push('\\';\\r\\n');\r\n }\r\n\r\n segments.pop();\r\n }\r\n\r\n for (let index = 0; index < nested.length; index++) {\r\n const { content, segs } = nested[index];\r\n this.outputTs.push(this.indent(segs.length) + 'export module ' + segs[segs.length - 1] + ' {\\r\\n');\r\n this.addData(nested[index].content, nested[index].segs);\r\n this.outputTs.push(this.indent(segs.length) + '}\\r\\n');\r\n }\r\n }\r\n\r\n private createStructure(collection: { [index: string]: any }, pathPrefix: string): any {\r\n const root = {};\r\n const keys = Object.keys(collection).sort((left, right) => left.toLowerCase().localeCompare(right.toLowerCase()));\r\n for (const key of keys) {\r\n let shortName = key.substring(0, key.length - '.svg'.length);\r\n shortName = this.replaceAll(shortName.substring(pathPrefix.length + 1), '-', '_').toLowerCase();\r\n const segments = shortName.split('\\\\');\r\n let current = root;\r\n for (let index = 0; index < segments.length - 1; index++) {\r\n const segment = segments[index];\r\n if (current.hasOwnProperty(segment)) {\r\n current = current[segment];\r\n } else {\r\n current[segment] = {};\r\n current = current[segment];\r\n }\r\n }\r\n\r\n current[segments[segments.length - 1]] = collection[key];\r\n }\r\n\r\n return root;\r\n }\r\n\r\n private regexEscape(str: string): string {\r\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\r\n }\r\n\r\n private replaceAll(input: string, searchValue: string, replaceValue: string): string {\r\n return input.replace(new RegExp(this.regexEscape(searchValue), 'g'), replaceValue);\r\n }\r\n\r\n private indent(count: number): string {\r\n let pad = '';\r\n for (let i = 0; i < count; i++) {\r\n pad += ' ';\r\n }\r\n\r\n return pad;\r\n }\r\n}\r\n"]}