@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
1 lines • 13.4 kB
Source Map (JSON)
{"version":3,"sources":["../../../packages/tools/gulp-ps-code/ps-code-convert.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,OAAO;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IAClB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,MAAM;IACnB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;CAC1B;AAED,qBAAa,eAAe;IAkDZ,OAAO,CAAC,OAAO;IAjD3B,OAAc,YAAY,SAAmB;IAC7C,OAAc,cAAc,SAAqB;IACjD,OAAc,KAAK,WAa8C;IAEjE,OAAO,CAAC,MAAM,CAAC,SAAS,CAMtB;IACF,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA6B;IAC9D,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAA8B;IAChE,OAAO,CAAC,MAAM,CAAC,aAAa,CAAwB;IACpD,OAAO,CAAC,MAAM,CAAC,cAAc,CAAyB;IACtD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAQ;IACnC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAQ;IACjC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAO;IAC7B,OAAO,CAAC,MAAM,CAAC,WAAW,CAQ5B;IACE,OAAO,CAAC,MAAM,CAAC,YAAY,CAE7B;IACE,OAAO,CAAC,MAAM,CAAC,aAAa,CAAQ;IACpC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAQ;IAElC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,mBAAmB,CAAQ;gBAEf,OAAO,EAAE,OAAO;IAGpC,IAAW,OAAO,IAAI,MAAM,CAE3B;IAEM,YAAY,IAAI,IAAI;IAIpB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgBrC,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,OAAO;IAsGf,OAAO,CAAC,MAAM;CAQjB","file":"ps-code-convert.d.ts","sourcesContent":["/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable no-console */\r\ndeclare function escape(data: string): string;\r\ndeclare function unescape(data: string): string;\r\n\r\nexport interface Options {\r\n powerShellModuleName: string;\r\n name: string;\r\n basePath: string;\r\n generatedPath: string;\r\n noComments: boolean;\r\n validate: boolean;\r\n jea: boolean;\r\n resourceName?: string;\r\n prefixName?: string;\r\n}\r\n\r\nexport interface Group {\r\n [index: string]: string;\r\n}\r\n\r\nexport interface Groups {\r\n [index: string]: Group;\r\n}\r\n\r\nexport class PsCodeConverter {\r\n public static defaultGroup = '!!##default__';\r\n public static generatedGroup = '!!##generated__';\r\n public static verbs = [\r\n 'Add', 'Clear', 'Close', 'Copy', 'Enter', 'Exit', 'Find', 'Format', 'Get',\r\n 'Hide', 'Join', 'Lock', 'Move', 'New', 'Open', 'Optimize', 'Pop', 'Push',\r\n 'Redo', 'Remove', 'Rename', 'Reset', 'Resize', 'Search', 'Select', 'Set',\r\n 'Show', 'Skip', 'Split', 'Step', 'Switch', 'Undo', 'Unlock', 'Watch', 'Backup',\r\n 'Checkpoint', 'Compare', 'Compress', 'Convert', 'ConvertFrom', 'ConvertTo',\r\n 'Dismount', 'Edit', 'Expand', 'Export', 'Group', 'Import', 'Initialize',\r\n 'Limit', 'Merge', 'Mount', 'Out', 'Publish', 'Restore', 'Save', 'Sync',\r\n 'Unpublish', 'Update', 'Approve', 'Assert', 'Complete', 'Confirm', 'Deny',\r\n 'Disable', 'Enable', 'Install', 'Invoke', 'Register', 'Request', 'Restart',\r\n 'Resume', 'Start', 'Stop', 'Submit', 'Suspend', 'Uninstall', 'Unregister',\r\n 'Wait', 'Debug', 'Measure', 'Ping', 'Repair', 'Resolve', 'Test', 'Trace',\r\n 'Connect', 'Disconnect', 'Read', 'Receive', 'Send', 'Write', 'Block',\r\n 'Grant', 'Protect', 'Revoke', 'Unblock', 'Unprotect', 'Use'];\r\n\r\n private static fullNames = [\r\n 'Microsoft.PowerShell.Core\\\\Get-Help',\r\n 'Microsoft.PowerShell.Core\\\\Out-Default',\r\n 'Microsoft.PowerShell.Utility\\\\Get-FormatData',\r\n 'Microsoft.PowerShell.Utility\\\\Measure-Object',\r\n 'Microsoft.PowerShell.Utility\\\\Select-Object'\r\n ];\r\n private static removeCommentsTrue = '##RemoveComments=true##';\r\n private static removeCommentsFalse = '##RemoveComments=false##';\r\n private static skipCheckTrue = '##SkipCheck=true##';\r\n private static skipCheckFalse = '##SkipCheck=false##';\r\n private static commentStart = '<#';\r\n private static commentEnd = '#>';\r\n private static comment = '#';\r\n private static openContent =\r\n `/* eslint:disable */\\r\r\n/**\\r\r\n * @file Source code generated by gulp-ps-code.\\r\r\n * @version 1.1\\r\r\n */\\r\r\nexport module PowerShellScripts {\\r\r\n 'use strict'\\r\r\n`;\r\n private static closeContent =\r\n `}\\r\r\n`;\r\n private static hereTextBegin = '@\"';\r\n private static hereTextEnd = '\"@';\r\n\r\n private buffer: string[];\r\n private jeaErrorDisplayOnce = true;\r\n\r\n constructor(private options: Options) {\r\n }\r\n\r\n public get content(): string {\r\n return this.buffer.join('\\r\\n');\r\n }\r\n\r\n public contentReset(): void {\r\n this.buffer = [];\r\n }\r\n\r\n public generate(groups: Groups): void {\r\n const tsBase = null;\r\n this.buffer.push(PsCodeConverter.openContent);\r\n this.buffer.push(this.indent(1) + 'export const module = ' + '\\'' + this.options.powerShellModuleName + '\\';');\r\n if (this.options.resourceName) {\r\n this.buffer.push(this.indent(1) + 'export const resourceName = ' + '\\'' + this.options.resourceName + '\\';');\r\n }\r\n\r\n if (this.options.prefixName) {\r\n this.buffer.push(this.indent(1) + 'export const powerShellPrefix = ' + '\\'' + this.options.prefixName + '\\';');\r\n }\r\n\r\n this.addData(groups);\r\n this.buffer.push(PsCodeConverter.closeContent);\r\n }\r\n\r\n private toJsonName(original: string): string {\r\n const name = this.toCommandName(original);\r\n return this.replaceAll(name, '-', '_');\r\n }\r\n\r\n private toCommandName(original: string): string {\r\n const index = original.indexOf('.ps1');\r\n if (index <= 0) {\r\n console.error('Script file must use .ps1 extension.');\r\n return original;\r\n }\r\n\r\n const scriptName = original.substring(0, index);\r\n return scriptName;\r\n }\r\n\r\n private toPascalName(original: string): string {\r\n const publicPath = 'public\\\\';\r\n const internalPath = 'internal\\\\';\r\n if (original.startsWith(publicPath)) {\r\n original = original.substring(publicPath.length);\r\n } else if (original.startsWith(internalPath)) {\r\n original = original.substring(internalPath.length);\r\n }\r\n\r\n const name = original[0].toUpperCase() + original.substring(1);\r\n let pascal = '';\r\n let upper = true;\r\n for (let i = 0; i < name.length; i++) {\r\n const char = name.charAt(i);\r\n if (char === '-') {\r\n upper = true;\r\n } else if (char === '\\\\') {\r\n pascal += '_';\r\n } else {\r\n pascal += upper ? char.toUpperCase() : char;\r\n upper = false;\r\n }\r\n\r\n }\r\n\r\n return pascal;\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 addBeginGroup(name: string, indent: number): void {\r\n this.buffer.push(this.indent(indent) + 'export module ' + name + ' {');\r\n }\r\n\r\n private addEndGroup(name: string, indent: number): void {\r\n this.buffer.push(this.indent(indent) + '}');\r\n }\r\n\r\n private addToContent(name: string, command: string, script: string, indent: number): void {\r\n if (this.options.jea) {\r\n this.buffer.push(this.indent(indent) + 'export const ' + name + ' = {');\r\n this.buffer.push(this.indent(indent + 1) + 'command: \\'' + command + '\\',');\r\n this.buffer.push(this.indent(indent + 1) + 'script: ' + script + '');\r\n this.buffer.push(this.indent(indent) + '}');\r\n } else {\r\n this.buffer.push(this.indent(indent) + 'export const ' + name + ': string = ' + script + ';');\r\n }\r\n }\r\n\r\n private addData(groups: Groups): void {\r\n let groupKeys = Object.keys(groups);\r\n groupKeys = groupKeys.sort();\r\n for (const groupKey of groupKeys) {\r\n const groupName = this.toPascalName(groupKey);\r\n let rootGroup = true;\r\n if (groupKey !== PsCodeConverter.defaultGroup && groupKey !== PsCodeConverter.generatedGroup) {\r\n rootGroup = false;\r\n }\r\n\r\n if (!rootGroup) {\r\n this.addBeginGroup(groupName, 1);\r\n }\r\n\r\n const current = groups[groupKey];\r\n const keys = Object.keys(current);\r\n for (const key of keys) {\r\n let script = '';\r\n const content: string = current[key];\r\n const name = this.toJsonName(key);\r\n const command = this.toCommandName(key);\r\n script = '##' + command + '##:' + key + '\\n';\r\n let removeComments = this.options.noComments;\r\n if (content.indexOf(PsCodeConverter.removeCommentsFalse) > 0) {\r\n removeComments = false;\r\n } else if (content.indexOf(PsCodeConverter.removeCommentsTrue) > 0) {\r\n removeComments = true;\r\n }\r\n\r\n let skipping = false;\r\n let skipCheck = false;\r\n let hereText = false;\r\n const lines = content.split('\\n');\r\n lines.forEach((value, index, array) => {\r\n let text = value.replace('\\r', '');\r\n if (text.endsWith(PsCodeConverter.hereTextBegin)) {\r\n hereText = true;\r\n script += text + '\\n';\r\n } else if (hereText) {\r\n if (text === PsCodeConverter.hereTextEnd) {\r\n hereText = false;\r\n }\r\n\r\n script += text + '\\n';\r\n } else if (removeComments) {\r\n let process = true;\r\n text = text.trim();\r\n if (text.startsWith(PsCodeConverter.commentStart)) {\r\n skipping = true;\r\n }\r\n\r\n if (text.startsWith(PsCodeConverter.skipCheckTrue)) {\r\n skipCheck = true;\r\n }\r\n\r\n if (text.startsWith(PsCodeConverter.skipCheckFalse)) {\r\n skipCheck = false;\r\n }\r\n\r\n if (skipping) {\r\n process = false;\r\n if (text.endsWith(PsCodeConverter.commentEnd)) {\r\n skipping = false;\r\n }\r\n }\r\n\r\n if (process && !text.startsWith(PsCodeConverter.comment) && text.length > 0) {\r\n if (!skipCheck && this.options.jea) {\r\n const regex = new RegExp(/[^A-Z\\\\]+(select-object|select|get-formatdata|measure-object|measure|help|get-help|out-default)[^A-Z\\\\]+/i);\r\n const matched = regex.exec(' ' + text);\r\n if (matched) {\r\n if (this.jeaErrorDisplayOnce) {\r\n this.jeaErrorDisplayOnce = false;\r\n console.error('JEA Error: use one of full name cmdlet.', PsCodeConverter.fullNames.join(' '));\r\n console.error(' If it scanned unwanted lines, use ##SkipCheck=true## and ##SkipCheck=false## to surround region.');\r\n }\r\n\r\n console.error(key + ': ' + text);\r\n }\r\n }\r\n\r\n script += text + '\\n';\r\n }\r\n } else {\r\n script += text + '\\n';\r\n }\r\n\r\n });\r\n let data = JSON.stringify(script);\r\n data = this.replaceAll(data, '\\'', '\\\\u0027');\r\n data = this.replaceAll(data, '<', '\\\\u003c');\r\n data = this.replaceAll(data, '>', '\\\\u003e');\r\n data = this.replaceAll(data, '&', '\\\\u0026');\r\n this.addToContent(name, command, data, rootGroup ? 1 : 2);\r\n }\r\n\r\n if (!rootGroup) {\r\n this.addEndGroup(groupName, 1);\r\n }\r\n }\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"]}