@ai-dev-tools/csharp-copilot-core 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai-dev-tools-csharp-copilot-core-0.0.19.tgz +0 -0
- package/azure-pipelines.yml +52 -0
- package/out/analyze/cecil.d.ts +1 -0
- package/out/analyze/cecil.js +42 -0
- package/out/analyze/cecil.js.map +1 -0
- package/out/analyze/checkCodeSyntax.d.ts +7 -0
- package/out/analyze/checkCodeSyntax.js +67 -0
- package/out/analyze/checkCodeSyntax.js.map +1 -0
- package/out/analyze/generateCodeDependency.d.ts +6 -0
- package/out/analyze/generateCodeDependency.js +122 -0
- package/out/analyze/generateCodeDependency.js.map +1 -0
- package/out/analyze/installAnalyzerTool.d.ts +1 -0
- package/out/analyze/installAnalyzerTool.js +82 -0
- package/out/analyze/installAnalyzerTool.js.map +1 -0
- package/out/atmpCache/deps/EplantRequestCategoryCondition_Conditions_Eplant_Workflows_SharedSegmentsPlugins_SharedSegments_SharedSegments_CSServiceFundamental_code_D.deps +281 -0
- package/out/atmpCache/deps/IdentitySelectAnalyzer_ToListinatorAnalyzers_src_AIUnitTestExample_code_d.deps +1 -0
- package/out/atmpCache/deps/SqmidHelperTests_Utils_HttpRequestParser_Overview_Workflows_SharedSegmentsTests_SharedSegments_SharedSegments_CSServiceFundamental_code_D.deps +1 -0
- package/out/atmpCache/deps/SqmidHelper_Utils_HttpRequestParser_Overview_Workflows_SharedSegmentsPlugins_SharedSegments_SharedSegments_CSServiceFundamental_code_D.deps +1 -0
- package/out/atmpCache/deps/ToListCountAnalyzerTests_ToListinatorTests_test_AIUnitTestExample_code_d.deps +4037 -0
- package/out/atmpCache/deps/ToListCountAnalyzer_ToListinatorAnalyzers_src_AIUnitTestExample_code_d.deps +1 -0
- package/out/atmpCache/deps/ToListCountCodeFixProvider_ToListinatorCodeFixes_src_AIUnitTestExample_code_d.deps +1 -0
- package/out/atmpCache/deps/ToListForEachAnalyzer_ToListinatorAnalyzers_src_AIUnitTestExample_code_d.deps +1 -0
- package/out/atmpCache/dllref/ToListinatorTests_ToListinatorTests_test_AIUnitTestExample_code_d.dllref +202 -0
- package/out/batch/generateCodeTests.d.ts +6 -0
- package/out/batch/generateCodeTests.js +147 -0
- package/out/batch/generateCodeTests.js.map +1 -0
- package/out/batch/getFolderCodeFile.d.ts +1 -0
- package/out/batch/getFolderCodeFile.js +19 -0
- package/out/batch/getFolderCodeFile.js.map +1 -0
- package/out/batch/getProjectCodeFile.d.ts +4 -0
- package/out/batch/getProjectCodeFile.js +87 -0
- package/out/batch/getProjectCodeFile.js.map +1 -0
- package/out/batch/getSolutionCodeFile.d.ts +8 -0
- package/out/batch/getSolutionCodeFile.js +70 -0
- package/out/batch/getSolutionCodeFile.js.map +1 -0
- package/out/benchmark/formatToMarkdown.d.ts +2 -0
- package/out/benchmark/formatToMarkdown.js +101 -0
- package/out/benchmark/formatToMarkdown.js.map +1 -0
- package/out/benchmark/generateBenchmarkReport.d.ts +1 -0
- package/out/benchmark/generateBenchmarkReport.js +82 -0
- package/out/benchmark/generateBenchmarkReport.js.map +1 -0
- package/out/codeCoverage/codeCoverage.d.ts +6 -0
- package/out/codeCoverage/codeCoverage.js +35 -0
- package/out/codeCoverage/codeCoverage.js.map +1 -0
- package/out/codeCoverage/codeCoverageReport.d.ts +6 -0
- package/out/codeCoverage/codeCoverageReport.js +72 -0
- package/out/codeCoverage/codeCoverageReport.js.map +1 -0
- package/out/codeCoverage/extractCodeCoverageInfo.d.ts +2 -0
- package/out/codeCoverage/extractCodeCoverageInfo.js +80 -0
- package/out/codeCoverage/extractCodeCoverageInfo.js.map +1 -0
- package/out/codeCoverage/generateCodeCoverageReport.d.ts +1 -0
- package/out/codeCoverage/generateCodeCoverageReport.js +27 -0
- package/out/codeCoverage/generateCodeCoverageReport.js.map +1 -0
- package/out/codeCoverage/getCodeCoverageSetting.d.ts +1 -0
- package/out/codeCoverage/getCodeCoverageSetting.js +58 -0
- package/out/codeCoverage/getCodeCoverageSetting.js.map +1 -0
- package/out/codeCoverage/reportTool.d.ts +2 -0
- package/out/codeCoverage/reportTool.js +22 -0
- package/out/codeCoverage/reportTool.js.map +1 -0
- package/out/codeCoverage/simplifyCoverageXml.d.ts +2 -0
- package/out/codeCoverage/simplifyCoverageXml.js +116 -0
- package/out/codeCoverage/simplifyCoverageXml.js.map +1 -0
- package/out/codebk/250804prompt/buildAfGuidelines.liquid +15 -0
- package/out/codebk/250804prompt/general/generalBuildAutofixGuidelines.liquid +13 -0
- package/out/codebk/250804prompt/general/generalUtGuidelines.liquid +18 -0
- package/out/codebk/250804prompt/generateUtAutoFix.liquid +19 -0
- package/out/codebk/250804prompt/generateUtGuidelines.liquid +13 -0
- package/out/codebk/250804prompt/generateUtSystem.liquid +5 -0
- package/out/codebk/250804prompt/generateUtUserInput.liquid +27 -0
- package/out/codebk/250804prompt/testAfGuidelines.liquid +6 -0
- package/out/codebk/250804prompt/xap/xapBuildAutofixGuidelines.liquid +13 -0
- package/out/codebk/250804prompt/xap/xapCodeCodeDependency.liquid +0 -0
- package/out/codebk/250804prompt/xap/xapCodeSample.liquid +38 -0
- package/out/codebk/250804prompt/xap/xapUtGuideline-240804.liquid +36 -0
- package/out/codebk/250804prompt/xap/xapUtGuideline.liquid +36 -0
- package/out/codebk/childProcessManager.d.ts +1 -0
- package/out/codebk/childProcessManager.js +50 -0
- package/out/codebk/childProcessManager.js.map +1 -0
- package/out/codebk/msBuidSpawn.d.ts +1 -0
- package/out/codebk/msBuidSpawn.js +58 -0
- package/out/codebk/msBuidSpawn.js.map +1 -0
- package/out/codebk/msBuild.d.ts +1 -0
- package/out/codebk/msBuild.js +123 -0
- package/out/codebk/msBuild.js.map +1 -0
- package/out/codebk/old/generateXapTestAutoFix.liquid +12 -0
- package/out/codebk/old/generateXapTestGuidelines-fm.liquid +68 -0
- package/out/codebk/old/generateXapTestGuidelines.liquid +28 -0
- package/out/codebk/old/xapGuideline-fm.liquid +149 -0
- package/out/codebk/old/xapGuideline.liquid +37 -0
- package/out/codebk/oldExec/checkCodeSyntax.d.ts +1 -0
- package/out/codebk/oldExec/checkCodeSyntax.js +81 -0
- package/out/codebk/oldExec/checkCodeSyntax.js.map +1 -0
- package/out/codebk/oldExec/codeCoverage.d.ts +1 -0
- package/out/codebk/oldExec/codeCoverage.js +54 -0
- package/out/codebk/oldExec/codeCoverage.js.map +1 -0
- package/out/codebk/oldExec/codeCoverageReport.d.ts +1 -0
- package/out/codebk/oldExec/codeCoverageReport.js +64 -0
- package/out/codebk/oldExec/codeCoverageReport.js.map +1 -0
- package/out/codebk/oldExec/containsMethods.d.ts +1 -0
- package/out/codebk/oldExec/containsMethods.js +74 -0
- package/out/codebk/oldExec/containsMethods.js.map +1 -0
- package/out/codebk/oldExec/generateCodeDependency.d.ts +1 -0
- package/out/codebk/oldExec/generateCodeDependency.js +95 -0
- package/out/codebk/oldExec/generateCodeDependency.js.map +1 -0
- package/out/codebk/oldExec/msBuild.d.ts +1 -0
- package/out/codebk/oldExec/msBuild.js +53 -0
- package/out/codebk/oldExec/msBuild.js.map +1 -0
- package/out/codebk/oldExec/vsTest.d.ts +1 -0
- package/out/codebk/oldExec/vsTest.js +71 -0
- package/out/codebk/oldExec/vsTest.js.map +1 -0
- package/out/codebk/prompts/general/generalUnitTestGuidelines-20250702.liquid +56 -0
- package/out/codebk/prompts/generateXapTestGuidelines-20250704.liquid +21 -0
- package/out/codebk/prompts/generateXapTestGuidelines-o.liquid +29 -0
- package/out/codebk/prompts/xap/xapGuideline-o.liquid +45 -0
- package/out/codebk/testbuildkill.d.ts +1 -0
- package/out/codebk/testbuildkill.js +37 -0
- package/out/codebk/testbuildkill.js.map +1 -0
- package/out/command/index.d.ts +2 -0
- package/out/command/index.js +85 -0
- package/out/command/index.js.map +1 -0
- package/out/command/utGenWrapper.d.ts +3 -0
- package/out/command/utGenWrapper.js +40 -0
- package/out/command/utGenWrapper.js.map +1 -0
- package/out/exit/childProcessManager.d.ts +2 -0
- package/out/exit/childProcessManager.js +43 -0
- package/out/exit/childProcessManager.js.map +1 -0
- package/out/exit/setupProcessSignalHandler.d.ts +1 -0
- package/out/exit/setupProcessSignalHandler.js +18 -0
- package/out/exit/setupProcessSignalHandler.js.map +1 -0
- package/out/gen/autoFix.d.ts +4 -0
- package/out/gen/autoFix.js +125 -0
- package/out/gen/autoFix.js.map +1 -0
- package/out/gen/csharpUtGen.d.ts +2 -0
- package/out/gen/csharpUtGen.js +151 -0
- package/out/gen/csharpUtGen.js.map +1 -0
- package/out/gen/ensureValidLLMResponse.d.ts +1 -0
- package/out/gen/ensureValidLLMResponse.js +19 -0
- package/out/gen/ensureValidLLMResponse.js.map +1 -0
- package/out/gen/postGen/extractCodeFromResponse.d.ts +1 -0
- package/out/gen/postGen/extractCodeFromResponse.js +37 -0
- package/out/gen/postGen/extractCodeFromResponse.js.map +1 -0
- package/out/gen/postGen/postGenProcess.d.ts +1 -0
- package/out/gen/postGen/postGenProcess.js +36 -0
- package/out/gen/postGen/postGenProcess.js.map +1 -0
- package/out/gen/postGen/removeComments.d.ts +1 -0
- package/out/gen/postGen/removeComments.js +92 -0
- package/out/gen/postGen/removeComments.js.map +1 -0
- package/out/gen/postGen/removeSingleLines.d.ts +1 -0
- package/out/gen/postGen/removeSingleLines.js +28 -0
- package/out/gen/postGen/removeSingleLines.js.map +1 -0
- package/out/gen/postGen/repairRequiredNameSpaces.d.ts +1 -0
- package/out/gen/postGen/repairRequiredNameSpaces.js +116 -0
- package/out/gen/postGen/repairRequiredNameSpaces.js.map +1 -0
- package/out/gen/postGen/validateTestCode.d.ts +1 -0
- package/out/gen/postGen/validateTestCode.js +14 -0
- package/out/gen/postGen/validateTestCode.js.map +1 -0
- package/out/gen/preGen/excludeFileName.d.ts +1 -0
- package/out/gen/preGen/excludeFileName.js +49 -0
- package/out/gen/preGen/excludeFileName.js.map +1 -0
- package/out/gen/preGen/excludeSpecificTag.d.ts +1 -0
- package/out/gen/preGen/excludeSpecificTag.js +18 -0
- package/out/gen/preGen/excludeSpecificTag.js.map +1 -0
- package/out/gen/preGen/preGenProcess.d.ts +1 -0
- package/out/gen/preGen/preGenProcess.js +22 -0
- package/out/gen/preGen/preGenProcess.js.map +1 -0
- package/out/gen/preGen/validateCode.d.ts +3 -0
- package/out/gen/preGen/validateCode.js +62 -0
- package/out/gen/preGen/validateCode.js.map +1 -0
- package/out/index.d.ts +2 -0
- package/out/index.js +8 -0
- package/out/index.js.map +1 -0
- package/out/llm/model/Gpt4o.d.ts +1 -0
- package/out/llm/model/Gpt4o.js +91 -0
- package/out/llm/model/Gpt4o.js.map +1 -0
- package/out/llm/model/claude4.d.ts +1 -0
- package/out/llm/model/claude4.js +3 -0
- package/out/llm/model/claude4.js.map +1 -0
- package/out/llm/preparePrompt.d.ts +2 -0
- package/out/llm/preparePrompt.js +110 -0
- package/out/llm/preparePrompt.js.map +1 -0
- package/out/llm/prompt/buildAfGuidelines.liquid +15 -0
- package/out/llm/prompt/general/generalBuildAutofixGuidelines.liquid +13 -0
- package/out/llm/prompt/general/generalUtGuidelines.liquid +16 -0
- package/out/llm/prompt/generateUtAutoFix.liquid +19 -0
- package/out/llm/prompt/generateUtDependency.liquid +3 -0
- package/out/llm/prompt/generateUtGuidelines.liquid +29 -0
- package/out/llm/prompt/generateUtSystem.liquid +5 -0
- package/out/llm/prompt/generateUtTemplate.liquid +30 -0
- package/out/llm/prompt/generateUtUserInput.liquid +4 -0
- package/out/llm/prompt/testAfGuidelines.liquid +6 -0
- package/out/llm/prompt/userCustomPrompt.liquid +0 -0
- package/out/llm/prompt/xap/xapBuildAutofixGuidelines.liquid +13 -0
- package/out/llm/prompt/xap/xapCodeCodeDependency.liquid +0 -0
- package/out/llm/prompt/xap/xapCodeSample.liquid +38 -0
- package/out/llm/prompt/xap/xapUtGuideline-240804.liquid +36 -0
- package/out/llm/prompt/xap/xapUtGuideline.liquid +37 -0
- package/out/llm/sendRequestToLLM.d.ts +4 -0
- package/out/llm/sendRequestToLLM.js +12 -0
- package/out/llm/sendRequestToLLM.js.map +1 -0
- package/out/llm/sendRequestToSelfHostLLM.d.ts +4 -0
- package/out/llm/sendRequestToSelfHostLLM.js +41 -0
- package/out/llm/sendRequestToSelfHostLLM.js.map +1 -0
- package/out/metrics/appInsightTelemetry.d.ts +6 -0
- package/out/metrics/appInsightTelemetry.js +77 -0
- package/out/metrics/appInsightTelemetry.js.map +1 -0
- package/out/metrics/machineId.d.ts +11 -0
- package/out/metrics/machineId.js +85 -0
- package/out/metrics/machineId.js.map +1 -0
- package/out/setup/setup.d.ts +1 -0
- package/out/setup/setup.js +10 -0
- package/out/setup/setup.js.map +1 -0
- package/out/setup/setupConsole.d.ts +1 -0
- package/out/setup/setupConsole.js +23 -0
- package/out/setup/setupConsole.js.map +1 -0
- package/out/setup/setupLLMRequest.d.ts +2 -0
- package/out/setup/setupLLMRequest.js +10 -0
- package/out/setup/setupLLMRequest.js.map +1 -0
- package/out/tools/devenvcom.cmd +13 -0
- package/out/tools/devenvexe.cmd +13 -0
- package/out/tools/msbuildexe.cmd +13 -0
- package/out/tools/vstestexe.cmd +13 -0
- package/out/types/benchmark.d.ts +11 -0
- package/out/types/benchmark.js +3 -0
- package/out/types/benchmark.js.map +1 -0
- package/out/types/buildResult.d.ts +8 -0
- package/out/types/buildResult.js +3 -0
- package/out/types/buildResult.js.map +1 -0
- package/out/types/constants.d.ts +3 -0
- package/out/types/constants.js +7 -0
- package/out/types/constants.js.map +1 -0
- package/out/types/genResult.d.ts +10 -0
- package/out/types/genResult.js +3 -0
- package/out/types/genResult.js.map +1 -0
- package/out/types/testResult.d.ts +12 -0
- package/out/types/testResult.js +3 -0
- package/out/types/testResult.js.map +1 -0
- package/out/types/verifyResult.d.ts +8 -0
- package/out/types/verifyResult.js +3 -0
- package/out/types/verifyResult.js.map +1 -0
- package/out/utils/checkTestProject.d.ts +2 -0
- package/out/utils/checkTestProject.js +79 -0
- package/out/utils/checkTestProject.js.map +1 -0
- package/out/utils/checkXapCode.d.ts +2 -0
- package/out/utils/checkXapCode.js +59 -0
- package/out/utils/checkXapCode.js.map +1 -0
- package/out/utils/delay.d.ts +1 -0
- package/out/utils/delay.js +7 -0
- package/out/utils/delay.js.map +1 -0
- package/out/utils/detectTestFramework.d.ts +1 -0
- package/out/utils/detectTestFramework.js +32 -0
- package/out/utils/detectTestFramework.js.map +1 -0
- package/out/utils/fileUtils.d.ts +2 -0
- package/out/utils/fileUtils.js +42 -0
- package/out/utils/fileUtils.js.map +1 -0
- package/out/utils/generateCodeSha256.d.ts +1 -0
- package/out/utils/generateCodeSha256.js +46 -0
- package/out/utils/generateCodeSha256.js.map +1 -0
- package/out/utils/getCodeStructurePath.d.ts +5 -0
- package/out/utils/getCodeStructurePath.js +155 -0
- package/out/utils/getCodeStructurePath.js.map +1 -0
- package/out/utils/getOrCreateDir.d.ts +2 -0
- package/out/utils/getOrCreateDir.js +63 -0
- package/out/utils/getOrCreateDir.js.map +1 -0
- package/out/utils/getTestCodeInfo.d.ts +2 -0
- package/out/utils/getTestCodeInfo.js +121 -0
- package/out/utils/getTestCodeInfo.js.map +1 -0
- package/out/utils/getTestFile.d.ts +13 -0
- package/out/utils/getTestFile.js +295 -0
- package/out/utils/getTestFile.js.map +1 -0
- package/out/utils/parseBuildResult.d.ts +3 -0
- package/out/utils/parseBuildResult.js +44 -0
- package/out/utils/parseBuildResult.js.map +1 -0
- package/out/utils/parseSyntaxCheckResult.d.ts +2 -0
- package/out/utils/parseSyntaxCheckResult.js +38 -0
- package/out/utils/parseSyntaxCheckResult.js.map +1 -0
- package/out/utils/parseVstestResult.d.ts +3 -0
- package/out/utils/parseVstestResult.js +61 -0
- package/out/utils/parseVstestResult.js.map +1 -0
- package/out/utils/removeFailedTestMethods.d.ts +3 -0
- package/out/utils/removeFailedTestMethods.js +207 -0
- package/out/utils/removeFailedTestMethods.js.map +1 -0
- package/out/utils/runCommand.d.ts +1 -0
- package/out/utils/runCommand.js +14 -0
- package/out/utils/runCommand.js.map +1 -0
- package/out/utils/spawnExec.d.ts +1 -0
- package/out/utils/spawnExec.js +80 -0
- package/out/utils/spawnExec.js.map +1 -0
- package/out/utils/verifyBuildErrorCausedFile.d.ts +1 -0
- package/out/utils/verifyBuildErrorCausedFile.js +60 -0
- package/out/utils/verifyBuildErrorCausedFile.js.map +1 -0
- package/out/utils/verifyTestCode.d.ts +2 -0
- package/out/utils/verifyTestCode.js +25 -0
- package/out/utils/verifyTestCode.js.map +1 -0
- package/out/utils/writeGenCode.d.ts +1 -0
- package/out/utils/writeGenCode.js +50 -0
- package/out/utils/writeGenCode.js.map +1 -0
- package/out/vs/msBuild.d.ts +13 -0
- package/out/vs/msBuild.js +81 -0
- package/out/vs/msBuild.js.map +1 -0
- package/out/vs/vsTest.d.ts +15 -0
- package/out/vs/vsTest.js +107 -0
- package/out/vs/vsTest.js.map +1 -0
- package/out/vs/vsTools.d.ts +7 -0
- package/out/vs/vsTools.js +177 -0
- package/out/vs/vsTools.js.map +1 -0
- package/out/vsPlugin/getVsPluginVerifyResult.d.ts +2 -0
- package/out/vsPlugin/getVsPluginVerifyResult.js +41 -0
- package/out/vsPlugin/getVsPluginVerifyResult.js.map +1 -0
- package/out/vsPlugin/interactionConstants.d.ts +2 -0
- package/out/vsPlugin/interactionConstants.js +10 -0
- package/out/vsPlugin/interactionConstants.js.map +1 -0
- package/out/vsPlugin/sendStdToVsPlugin.d.ts +1 -0
- package/out/vsPlugin/sendStdToVsPlugin.js +12 -0
- package/out/vsPlugin/sendStdToVsPlugin.js.map +1 -0
- package/out/vsPlugin/stdListener.d.ts +3 -0
- package/out/vsPlugin/stdListener.js +57 -0
- package/out/vsPlugin/stdListener.js.map +1 -0
- package/package.json +33 -0
- package/tools/devenvcom.cmd +13 -0
- package/tools/devenvexe.cmd +13 -0
- package/tools/msbuildexe.cmd +13 -0
- package/tools/vstestexe.cmd +13 -0
|
Binary file
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# trigger:
|
|
2
|
+
# - main # branch
|
|
3
|
+
|
|
4
|
+
trigger: none
|
|
5
|
+
pr: none
|
|
6
|
+
|
|
7
|
+
pool:
|
|
8
|
+
vmImage: 'ubuntu-latest'
|
|
9
|
+
|
|
10
|
+
variables:
|
|
11
|
+
workingDir: 'csharp-ut-copilot/csharp-ut-core'
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- task: NodeTool@0
|
|
15
|
+
inputs:
|
|
16
|
+
versionSpec: '18.x'
|
|
17
|
+
displayName: 'Install Node.js'
|
|
18
|
+
|
|
19
|
+
# Auth Azure Artifacts Feed using .npmrc
|
|
20
|
+
- task: npmAuthenticate@0
|
|
21
|
+
inputs:
|
|
22
|
+
workingFile: '$(workingDir)/.npmrc'
|
|
23
|
+
displayName: 'Authenticate with Azure Artifacts'
|
|
24
|
+
|
|
25
|
+
# install package, build and pack
|
|
26
|
+
- script: |
|
|
27
|
+
cd $(workingDir)
|
|
28
|
+
echo "Installing common dependencies"
|
|
29
|
+
npm install
|
|
30
|
+
echo "Building csharp-copilot-core"
|
|
31
|
+
npm run build || echo "no build step"
|
|
32
|
+
ls -R out/ || echo "Check Out Directory Content"
|
|
33
|
+
npm run copy-script
|
|
34
|
+
ls -R out/ || echo "Check Out Directory Content"
|
|
35
|
+
npm pack
|
|
36
|
+
displayName: 'Install and Pack NPM Package'
|
|
37
|
+
|
|
38
|
+
# publish to Azure Artifacts npm feed
|
|
39
|
+
# - script: |
|
|
40
|
+
# cd $(workingDir)
|
|
41
|
+
# npm publish --registry https://pkgs.dev.azure.com/msasg/ContentServices/_packaging/MSNews/npm/registry
|
|
42
|
+
# displayName: 'Publish to Azure Artifacts'
|
|
43
|
+
|
|
44
|
+
- task: Npm@1
|
|
45
|
+
inputs:
|
|
46
|
+
command: publish
|
|
47
|
+
publishRegistry: useFeed
|
|
48
|
+
publishFeed: ContentServices/MSNews
|
|
49
|
+
workingDir: '$(workingDir)'
|
|
50
|
+
# condition: and(succeeded(), in(variables['commitType'], 'feat', 'fix', 'chore', 'prerelease'))
|
|
51
|
+
continueOnError: true
|
|
52
|
+
displayName: Publish
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function analyzeCecil(assemblyPath: string): Promise<any>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.analyzeCecil = analyzeCecil;
|
|
7
|
+
const edge_js_1 = __importDefault(require("edge-js"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const analyzeCecilFunc = edge_js_1.default.func({
|
|
10
|
+
source: `
|
|
11
|
+
using System.Threading.Tasks;
|
|
12
|
+
using Mono.Cecil;
|
|
13
|
+
using System.Linq;
|
|
14
|
+
|
|
15
|
+
public class Startup {
|
|
16
|
+
public async Task<object> Invoke(dynamic input) {
|
|
17
|
+
var asm = AssemblyDefinition.ReadAssembly((string)input);
|
|
18
|
+
var types = asm.MainModule.Types.Select(t => new {
|
|
19
|
+
t.FullName,
|
|
20
|
+
Methods = t.Methods.Select(m => m.FullName).ToArray()
|
|
21
|
+
}).ToArray();
|
|
22
|
+
return types;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`,
|
|
26
|
+
references: [
|
|
27
|
+
path_1.default.resolve(__dirname, './dotnetLibs/Mono.Cecil.dll')
|
|
28
|
+
]
|
|
29
|
+
});
|
|
30
|
+
function analyzeCecil(assemblyPath) {
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
analyzeCecilFunc(assemblyPath, (err, result) => {
|
|
33
|
+
if (err)
|
|
34
|
+
reject(err);
|
|
35
|
+
else
|
|
36
|
+
resolve(result);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const res = analyzeCecil("D:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Tests\\bin\\Debug\\SharedSegments.Tests.dll");
|
|
41
|
+
console.log('Cecil Analysis Result:', res);
|
|
42
|
+
//# sourceMappingURL=cecil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cecil.js","sourceRoot":"","sources":["../../src/analyze/cecil.ts"],"names":[],"mappings":";;;;;AAyBA,oCAOC;AAhCD,sDAA2B;AAC3B,gDAAwB;AAExB,MAAM,gBAAgB,GAAG,iBAAI,CAAC,IAAI,CAAC;IAC/B,MAAM,EAAE;;;;;;;;;;;;;;;GAeT;IACC,UAAU,EAAE;QACR,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,6BAA6B,CAAC;KACzD;CACJ,CAAC,CAAC;AAEH,SAAgB,YAAY,CAAC,YAAoB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,gBAAgB,CAAC,YAAY,EAAE,CAAC,GAAU,EAAE,MAAW,EAAE,EAAE;YACvD,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAChB,OAAO,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,GAAG,GAAG,YAAY,CAAC,8HAA8H,CAAC,CAAA;AACxJ,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC","sourcesContent":["import edge from 'edge-js';\r\nimport path from 'path';\r\n\r\nconst analyzeCecilFunc = edge.func({\r\n source: `\r\n using System.Threading.Tasks;\r\n using Mono.Cecil;\r\n using System.Linq;\r\n\r\n public class Startup {\r\n public async Task<object> Invoke(dynamic input) {\r\n var asm = AssemblyDefinition.ReadAssembly((string)input);\r\n var types = asm.MainModule.Types.Select(t => new {\r\n t.FullName,\r\n Methods = t.Methods.Select(m => m.FullName).ToArray()\r\n }).ToArray();\r\n return types;\r\n }\r\n }\r\n `,\r\n references: [\r\n path.resolve(__dirname, './dotnetLibs/Mono.Cecil.dll')\r\n ]\r\n});\r\n\r\nexport function analyzeCecil(assemblyPath: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n analyzeCecilFunc(assemblyPath, (err: Error, result: any) => {\r\n if (err) reject(err);\r\n else resolve(result);\r\n });\r\n });\r\n}\r\n\r\nconst res = analyzeCecil(\"D:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Tests\\\\bin\\\\Debug\\\\SharedSegments.Tests.dll\")\r\nconsole.log('Cecil Analysis Result:', res);\r\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { VerifyResult } from '../types/verifyResult';
|
|
2
|
+
export declare function checkCodeSyntax(testFilePath: string): Promise<VerifyResult>;
|
|
3
|
+
export declare function codeSyntaxCheckErrorHandler(error: any): boolean;
|
|
4
|
+
export declare function codeSyntaxCheckCloseHandler(code: any, stdout: any, stderr: any): {
|
|
5
|
+
success: boolean;
|
|
6
|
+
message: any;
|
|
7
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkCodeSyntax = checkCodeSyntax;
|
|
4
|
+
exports.codeSyntaxCheckErrorHandler = codeSyntaxCheckErrorHandler;
|
|
5
|
+
exports.codeSyntaxCheckCloseHandler = codeSyntaxCheckCloseHandler;
|
|
6
|
+
const parseBuildResult_1 = require("../utils/parseBuildResult");
|
|
7
|
+
const getOrCreateDir_1 = require("../utils/getOrCreateDir");
|
|
8
|
+
const parseSyntaxCheckResult_1 = require("../utils/parseSyntaxCheckResult");
|
|
9
|
+
const spawnExec_1 = require("../utils/spawnExec");
|
|
10
|
+
const DllRefCacheDir = "./dllref/";
|
|
11
|
+
async function checkCodeSyntax(testFilePath) {
|
|
12
|
+
const { success, message } = await runTestCodeSyntaxCheck(testFilePath);
|
|
13
|
+
if (!success) {
|
|
14
|
+
console.error(`Code analysis failed: ${message}`);
|
|
15
|
+
return { success: true, message, buildErrors: undefined, testResult: undefined }; // return true to build the project since syntax check fails
|
|
16
|
+
}
|
|
17
|
+
if (message.includes("PassedSyntaxCheck")) {
|
|
18
|
+
// console.log(`Pass Syntax check: ${message}`);
|
|
19
|
+
return { success: true, message, buildErrors: undefined, testResult: undefined };
|
|
20
|
+
}
|
|
21
|
+
if (message.includes("SyntaxErrors:")) {
|
|
22
|
+
const syntaxErrors = getSyntaxErrors(message);
|
|
23
|
+
const buildResult = (0, parseSyntaxCheckResult_1.parseSyntaxCheckErrors)(testFilePath, syntaxErrors);
|
|
24
|
+
const errorMessage = (0, parseBuildResult_1.formatMsbuildResultToMarkdown)(buildResult);
|
|
25
|
+
// console.error(`Syntax errors found in the code:\n ${syntaxErrors}`);
|
|
26
|
+
return { success: false, message: errorMessage, buildErrors: buildResult, testResult: undefined };
|
|
27
|
+
}
|
|
28
|
+
return { success: true, message, buildErrors: undefined, testResult: undefined };
|
|
29
|
+
}
|
|
30
|
+
function getSyntaxErrors(message) {
|
|
31
|
+
const match = message.match(/SyntaxErrors:\s*\n([\s\S]*)/);
|
|
32
|
+
if (!match || match.length < 2) {
|
|
33
|
+
return "";
|
|
34
|
+
}
|
|
35
|
+
return match[1];
|
|
36
|
+
}
|
|
37
|
+
function runTestCodeSyntaxCheck(testCodePath) {
|
|
38
|
+
const args = ['-b', testCodePath];
|
|
39
|
+
const workDir = (0, getOrCreateDir_1.getTmpCacheDir)(DllRefCacheDir);
|
|
40
|
+
console.log(`Running Code Syntax Check...`);
|
|
41
|
+
return (0, spawnExec_1.runSpawn)("ccanalyzer", args, workDir, codeSyntaxCheckErrorHandler, codeSyntaxCheckCloseHandler);
|
|
42
|
+
}
|
|
43
|
+
function codeSyntaxCheckErrorHandler(error) {
|
|
44
|
+
console.error(`codeSyntaxCheckErrorHandler - failed: ${error.message}`);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
function codeSyntaxCheckCloseHandler(code, stdout, stderr) {
|
|
48
|
+
if (code !== 0) {
|
|
49
|
+
console.error(`Code Syntax check failed with exit code ${code}`);
|
|
50
|
+
return { success: false, message: stdout };
|
|
51
|
+
}
|
|
52
|
+
if (stderr) {
|
|
53
|
+
console.error(`Warnings/Errors:\n${stderr}`);
|
|
54
|
+
return { success: false, message: stdout };
|
|
55
|
+
}
|
|
56
|
+
console.log(`Code Syntax check succeeded:\n${stdout}`);
|
|
57
|
+
return { success: true, message: stdout };
|
|
58
|
+
}
|
|
59
|
+
// checkCodeSyntax("D:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Tests\\Eplant\\PluginTest\\ResponseBuilder\\EplantUserUpdateResponseBuilderTest.cs",).then(result => {
|
|
60
|
+
// checkCodeSyntax("D:\\code\\AIUnitTestExample\\test\\ToListinator.Tests\\ToListCountAnalyzerTests.cs",).then(result => {
|
|
61
|
+
// if (result.success) {
|
|
62
|
+
// console.log("Code syntax check passed:", result.message);
|
|
63
|
+
// } else {
|
|
64
|
+
// console.error("Code syntax check failed:", result.message);
|
|
65
|
+
// }
|
|
66
|
+
// });
|
|
67
|
+
//# sourceMappingURL=checkCodeSyntax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkCodeSyntax.js","sourceRoot":"","sources":["../../src/analyze/checkCodeSyntax.ts"],"names":[],"mappings":"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","sourcesContent":["import { VerifyResult } from '../types/verifyResult';\r\nimport { formatMsbuildResultToMarkdown } from '../utils/parseBuildResult';\r\nimport { getTmpCacheDir } from '../utils/getOrCreateDir';\r\nimport { parseSyntaxCheckErrors } from '../utils/parseSyntaxCheckResult';\r\nimport { runSpawn } from '../utils/spawnExec';\r\n\r\nconst DllRefCacheDir = \"./dllref/\"\r\n\r\nexport async function checkCodeSyntax(testFilePath: string): Promise<VerifyResult> {\r\n const { success, message } = await runTestCodeSyntaxCheck(testFilePath);\r\n if (!success) {\r\n console.error(`Code analysis failed: ${message}`);\r\n return { success: true, message, buildErrors: undefined, testResult: undefined }; // return true to build the project since syntax check fails\r\n }\r\n\r\n if (message.includes(\"PassedSyntaxCheck\")) {\r\n // console.log(`Pass Syntax check: ${message}`);\r\n return { success: true, message, buildErrors: undefined, testResult: undefined };\r\n }\r\n\r\n if (message.includes(\"SyntaxErrors:\")) {\r\n const syntaxErrors = getSyntaxErrors(message);\r\n const buildResult = parseSyntaxCheckErrors(testFilePath, syntaxErrors);\r\n const errorMessage = formatMsbuildResultToMarkdown(buildResult);\r\n // console.error(`Syntax errors found in the code:\\n ${syntaxErrors}`);\r\n return { success: false, message: errorMessage, buildErrors: buildResult, testResult: undefined };\r\n }\r\n\r\n return { success: true, message, buildErrors: undefined, testResult: undefined };\r\n}\r\n\r\nfunction getSyntaxErrors(message: string) {\r\n const match = message.match(/SyntaxErrors:\\s*\\n([\\s\\S]*)/);\r\n if (!match || match.length < 2) {\r\n return \"\";\r\n }\r\n\r\n return match[1];\r\n}\r\n\r\nfunction runTestCodeSyntaxCheck(testCodePath: string): Promise<any> {\r\n const args = ['-b', testCodePath];\r\n const workDir = getTmpCacheDir(DllRefCacheDir);\r\n console.log(`Running Code Syntax Check...`);\r\n return runSpawn(\"ccanalyzer\", args, workDir, codeSyntaxCheckErrorHandler, codeSyntaxCheckCloseHandler);\r\n}\r\n\r\n\r\nexport function codeSyntaxCheckErrorHandler(error) {\r\n console.error(`codeSyntaxCheckErrorHandler - failed: ${error.message}`);\r\n return true;\r\n}\r\n\r\nexport function codeSyntaxCheckCloseHandler(code, stdout, stderr) {\r\n if (code !== 0) {\r\n console.error(`Code Syntax check failed with exit code ${code}`);\r\n return { success: false, message: stdout };\r\n }\r\n\r\n if (stderr) {\r\n console.error(`Warnings/Errors:\\n${stderr}`);\r\n return { success: false, message: stdout };\r\n }\r\n\r\n console.log(`Code Syntax check succeeded:\\n${stdout}`);\r\n return { success: true, message: stdout };\r\n}\r\n\r\n// checkCodeSyntax(\"D:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Tests\\\\Eplant\\\\PluginTest\\\\ResponseBuilder\\\\EplantUserUpdateResponseBuilderTest.cs\",).then(result => {\r\n// checkCodeSyntax(\"D:\\\\code\\\\AIUnitTestExample\\\\test\\\\ToListinator.Tests\\\\ToListCountAnalyzerTests.cs\",).then(result => {\r\n// if (result.success) {\r\n// console.log(\"Code syntax check passed:\", result.message);\r\n// } else {\r\n// console.error(\"Code syntax check failed:\", result.message);\r\n// }\r\n// });"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function generateCodeDependency(sourceCodePath: string): Promise<string>;
|
|
2
|
+
export declare function codeAnalyzerErrorHandler(error: any): boolean;
|
|
3
|
+
export declare function codeAnalyzerCloseHandler(code: any, stdout: any, stderr: any): {
|
|
4
|
+
success: boolean;
|
|
5
|
+
message: any;
|
|
6
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateCodeDependency = generateCodeDependency;
|
|
37
|
+
exports.codeAnalyzerErrorHandler = codeAnalyzerErrorHandler;
|
|
38
|
+
exports.codeAnalyzerCloseHandler = codeAnalyzerCloseHandler;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const generateCodeSha256_1 = require("../utils/generateCodeSha256");
|
|
42
|
+
const getOrCreateDir_1 = require("../utils/getOrCreateDir");
|
|
43
|
+
const spawnExec_1 = require("../utils/spawnExec");
|
|
44
|
+
const DepAnalyzerDir = "./deps/";
|
|
45
|
+
async function generateCodeDependency(sourceCodePath) {
|
|
46
|
+
const startTime = Date.now();
|
|
47
|
+
const normalizedPath = path.normalize(sourceCodePath);
|
|
48
|
+
const codeDepsFileName = normalizedPath.replace(".cs", "").replace(":", "").replaceAll(".", "").split("\\").reverse().join("_");
|
|
49
|
+
const codeDepsDir = (0, getOrCreateDir_1.getTmpCacheDir)(DepAnalyzerDir);
|
|
50
|
+
const codeDepsFilePath = path.join(codeDepsDir, codeDepsFileName + ".deps");
|
|
51
|
+
let depsStr;
|
|
52
|
+
if (fs.existsSync(codeDepsFilePath)) {
|
|
53
|
+
depsStr = getCachedCodeDeps(normalizedPath, codeDepsFilePath);
|
|
54
|
+
}
|
|
55
|
+
if (!depsStr) {
|
|
56
|
+
const { success, message } = await runCsharpCodeAnalyzer(normalizedPath);
|
|
57
|
+
if (!success) {
|
|
58
|
+
console.error(`Code analysis failed: ${message}`);
|
|
59
|
+
return "";
|
|
60
|
+
}
|
|
61
|
+
depsStr = getDependency(codeDepsFilePath);
|
|
62
|
+
}
|
|
63
|
+
console.log(`Generate depencency time: ${(Date.now() - startTime) / 1000} seconds`);
|
|
64
|
+
return depsStr;
|
|
65
|
+
}
|
|
66
|
+
function runCsharpCodeAnalyzer(sourceCodePath) {
|
|
67
|
+
const args = ['-c', sourceCodePath];
|
|
68
|
+
const workDir = (0, getOrCreateDir_1.getTmpCacheDir)(DepAnalyzerDir);
|
|
69
|
+
console.log('📦 Running Csharp code analyzer...');
|
|
70
|
+
return (0, spawnExec_1.runSpawn)("ccanalyzer", args, workDir, codeAnalyzerErrorHandler, codeAnalyzerCloseHandler);
|
|
71
|
+
}
|
|
72
|
+
function codeAnalyzerErrorHandler(error) {
|
|
73
|
+
console.error(`codeAnalyzerErrorHandler - failed: ${error.message}`);
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
function codeAnalyzerCloseHandler(code, stdout, stderr) {
|
|
77
|
+
if (code !== 0) {
|
|
78
|
+
console.error(`Code Analyze failed with exit code ${code}`);
|
|
79
|
+
return { success: false, message: stdout };
|
|
80
|
+
}
|
|
81
|
+
if (stderr) {
|
|
82
|
+
console.error(`Warnings/Errors:\n${stderr}`);
|
|
83
|
+
return { success: false, message: stdout };
|
|
84
|
+
}
|
|
85
|
+
console.log(`Code Analyze succeeded:\n${stdout}`);
|
|
86
|
+
return { success: true, message: stdout };
|
|
87
|
+
}
|
|
88
|
+
function getCachedCodeDeps(sourceCodePath, depsFilePath) {
|
|
89
|
+
try {
|
|
90
|
+
const fileContent = fs.readFileSync(depsFilePath, 'utf-8');
|
|
91
|
+
const lines = fileContent.split(/\r?\n/);
|
|
92
|
+
const cachedSha256 = lines[0];
|
|
93
|
+
const depsContent = lines.slice(1).join('\n').trim();
|
|
94
|
+
const currentSha256 = (0, generateCodeSha256_1.generateCodeSha256)(sourceCodePath);
|
|
95
|
+
if (currentSha256 === cachedSha256) {
|
|
96
|
+
console.log('code unchanged, returning cached deps.');
|
|
97
|
+
return depsContent;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.log('code has changed.');
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
console.error('Error:', err);
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function getDependency(depsFilePath) {
|
|
110
|
+
const fileContent = fs.readFileSync(depsFilePath, 'utf-8').trim();
|
|
111
|
+
const lines = fileContent.split(/\r?\n/);
|
|
112
|
+
const dependencyStr = lines.slice(1).join('\n');
|
|
113
|
+
return dependencyStr;
|
|
114
|
+
}
|
|
115
|
+
// generateCodeDependency("D:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Plugins\\Workflows\\Eplant\\Conditions\\EplantRequestCategoryCondition.cs");
|
|
116
|
+
// generateCodeDependency("D:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Plugins\\Workflows\\Eplant\\ResponseBuilders\\EplantMigrateResponseBuilder.cs");
|
|
117
|
+
// generateCodeDependency("D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/EplantConfigManager.cs");
|
|
118
|
+
// generateCodeDependency("C:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Plugins\\Workflows\\Eplant\\ResponseBuilders\\EplantMeResponseBuilder.cs");
|
|
119
|
+
// generateCodeDependency("D:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Plugins\\Workflows\\Eplant\\RequestBuilders\\EplantRankRequestBuilder.cs");
|
|
120
|
+
// getDependency("D:\\code\\ai-dev-tools\\csharp-ut-copilot\\csharp-ut-core\\out\\atmpCache\\deps\\SqmidHelper_Utils_HttpRequestParser_Overview_Workflows_SharedSegmentsPlugins_SharedSegments_SharedSegments_CSServiceFundamental_code_D.deps");
|
|
121
|
+
// getCachedCodeDeps("D:\\code\\UCMDynamics\\private\\DynamicCode\\Plugin\\UCMDynamics.AppointmentPlugin\\AppointmentOperation.cs", "D:\\code\\ai-dev-tools\\csharp-ut-copilot\\csharp-ut-core\\out\\atmpCache\\deps\\AppointmentOperation_UCMDynamicsAppointmentPlugin_Plugin_DynamicCode_private_UCMDynamics_code_D.deps");
|
|
122
|
+
//# sourceMappingURL=generateCodeDependency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateCodeDependency.js","sourceRoot":"","sources":["../../src/analyze/generateCodeDependency.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\r\nimport * as path from 'path';\r\n\r\nimport { generateCodeSha256 } from '../utils/generateCodeSha256';\r\nimport { getTmpCacheDir } from '../utils/getOrCreateDir';\r\nimport { runSpawn } from '../utils/spawnExec';\r\n\r\nconst DepAnalyzerDir = \"./deps/\"\r\n\r\nexport async function generateCodeDependency(sourceCodePath: string): Promise<string> {\r\n const startTime = Date.now();\r\n\r\n const normalizedPath = path.normalize(sourceCodePath);\r\n const codeDepsFileName = normalizedPath.replace(\".cs\", \"\").replace(\":\", \"\").replaceAll(\".\", \"\").split(\"\\\\\").reverse().join(\"_\");\r\n const codeDepsDir = getTmpCacheDir(DepAnalyzerDir);\r\n const codeDepsFilePath = path.join(codeDepsDir, codeDepsFileName + \".deps\");\r\n let depsStr;\r\n if (fs.existsSync(codeDepsFilePath)) {\r\n depsStr = getCachedCodeDeps(normalizedPath, codeDepsFilePath);\r\n }\r\n if (!depsStr) {\r\n const { success, message } = await runCsharpCodeAnalyzer(normalizedPath);\r\n if (!success) {\r\n console.error(`Code analysis failed: ${message}`);\r\n return \"\";\r\n }\r\n depsStr = getDependency(codeDepsFilePath);\r\n }\r\n\r\n console.log(`Generate depencency time: ${(Date.now() - startTime) / 1000} seconds`);\r\n\r\n return depsStr;\r\n}\r\n\r\nfunction runCsharpCodeAnalyzer(sourceCodePath: string): Promise<any> {\r\n const args = ['-c', sourceCodePath];\r\n const workDir = getTmpCacheDir(DepAnalyzerDir);\r\n console.log('📦 Running Csharp code analyzer...');\r\n return runSpawn(\"ccanalyzer\", args, workDir, codeAnalyzerErrorHandler, codeAnalyzerCloseHandler);\r\n}\r\n\r\nexport function codeAnalyzerErrorHandler(error) {\r\n console.error(`codeAnalyzerErrorHandler - failed: ${error.message}`);\r\n return true;\r\n}\r\n\r\nexport function codeAnalyzerCloseHandler(code, stdout, stderr) {\r\n if (code !== 0) {\r\n console.error(`Code Analyze failed with exit code ${code}`);\r\n return { success: false, message: stdout };\r\n }\r\n\r\n if (stderr) {\r\n console.error(`Warnings/Errors:\\n${stderr}`);\r\n return { success: false, message: stdout };\r\n }\r\n\r\n console.log(`Code Analyze succeeded:\\n${stdout}`);\r\n return { success: true, message: stdout };\r\n}\r\n\r\nfunction getCachedCodeDeps(sourceCodePath: string, depsFilePath: string) {\r\n try {\r\n const fileContent = fs.readFileSync(depsFilePath, 'utf-8');\r\n\r\n const lines = fileContent.split(/\\r?\\n/);\r\n\r\n const cachedSha256 = lines[0];\r\n const depsContent = lines.slice(1).join('\\n').trim();\r\n\r\n const currentSha256 = generateCodeSha256(sourceCodePath);\r\n\r\n if (currentSha256 === cachedSha256) {\r\n console.log('code unchanged, returning cached deps.');\r\n return depsContent;\r\n } else {\r\n console.log('code has changed.');\r\n return null;\r\n }\r\n } catch (err) {\r\n console.error('Error:', err);\r\n return null;\r\n }\r\n}\r\n\r\nfunction getDependency(depsFilePath: string) {\r\n const fileContent = fs.readFileSync(depsFilePath, 'utf-8').trim();\r\n const lines = fileContent.split(/\\r?\\n/);\r\n const dependencyStr = lines.slice(1).join('\\n');\r\n return dependencyStr;\r\n}\r\n\r\n// generateCodeDependency(\"D:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Plugins\\\\Workflows\\\\Eplant\\\\Conditions\\\\EplantRequestCategoryCondition.cs\");\r\n// generateCodeDependency(\"D:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Plugins\\\\Workflows\\\\Eplant\\\\ResponseBuilders\\\\EplantMigrateResponseBuilder.cs\");\r\n// generateCodeDependency(\"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/EplantConfigManager.cs\");\r\n// generateCodeDependency(\"C:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Plugins\\\\Workflows\\\\Eplant\\\\ResponseBuilders\\\\EplantMeResponseBuilder.cs\");\r\n// generateCodeDependency(\"D:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Plugins\\\\Workflows\\\\Eplant\\\\RequestBuilders\\\\EplantRankRequestBuilder.cs\");\r\n// getDependency(\"D:\\\\code\\\\ai-dev-tools\\\\csharp-ut-copilot\\\\csharp-ut-core\\\\out\\\\atmpCache\\\\deps\\\\SqmidHelper_Utils_HttpRequestParser_Overview_Workflows_SharedSegmentsPlugins_SharedSegments_SharedSegments_CSServiceFundamental_code_D.deps\");\r\n// getCachedCodeDeps(\"D:\\\\code\\\\UCMDynamics\\\\private\\\\DynamicCode\\\\Plugin\\\\UCMDynamics.AppointmentPlugin\\\\AppointmentOperation.cs\", \"D:\\\\code\\\\ai-dev-tools\\\\csharp-ut-copilot\\\\csharp-ut-core\\\\out\\\\atmpCache\\\\deps\\\\AppointmentOperation_UCMDynamicsAppointmentPlugin_Plugin_DynamicCode_private_UCMDynamics_code_D.deps\");"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function installOrUpdateAnalyzerTool(): void;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.installOrUpdateAnalyzerTool = installOrUpdateAnalyzerTool;
|
|
4
|
+
const runCommand_1 = require("../utils/runCommand");
|
|
5
|
+
const packageId = 'Csharp.Code.Analyzer';
|
|
6
|
+
function getInstalledVersion() {
|
|
7
|
+
const output = (0, runCommand_1.runCommand)('dotnet tool list --global');
|
|
8
|
+
const lines = output.split(/\r?\n/).slice(2); // skip header lines
|
|
9
|
+
for (const line of lines) {
|
|
10
|
+
const parts = line.trim().split(/\s+/);
|
|
11
|
+
if (parts[0].toLowerCase() === packageId.toLowerCase()) {
|
|
12
|
+
return parts[1];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
function getLatestVersion() {
|
|
18
|
+
console.log(`Searching for latest version of ${packageId}`);
|
|
19
|
+
const output = (0, runCommand_1.runCommand)(`dotnet tool search ${packageId}`);
|
|
20
|
+
const lines = output.split(/\r?\n/).slice(2); // skip header lines
|
|
21
|
+
for (const line of lines) {
|
|
22
|
+
const parts = line.trim().split(/\s+/);
|
|
23
|
+
if (parts[0].toLowerCase() === packageId.toLowerCase()) {
|
|
24
|
+
const latestVersion = parts[1];
|
|
25
|
+
console.log(`Get the latest version: ${latestVersion}`);
|
|
26
|
+
return latestVersion;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
function isNewerVersion(current, latest) {
|
|
32
|
+
if (!latest) {
|
|
33
|
+
return false; // Cannot compare if latest version is not available
|
|
34
|
+
}
|
|
35
|
+
const parse = (v) => v.split('.').map(Number);
|
|
36
|
+
const [cMajor, cMinor, cPatch] = parse(current);
|
|
37
|
+
const [lMajor, lMinor, lPatch] = parse(latest);
|
|
38
|
+
if (lMajor > cMajor)
|
|
39
|
+
return true;
|
|
40
|
+
if (lMajor === cMajor && lMinor > cMinor)
|
|
41
|
+
return true;
|
|
42
|
+
if (lMajor === cMajor && lMinor === cMinor && lPatch > cPatch)
|
|
43
|
+
return true;
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
function ensureNugetOrgSource() {
|
|
47
|
+
const output = (0, runCommand_1.runCommand)('dotnet nuget list source');
|
|
48
|
+
if (!output.includes('https://api.nuget.org/v3/index.json')) {
|
|
49
|
+
console.log('Adding nuget.org source...');
|
|
50
|
+
(0, runCommand_1.runCommand)('dotnet nuget add source https://api.nuget.org/v3/index.json --name nuget.org');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function installOrUpdateAnalyzerTool() {
|
|
54
|
+
const startTime = Date.now();
|
|
55
|
+
ensureNugetOrgSource();
|
|
56
|
+
const installedVersion = getInstalledVersion();
|
|
57
|
+
const latestVersion = getLatestVersion();
|
|
58
|
+
if (!latestVersion) {
|
|
59
|
+
console.error('!!!Cannot get latest version from NuGet.');
|
|
60
|
+
if (!installedVersion) {
|
|
61
|
+
console.error('!!!Cannot get installed version.');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (installedVersion) {
|
|
66
|
+
console.log(`${packageId} is installed (version ${installedVersion})`);
|
|
67
|
+
if (isNewerVersion(installedVersion, latestVersion)) {
|
|
68
|
+
console.log(`Updating ${packageId} to version ${latestVersion}...`);
|
|
69
|
+
(0, runCommand_1.runCommand)(`dotnet tool update --global ${packageId}`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
console.log(`${packageId} is already up to date.`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(`${packageId} is not installed. Installing version ${latestVersion}...`);
|
|
77
|
+
(0, runCommand_1.runCommand)(`dotnet tool install --global ${packageId}`);
|
|
78
|
+
}
|
|
79
|
+
console.log(`InstallOrUpdateAnalyzerTool time: ${(Date.now() - startTime) / 1000} seconds`);
|
|
80
|
+
}
|
|
81
|
+
// installOrUpdateAnalyzerTool();
|
|
82
|
+
//# sourceMappingURL=installAnalyzerTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installAnalyzerTool.js","sourceRoot":"","sources":["../../src/analyze/installAnalyzerTool.ts"],"names":[],"mappings":"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","sourcesContent":["import { runCommand } from '../utils/runCommand';\r\n\r\nconst packageId = 'Csharp.Code.Analyzer';\r\n\r\nfunction getInstalledVersion(): string | null {\r\n const output = runCommand('dotnet tool list --global');\r\n const lines = output.split(/\\r?\\n/).slice(2); // skip header lines\r\n for (const line of lines) {\r\n const parts = line.trim().split(/\\s+/);\r\n if (parts[0].toLowerCase() === packageId.toLowerCase()) {\r\n return parts[1];\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction getLatestVersion(): string | null {\r\n console.log(`Searching for latest version of ${packageId}`);\r\n const output = runCommand(`dotnet tool search ${packageId}`);\r\n const lines = output.split(/\\r?\\n/).slice(2); // skip header lines\r\n for (const line of lines) {\r\n const parts = line.trim().split(/\\s+/);\r\n if (parts[0].toLowerCase() === packageId.toLowerCase()) {\r\n const latestVersion = parts[1];\r\n console.log(`Get the latest version: ${latestVersion}`);\r\n return latestVersion;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction isNewerVersion(current: string, latest: string): boolean {\r\n if (!latest) {\r\n return false; // Cannot compare if latest version is not available\r\n }\r\n const parse = (v: string) => v.split('.').map(Number);\r\n const [cMajor, cMinor, cPatch] = parse(current);\r\n const [lMajor, lMinor, lPatch] = parse(latest);\r\n\r\n if (lMajor > cMajor) return true;\r\n if (lMajor === cMajor && lMinor > cMinor) return true;\r\n if (lMajor === cMajor && lMinor === cMinor && lPatch > cPatch) return true;\r\n return false;\r\n}\r\n\r\nfunction ensureNugetOrgSource() {\r\n const output = runCommand('dotnet nuget list source');\r\n if (!output.includes('https://api.nuget.org/v3/index.json')) {\r\n console.log('Adding nuget.org source...');\r\n runCommand('dotnet nuget add source https://api.nuget.org/v3/index.json --name nuget.org');\r\n }\r\n}\r\n\r\n\r\nexport function installOrUpdateAnalyzerTool() {\r\n const startTime = Date.now();\r\n\r\n ensureNugetOrgSource();\r\n\r\n const installedVersion = getInstalledVersion();\r\n const latestVersion = getLatestVersion();\r\n\r\n if (!latestVersion) {\r\n console.error('!!!Cannot get latest version from NuGet.');\r\n if (!installedVersion) {\r\n console.error('!!!Cannot get installed version.');\r\n return;\r\n }\r\n }\r\n\r\n if (installedVersion) {\r\n console.log(`${packageId} is installed (version ${installedVersion})`);\r\n if (isNewerVersion(installedVersion, latestVersion)) {\r\n console.log(`Updating ${packageId} to version ${latestVersion}...`);\r\n runCommand(`dotnet tool update --global ${packageId}`);\r\n } else {\r\n console.log(`${packageId} is already up to date.`);\r\n }\r\n } else {\r\n console.log(`${packageId} is not installed. Installing version ${latestVersion}...`);\r\n runCommand(`dotnet tool install --global ${packageId}`);\r\n }\r\n console.log(`InstallOrUpdateAnalyzerTool time: ${(Date.now() - startTime) / 1000} seconds`);\r\n}\r\n\r\n// installOrUpdateAnalyzerTool();\r\n"]}
|