@exercode/problem-utils 1.16.5 → 1.16.7

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.
Files changed (126) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  2. package/dist/helpers/checkProblemDirIsolation.cjs +2 -2
  3. package/dist/helpers/checkProblemDirIsolation.cjs.map +1 -1
  4. package/dist/helpers/checkProblemDirIsolation.js +2 -2
  5. package/dist/helpers/checkProblemDirIsolation.js.map +1 -1
  6. package/dist/helpers/cleanWorkingDirectory.cjs +2 -2
  7. package/dist/helpers/cleanWorkingDirectory.cjs.map +1 -1
  8. package/dist/helpers/cleanWorkingDirectory.js +2 -2
  9. package/dist/helpers/cleanWorkingDirectory.js.map +1 -1
  10. package/dist/helpers/compareStdoutAsSpaceSeparatedTokens.cjs +2 -2
  11. package/dist/helpers/compareStdoutAsSpaceSeparatedTokens.cjs.map +1 -1
  12. package/dist/helpers/compareStdoutAsSpaceSeparatedTokens.js +2 -2
  13. package/dist/helpers/compareStdoutAsSpaceSeparatedTokens.js.map +1 -1
  14. package/dist/helpers/copyTestCaseFileInput.cjs +2 -2
  15. package/dist/helpers/copyTestCaseFileInput.cjs.map +1 -1
  16. package/dist/helpers/copyTestCaseFileInput.js +2 -2
  17. package/dist/helpers/copyTestCaseFileInput.js.map +1 -1
  18. package/dist/helpers/findEntryPointFile.cjs +2 -2
  19. package/dist/helpers/findEntryPointFile.cjs.map +1 -1
  20. package/dist/helpers/findEntryPointFile.js +2 -2
  21. package/dist/helpers/findEntryPointFile.js.map +1 -1
  22. package/dist/helpers/findLanguageDefinitionByPath.cjs +2 -2
  23. package/dist/helpers/findLanguageDefinitionByPath.cjs.map +1 -1
  24. package/dist/helpers/findLanguageDefinitionByPath.js +2 -2
  25. package/dist/helpers/findLanguageDefinitionByPath.js.map +1 -1
  26. package/dist/helpers/findModelAnswerDirs.cjs +2 -2
  27. package/dist/helpers/findModelAnswerDirs.cjs.map +1 -1
  28. package/dist/helpers/findModelAnswerDirs.js +2 -2
  29. package/dist/helpers/findModelAnswerDirs.js.map +1 -1
  30. package/dist/helpers/judgeByStaticAnalysis.cjs +19 -2
  31. package/dist/helpers/judgeByStaticAnalysis.cjs.map +1 -1
  32. package/dist/helpers/judgeByStaticAnalysis.js +19 -2
  33. package/dist/helpers/judgeByStaticAnalysis.js.map +1 -1
  34. package/dist/helpers/parseArgs.cjs +2 -2
  35. package/dist/helpers/parseArgs.cjs.map +1 -1
  36. package/dist/helpers/parseArgs.js +2 -2
  37. package/dist/helpers/parseArgs.js.map +1 -1
  38. package/dist/helpers/printDebugBanner.cjs +3 -2
  39. package/dist/helpers/printDebugBanner.cjs.map +1 -1
  40. package/dist/helpers/printDebugBanner.js +3 -2
  41. package/dist/helpers/printDebugBanner.js.map +1 -1
  42. package/dist/helpers/printTestCaseResult.cjs +2 -2
  43. package/dist/helpers/printTestCaseResult.cjs.map +1 -1
  44. package/dist/helpers/printTestCaseResult.js +2 -2
  45. package/dist/helpers/printTestCaseResult.js.map +1 -1
  46. package/dist/helpers/readOutputFiles.cjs +2 -2
  47. package/dist/helpers/readOutputFiles.cjs.map +1 -1
  48. package/dist/helpers/readOutputFiles.js +2 -2
  49. package/dist/helpers/readOutputFiles.js.map +1 -1
  50. package/dist/helpers/readProblemMarkdownFrontMatter.cjs +2 -2
  51. package/dist/helpers/readProblemMarkdownFrontMatter.cjs.map +1 -1
  52. package/dist/helpers/readProblemMarkdownFrontMatter.js +2 -2
  53. package/dist/helpers/readProblemMarkdownFrontMatter.js.map +1 -1
  54. package/dist/helpers/readTestCases.cjs +2 -2
  55. package/dist/helpers/readTestCases.cjs.map +1 -1
  56. package/dist/helpers/readTestCases.js +2 -2
  57. package/dist/helpers/readTestCases.js.map +1 -1
  58. package/dist/helpers/removeCommentsInSourceCode.cjs +6 -2
  59. package/dist/helpers/removeCommentsInSourceCode.cjs.map +1 -1
  60. package/dist/helpers/removeCommentsInSourceCode.js +6 -2
  61. package/dist/helpers/removeCommentsInSourceCode.js.map +1 -1
  62. package/dist/helpers/resolveCwds.cjs +2 -2
  63. package/dist/helpers/resolveCwds.cjs.map +1 -1
  64. package/dist/helpers/resolveCwds.js +2 -2
  65. package/dist/helpers/resolveCwds.js.map +1 -1
  66. package/dist/helpers/runCommandInTemporaryPackageManagerProject.cjs +2 -2
  67. package/dist/helpers/runCommandInTemporaryPackageManagerProject.cjs.map +1 -1
  68. package/dist/helpers/runCommandInTemporaryPackageManagerProject.js +2 -2
  69. package/dist/helpers/runCommandInTemporaryPackageManagerProject.js.map +1 -1
  70. package/dist/helpers/runPythonInTemporaryUvProject.cjs +2 -2
  71. package/dist/helpers/runPythonInTemporaryUvProject.cjs.map +1 -1
  72. package/dist/helpers/runPythonInTemporaryUvProject.js +2 -2
  73. package/dist/helpers/runPythonInTemporaryUvProject.js.map +1 -1
  74. package/dist/helpers/sourceCodeGrammars.cjs +2 -2
  75. package/dist/helpers/sourceCodeGrammars.cjs.map +1 -1
  76. package/dist/helpers/sourceCodeGrammars.js +2 -2
  77. package/dist/helpers/sourceCodeGrammars.js.map +1 -1
  78. package/dist/helpers/spawnSyncWithTimeout.cjs +2 -2
  79. package/dist/helpers/spawnSyncWithTimeout.cjs.map +1 -1
  80. package/dist/helpers/spawnSyncWithTimeout.js +2 -2
  81. package/dist/helpers/spawnSyncWithTimeout.js.map +1 -1
  82. package/dist/helpers/startHttpServer.cjs +2 -2
  83. package/dist/helpers/startHttpServer.cjs.map +1 -1
  84. package/dist/helpers/startHttpServer.js +2 -2
  85. package/dist/helpers/startHttpServer.js.map +1 -1
  86. package/dist/index.cjs +1 -2
  87. package/dist/index.js +1 -2
  88. package/dist/presets/command.cjs +2 -2
  89. package/dist/presets/command.cjs.map +1 -1
  90. package/dist/presets/command.js +2 -2
  91. package/dist/presets/command.js.map +1 -1
  92. package/dist/presets/guiCommand.cjs +4 -2
  93. package/dist/presets/guiCommand.cjs.map +1 -1
  94. package/dist/presets/guiCommand.js +4 -2
  95. package/dist/presets/guiCommand.js.map +1 -1
  96. package/dist/presets/llm.cjs +2 -2
  97. package/dist/presets/llm.cjs.map +1 -1
  98. package/dist/presets/llm.js +2 -2
  99. package/dist/presets/llm.js.map +1 -1
  100. package/dist/presets/stdio.cjs +2 -2
  101. package/dist/presets/stdio.cjs.map +1 -1
  102. package/dist/presets/stdio.js +2 -2
  103. package/dist/presets/stdio.js.map +1 -1
  104. package/dist/types/decisionCode.cjs +2 -2
  105. package/dist/types/decisionCode.cjs.map +1 -1
  106. package/dist/types/decisionCode.js +2 -2
  107. package/dist/types/decisionCode.js.map +1 -1
  108. package/dist/types/language.cjs +11 -2
  109. package/dist/types/language.cjs.map +1 -1
  110. package/dist/types/language.js +11 -2
  111. package/dist/types/language.js.map +1 -1
  112. package/dist/types/problem.cjs +2 -2
  113. package/dist/types/problem.cjs.map +1 -1
  114. package/dist/types/problem.js +2 -2
  115. package/dist/types/problem.js.map +1 -1
  116. package/dist/types/testCaseResult.cjs +2 -2
  117. package/dist/types/testCaseResult.cjs.map +1 -1
  118. package/dist/types/testCaseResult.js +2 -2
  119. package/dist/types/testCaseResult.js.map +1 -1
  120. package/package.json +14 -14
  121. package/dist/_virtual/_rollupPluginBabelHelpers.cjs +0 -4
  122. package/dist/_virtual/_rollupPluginBabelHelpers.cjs.map +0 -1
  123. package/dist/_virtual/_rollupPluginBabelHelpers.js +0 -4
  124. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  125. package/dist/index.cjs.map +0 -1
  126. package/dist/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"judgeByStaticAnalysis.cjs","sources":["../../src/helpers/judgeByStaticAnalysis.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { findLanguageDefinitionByPath } from './findLanguageDefinitionByPath.js';\nimport { removeCommentsInSourceCode } from './removeCommentsInSourceCode.js';\n\nexport async function judgeByStaticAnalysis(\n cwd: string,\n problemMarkdownFrontMatterLike: Pick<\n ProblemMarkdownFrontMatter,\n 'forbiddenRegExpsInCode' | 'forbiddenTextsInCode' | 'requiredRegExpsInCode' | 'requiredSubmissionFilePaths'\n >\n): Promise<Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown'> | undefined> {\n const filePathSet = new Set<string>();\n const sourceCodeWithoutCommentFiles: { path: string; data: string }[] = [];\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true, recursive: true })) {\n if (!dirent.isFile()) continue;\n\n const relativePath = path.relative(cwd, path.join(dirent.parentPath, dirent.name));\n filePathSet.add(relativePath);\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n const isBinary = text.includes('\\uFFFD');\n if (isBinary) continue;\n\n const languageDefinition = findLanguageDefinitionByPath(dirent.name);\n if (!languageDefinition) continue;\n\n sourceCodeWithoutCommentFiles.push({\n path: dirent.name,\n data: languageDefinition.grammer ? removeCommentsInSourceCode(languageDefinition.grammer, text) : text,\n });\n }\n\n if (problemMarkdownFrontMatterLike.requiredSubmissionFilePaths) {\n const missingFilePaths = problemMarkdownFrontMatterLike.requiredSubmissionFilePaths\n .filter((p) => !filePathSet.has(p))\n .toSorted();\n\n if (missingFilePaths.length > 0) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n feedbackMarkdown: `ファイルが不足しています。\n次のファイルを追加してから再度提出してください。\n\n${missingFilePaths.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n }\n\n const forbiddenFounds: { pattern: string; path: string; match: string }[] = [];\n\n for (const file of sourceCodeWithoutCommentFiles) {\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenRegExpsInCode ?? []) {\n const re = new RegExp(pattern, 'g');\n const mathces = file.data.matchAll(re);\n for (const match of mathces) forbiddenFounds.push({ pattern: re.toString(), path: file.path, match: match[0] });\n }\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenTextsInCode ?? []) {\n let p = 0;\n while (p < file.data.length) {\n const index = file.data.indexOf(pattern, p);\n if (index === -1) break;\n forbiddenFounds.push({ pattern, path: file.path, match: pattern });\n p = index + pattern.length;\n }\n }\n }\n\n if (forbiddenFounds.length > 0) {\n return {\n decisionCode: DecisionCode.FORBIDDEN_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n${forbiddenFounds.map((f) => `| \\`${f.path}\\` | \\`${f.pattern}\\` | \\`${f.match}\\` |`).join('\\n')}\n`,\n };\n }\n\n const missingRequiredPatterns: string[] = [];\n\n for (const pattern of problemMarkdownFrontMatterLike.requiredRegExpsInCode ?? []) {\n const re = new RegExp(pattern);\n const isFound = sourceCodeWithoutCommentFiles.some((f) => re.test(f.data));\n if (!isFound) missingRequiredPatterns.push(re.toString());\n }\n\n if (missingRequiredPatterns.length > 0) {\n return {\n decisionCode: DecisionCode.REQUIRED_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n${missingRequiredPatterns.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n\n return;\n}\n"],"names":["_judgeByStaticAnalysis","_asyncToGenerator","_regenerator","m","_callee","cwd","problemMarkdownFrontMatterLike","_problemMarkdownFront3","filePathSet","sourceCodeWithoutCommentFiles","_iterator","_step","dirent","relativePath","text","languageDefinition","missingFilePaths","forbiddenFounds","_i","_sourceCodeWithoutCom","_problemMarkdownFront","_problemMarkdownFront2","file","_iterator2","_step2","pattern","re","mathces","_iterator4","_step4","match","_iterator3","_step3","_pattern","p","index","missingRequiredPatterns","_iterator5","_step5","_loop","_t","_t2","_t3","_t4","w","_context2","n","Set","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","recursive","v","s","done","value","isFile","a","path","relative","join","parentPath","name","add","readFile","includes","findLanguageDefinitionByPath","push","data","grammer","removeCommentsInSourceCode","e","f","requiredSubmissionFilePaths","filter","has","toSorted","length","decisionCode","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","feedbackMarkdown","concat","map","forbiddenRegExpsInCode","RegExp","matchAll","toString","err","forbiddenTextsInCode","indexOf","FORBIDDEN_PATTERNS_IN_CODE_ERROR","requiredRegExpsInCode","_context","some","test","d","_regeneratorValues","REQUIRED_PATTERNS_IN_CODE_ERROR","apply","this","arguments","_x","_x2"],"mappings":"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"}
1
+ {"version":3,"file":"judgeByStaticAnalysis.cjs","names":["fs","path","findLanguageDefinitionByPath","removeCommentsInSourceCode","DecisionCode"],"sources":["../../src/helpers/judgeByStaticAnalysis.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { findLanguageDefinitionByPath } from './findLanguageDefinitionByPath.js';\nimport { removeCommentsInSourceCode } from './removeCommentsInSourceCode.js';\n\nexport async function judgeByStaticAnalysis(\n cwd: string,\n problemMarkdownFrontMatterLike: Pick<\n ProblemMarkdownFrontMatter,\n 'forbiddenRegExpsInCode' | 'forbiddenTextsInCode' | 'requiredRegExpsInCode' | 'requiredSubmissionFilePaths'\n >\n): Promise<Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown'> | undefined> {\n const filePathSet = new Set<string>();\n const sourceCodeWithoutCommentFiles: { path: string; data: string }[] = [];\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true, recursive: true })) {\n if (!dirent.isFile()) continue;\n\n const relativePath = path.relative(cwd, path.join(dirent.parentPath, dirent.name));\n filePathSet.add(relativePath);\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n const isBinary = text.includes('\\uFFFD');\n if (isBinary) continue;\n\n const languageDefinition = findLanguageDefinitionByPath(dirent.name);\n if (!languageDefinition) continue;\n\n sourceCodeWithoutCommentFiles.push({\n path: dirent.name,\n data: languageDefinition.grammer ? removeCommentsInSourceCode(languageDefinition.grammer, text) : text,\n });\n }\n\n if (problemMarkdownFrontMatterLike.requiredSubmissionFilePaths) {\n const missingFilePaths = problemMarkdownFrontMatterLike.requiredSubmissionFilePaths\n .filter((p) => !filePathSet.has(p))\n .toSorted();\n\n if (missingFilePaths.length > 0) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n feedbackMarkdown: `ファイルが不足しています。\n次のファイルを追加してから再度提出してください。\n\n${missingFilePaths.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n }\n\n const forbiddenFounds: { pattern: string; path: string; match: string }[] = [];\n\n for (const file of sourceCodeWithoutCommentFiles) {\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenRegExpsInCode ?? []) {\n const re = new RegExp(pattern, 'g');\n const mathces = file.data.matchAll(re);\n for (const match of mathces) forbiddenFounds.push({ pattern: re.toString(), path: file.path, match: match[0] });\n }\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenTextsInCode ?? []) {\n let p = 0;\n while (p < file.data.length) {\n const index = file.data.indexOf(pattern, p);\n if (index === -1) break;\n forbiddenFounds.push({ pattern, path: file.path, match: pattern });\n p = index + pattern.length;\n }\n }\n }\n\n if (forbiddenFounds.length > 0) {\n return {\n decisionCode: DecisionCode.FORBIDDEN_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n${forbiddenFounds.map((f) => `| \\`${f.path}\\` | \\`${f.pattern}\\` | \\`${f.match}\\` |`).join('\\n')}\n`,\n };\n }\n\n const missingRequiredPatterns: string[] = [];\n\n for (const pattern of problemMarkdownFrontMatterLike.requiredRegExpsInCode ?? []) {\n const re = new RegExp(pattern);\n const isFound = sourceCodeWithoutCommentFiles.some((f) => re.test(f.data));\n if (!isFound) missingRequiredPatterns.push(re.toString());\n }\n\n if (missingRequiredPatterns.length > 0) {\n return {\n decisionCode: DecisionCode.REQUIRED_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n${missingRequiredPatterns.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n\n return;\n}\n"],"mappings":"6RAUA,eAAsB,EACpB,EACA,EAIgF,CAChF,IAAM,EAAc,IAAI,IAClB,EAAkE,CAAC,EAEzE,IAAK,IAAM,KAAU,MAAMA,EAAAA,QAAG,SAAS,QAAQ,EAAK,CAAE,cAAe,GAAM,UAAW,EAAK,CAAC,EAAG,CAC7F,GAAI,CAAC,EAAO,OAAO,EAAG,SAEtB,IAAM,EAAeC,EAAAA,QAAK,SAAS,EAAKA,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,EACjF,EAAY,IAAI,CAAY,EAE5B,IAAM,EAAO,MAAMD,EAAAA,QAAG,SAAS,SAASC,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,EAEzF,GADiB,EAAK,SAAS,GACpB,EAAG,SAEd,IAAM,EAAqBC,EAAAA,6BAA6B,EAAO,IAAI,EAC9D,GAEL,EAA8B,KAAK,CACjC,KAAM,EAAO,KACb,KAAM,EAAmB,QAAUC,EAAAA,2BAA2B,EAAmB,QAAS,CAAI,EAAI,CACpG,CAAC,CACH,CAEA,GAAI,EAA+B,4BAA6B,CAC9D,IAAM,EAAmB,EAA+B,4BACrD,OAAQ,GAAM,CAAC,EAAY,IAAI,CAAC,CAAC,CAAC,CAClC,SAAS,EAEZ,GAAI,EAAiB,OAAS,EAC5B,MAAO,CACL,aAAcC,EAAAA,aAAa,uCAC3B,iBAAkB;;;EAGxB,EAAiB,IAAK,GAAM,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK;CAAI,EAAE;CAEjD,CAEJ,CAEA,IAAM,EAAsE,CAAC,EAE7E,IAAK,IAAM,KAAQ,EAA+B,CAChD,IAAK,IAAM,KAAW,EAA+B,wBAA0B,CAAC,EAAG,CACjF,IAAM,EAAK,IAAI,OAAO,EAAS,GAAG,EAC5B,EAAU,EAAK,KAAK,SAAS,CAAE,EACrC,IAAK,IAAM,KAAS,EAAS,EAAgB,KAAK,CAAE,QAAS,EAAG,SAAS,EAAG,KAAM,EAAK,KAAM,MAAO,EAAM,EAAG,CAAC,CAChH,CACA,IAAK,IAAM,KAAW,EAA+B,sBAAwB,CAAC,EAAG,CAC/E,IAAI,EAAI,EACR,KAAO,EAAI,EAAK,KAAK,QAAQ,CAC3B,IAAM,EAAQ,EAAK,KAAK,QAAQ,EAAS,CAAC,EAC1C,GAAI,IAAU,GAAI,MAClB,EAAgB,KAAK,CAAE,UAAS,KAAM,EAAK,KAAM,MAAO,CAAQ,CAAC,EACjE,EAAI,EAAQ,EAAQ,MACtB,CACF,CACF,CAEA,GAAI,EAAgB,OAAS,EAC3B,MAAO,CACL,aAAcA,EAAAA,aAAa,iCAC3B,iBAAkB;;;;;EAKtB,EAAgB,IAAK,GAAM,OAAO,EAAE,KAAK,SAAS,EAAE,QAAQ,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC,KAAK;CAAI,EAAE;CAE7F,EAGF,IAAM,EAAoC,CAAC,EAE3C,IAAK,IAAM,KAAW,EAA+B,uBAAyB,CAAC,EAAG,CAChF,IAAM,EAAK,IAAI,OAAO,CAAO,EACb,EAA8B,KAAM,GAAM,EAAG,KAAK,EAAE,IAAI,CAC7D,GAAG,EAAwB,KAAK,EAAG,SAAS,CAAC,CAC1D,CAEA,GAAI,EAAwB,OAAS,EACnC,MAAO,CACL,aAAcA,EAAAA,aAAa,gCAC3B,iBAAkB;;;EAGtB,EAAwB,IAAK,GAAM,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK;CAAI,EAAE;CAE1D,CAIJ"}
@@ -1,2 +1,19 @@
1
- import{asyncToGenerator as e,regenerator as n,regeneratorValues as a,createForOfIteratorHelper as r}from"../_virtual/_rollupPluginBabelHelpers.js";import t from"node:fs";import o from"node:path";import{DecisionCode as s}from"../types/decisionCode.js";import{findLanguageDefinitionByPath as c}from"./findLanguageDefinitionByPath.js";import{removeCommentsInSourceCode as i}from"./removeCommentsInSourceCode.js";function u(e,n){return f.apply(this,arguments)}function f(){return(f=e(n().m(function e(u,f){var p,d,l,m,h,b,k,g,R,E,v,I,S,_,w,C,y,j,O,F,P,x,D,N,T,M,B,q,A,U,G,H,L,Q,V,z,J;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:return d=new Set,l=[],Q=r,e.n=1,t.promises.readdir(u,{withFileTypes:!0,recursive:!0});case 1:m=Q(e.v),e.p=2,m.s();case 3:if((h=m.n()).done){e.n=9;break}if((b=h.value).isFile()){e.n=4;break}return e.a(3,8);case 4:return k=o.relative(u,o.join(b.parentPath,b.name)),d.add(k),e.n=5,t.promises.readFile(o.join(b.parentPath,b.name),"utf8");case 5:if(g=e.v,!g.includes("�")){e.n=6;break}return e.a(3,8);case 6:if(R=c(b.name)){e.n=7;break}return e.a(3,8);case 7:l.push({path:b.name,data:R.grammer?i(R.grammer,g):g});case 8:e.n=3;break;case 9:e.n=11;break;case 10:e.p=10,V=e.v,m.e(V);case 11:return e.p=11,m.f(),e.f(11);case 12:if(!f.requiredSubmissionFilePaths){e.n=13;break}if(E=f.requiredSubmissionFilePaths.filter(function(e){return!d.has(e)}).toSorted(),!(E.length>0)){e.n=13;break}return e.a(2,{decisionCode:s.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,feedbackMarkdown:"ファイルが不足しています。\n次のファイルを追加してから再度提出してください。\n\n".concat(E.map(function(e){return"- `".concat(e,"`")}).join("\n"),"\n")});case 13:v=[],I=0,S=l;case 14:if(!(I<S.length)){e.n=24;break}C=S[I],y=r(null!=(_=f.forbiddenRegExpsInCode)?_:[]);try{for(y.s();!(j=y.n()).done;){O=j.value,F=new RegExp(O,"g"),P=C.data.matchAll(F),x=r(P);try{for(x.s();!(D=x.n()).done;)N=D.value,v.push({pattern:F.toString(),path:C.path,match:N[0]})}catch(e){x.e(e)}finally{x.f()}}}catch(e){y.e(e)}finally{y.f()}T=r(null!=(w=f.forbiddenTextsInCode)?w:[]),e.p=15,T.s();case 16:if((M=T.n()).done){e.n=20;break}B=M.value,q=0;case 17:if(!(q<C.data.length)){e.n=19;break}if(-1!==(A=C.data.indexOf(B,q))){e.n=18;break}return e.a(3,19);case 18:v.push({pattern:B,path:C.path,match:B}),q=A+B.length,e.n=17;break;case 19:e.n=16;break;case 20:e.n=22;break;case 21:e.p=21,z=e.v,T.e(z);case 22:return e.p=22,T.f(),e.f(22);case 23:I++,e.n=14;break;case 24:if(!(v.length>0)){e.n=25;break}return e.a(2,{decisionCode:s.FORBIDDEN_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:"ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n".concat(v.map(function(e){return"| `".concat(e.path,"` | `").concat(e.pattern,"` | `").concat(e.match,"` |")}).join("\n"),"\n")});case 25:U=[],G=r(null!=(p=f.requiredRegExpsInCode)?p:[]),e.p=26,L=n().m(function e(){var a,r;return n().w(function(e){for(;;)switch(e.n){case 0:a=H.value,r=new RegExp(a),l.some(function(e){return r.test(e.data)})||U.push(r.toString());case 1:return e.a(2)}},e)}),G.s();case 27:if((H=G.n()).done){e.n=29;break}return e.d(a(L()),28);case 28:e.n=27;break;case 29:e.n=31;break;case 30:e.p=30,J=e.v,G.e(J);case 31:return e.p=31,G.f(),e.f(31);case 32:if(!(U.length>0)){e.n=33;break}return e.a(2,{decisionCode:s.REQUIRED_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:"ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n".concat(U.map(function(e){return"- `".concat(e,"`")}).join("\n"),"\n")});case 33:return e.a(2)}},e,null,[[26,30,31,32],[15,21,22,23],[2,10,11,12]])}))).apply(this,arguments)}export{u as judgeByStaticAnalysis};
2
- //# sourceMappingURL=judgeByStaticAnalysis.js.map
1
+ import{removeCommentsInSourceCode as e}from"./removeCommentsInSourceCode.js";import{DecisionCode as t}from"../types/decisionCode.js";import{findLanguageDefinitionByPath as n}from"./findLanguageDefinitionByPath.js";import r from"node:path";import i from"node:fs";async function a(a,o){let s=new Set,c=[];for(let t of await i.promises.readdir(a,{withFileTypes:!0,recursive:!0})){if(!t.isFile())continue;let o=r.relative(a,r.join(t.parentPath,t.name));s.add(o);let l=await i.promises.readFile(r.join(t.parentPath,t.name),`utf8`);if(l.includes(`�`))continue;let u=n(t.name);u&&c.push({path:t.name,data:u.grammer?e(u.grammer,l):l})}if(o.requiredSubmissionFilePaths){let e=o.requiredSubmissionFilePaths.filter(e=>!s.has(e)).toSorted();if(e.length>0)return{decisionCode:t.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,feedbackMarkdown:`ファイルが不足しています。
2
+ 次のファイルを追加してから再度提出してください。
3
+
4
+ ${e.map(e=>`- \`${e}\``).join(`
5
+ `)}
6
+ `}}let l=[];for(let e of c){for(let t of o.forbiddenRegExpsInCode??[]){let n=new RegExp(t,`g`),r=e.data.matchAll(n);for(let t of r)l.push({pattern:n.toString(),path:e.path,match:t[0]})}for(let t of o.forbiddenTextsInCode??[]){let n=0;for(;n<e.data.length;){let r=e.data.indexOf(t,n);if(r===-1)break;l.push({pattern:t,path:e.path,match:t}),n=r+t.length}}}if(l.length>0)return{decisionCode:t.FORBIDDEN_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:`ソースコード中に禁止された文字列が含まれています。
7
+ ソースコードを修正してから再度提出してください。
8
+
9
+ | ファイル | 禁止パターン | 文字列 |
10
+ | -------- | ------------ | ------ |
11
+ ${l.map(e=>`| \`${e.path}\` | \`${e.pattern}\` | \`${e.match}\` |`).join(`
12
+ `)}
13
+ `};let u=[];for(let e of o.requiredRegExpsInCode??[]){let t=new RegExp(e);c.some(e=>t.test(e.data))||u.push(t.toString())}if(u.length>0)return{decisionCode:t.REQUIRED_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:`ソースコード中に必要な文字列が含まれていません。
14
+ ソースコードを修正してから再度提出してください。
15
+
16
+ ${u.map(e=>`- \`${e}\``).join(`
17
+ `)}
18
+ `}}export{a as judgeByStaticAnalysis};
19
+ //# sourceMappingURL=judgeByStaticAnalysis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"judgeByStaticAnalysis.js","sources":["../../src/helpers/judgeByStaticAnalysis.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { findLanguageDefinitionByPath } from './findLanguageDefinitionByPath.js';\nimport { removeCommentsInSourceCode } from './removeCommentsInSourceCode.js';\n\nexport async function judgeByStaticAnalysis(\n cwd: string,\n problemMarkdownFrontMatterLike: Pick<\n ProblemMarkdownFrontMatter,\n 'forbiddenRegExpsInCode' | 'forbiddenTextsInCode' | 'requiredRegExpsInCode' | 'requiredSubmissionFilePaths'\n >\n): Promise<Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown'> | undefined> {\n const filePathSet = new Set<string>();\n const sourceCodeWithoutCommentFiles: { path: string; data: string }[] = [];\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true, recursive: true })) {\n if (!dirent.isFile()) continue;\n\n const relativePath = path.relative(cwd, path.join(dirent.parentPath, dirent.name));\n filePathSet.add(relativePath);\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n const isBinary = text.includes('\\uFFFD');\n if (isBinary) continue;\n\n const languageDefinition = findLanguageDefinitionByPath(dirent.name);\n if (!languageDefinition) continue;\n\n sourceCodeWithoutCommentFiles.push({\n path: dirent.name,\n data: languageDefinition.grammer ? removeCommentsInSourceCode(languageDefinition.grammer, text) : text,\n });\n }\n\n if (problemMarkdownFrontMatterLike.requiredSubmissionFilePaths) {\n const missingFilePaths = problemMarkdownFrontMatterLike.requiredSubmissionFilePaths\n .filter((p) => !filePathSet.has(p))\n .toSorted();\n\n if (missingFilePaths.length > 0) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n feedbackMarkdown: `ファイルが不足しています。\n次のファイルを追加してから再度提出してください。\n\n${missingFilePaths.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n }\n\n const forbiddenFounds: { pattern: string; path: string; match: string }[] = [];\n\n for (const file of sourceCodeWithoutCommentFiles) {\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenRegExpsInCode ?? []) {\n const re = new RegExp(pattern, 'g');\n const mathces = file.data.matchAll(re);\n for (const match of mathces) forbiddenFounds.push({ pattern: re.toString(), path: file.path, match: match[0] });\n }\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenTextsInCode ?? []) {\n let p = 0;\n while (p < file.data.length) {\n const index = file.data.indexOf(pattern, p);\n if (index === -1) break;\n forbiddenFounds.push({ pattern, path: file.path, match: pattern });\n p = index + pattern.length;\n }\n }\n }\n\n if (forbiddenFounds.length > 0) {\n return {\n decisionCode: DecisionCode.FORBIDDEN_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n${forbiddenFounds.map((f) => `| \\`${f.path}\\` | \\`${f.pattern}\\` | \\`${f.match}\\` |`).join('\\n')}\n`,\n };\n }\n\n const missingRequiredPatterns: string[] = [];\n\n for (const pattern of problemMarkdownFrontMatterLike.requiredRegExpsInCode ?? []) {\n const re = new RegExp(pattern);\n const isFound = sourceCodeWithoutCommentFiles.some((f) => re.test(f.data));\n if (!isFound) missingRequiredPatterns.push(re.toString());\n }\n\n if (missingRequiredPatterns.length > 0) {\n return {\n decisionCode: DecisionCode.REQUIRED_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n${missingRequiredPatterns.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n\n return;\n}\n"],"names":["judgeByStaticAnalysis","_x","_x2","_judgeByStaticAnalysis","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","cwd","problemMarkdownFrontMatterLike","_problemMarkdownFront3","filePathSet","sourceCodeWithoutCommentFiles","_iterator","_step","dirent","relativePath","text","languageDefinition","missingFilePaths","forbiddenFounds","_i","_sourceCodeWithoutCom","_problemMarkdownFront","_problemMarkdownFront2","file","_iterator2","_step2","pattern","re","mathces","_iterator4","_step4","match","_iterator3","_step3","_pattern","p","index","missingRequiredPatterns","_iterator5","_step5","_loop","_t","_t2","_t3","_t4","w","_context2","n","Set","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","recursive","v","s","done","value","isFile","a","path","relative","join","parentPath","name","add","readFile","includes","findLanguageDefinitionByPath","push","data","grammer","removeCommentsInSourceCode","e","f","requiredSubmissionFilePaths","filter","has","toSorted","length","decisionCode","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","feedbackMarkdown","concat","map","forbiddenRegExpsInCode","RegExp","matchAll","toString","err","forbiddenTextsInCode","indexOf","FORBIDDEN_PATTERNS_IN_CODE_ERROR","requiredRegExpsInCode","_context","some","test","d","_regeneratorValues","REQUIRED_PATTERNS_IN_CODE_ERROR"],"mappings":"yZAUA,SAAsBA,EAAqBC,EAAAC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CAkG1C,SAAAH,IAAA,OAAAA,EAAAI,EAAAC,IAAAC,EAlGM,SAAAC,EACLC,EACAC,GAGC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAzC,IAAA0C,EAAA,SAAAC,GAAA,cAAAA,EAAAX,EAAAW,EAAAC,GAAA,KAAA,EAGyE,OADpEtC,EAAc,IAAIuC,IAClBtC,EAAkE,GAAE+B,EAAAQ,EAAAH,EAAAC,EAAA,EAE/CG,EAAGC,SAASC,QAAQ9C,EAAK,CAAE+C,eAAe,EAAMC,WAAW,IAAO,KAAA,EAAA3C,EAAA8B,EAAAK,EAAAS,GAAAT,EAAAX,EAAA,EAAAxB,EAAA6C,IAAA,KAAA,EAAA,IAAA5C,EAAAD,EAAAoC,KAAAU,KAAA,CAAAX,EAAAC,EAAA,EAAA,KAAA,CAA5E,IAANlC,EAAMD,EAAA8C,OACHC,SAAQ,CAAAb,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EAAA,GAAA,KAAA,EAGU,OADxB9C,EAAe+C,EAAKC,SAASxD,EAAKuD,EAAKE,KAAKlD,EAAOmD,WAAYnD,EAAOoD,OAC5ExD,EAAYyD,IAAIpD,GAAcgC,EAAAC,EAAA,EAEXG,EAAGC,SAASgB,SAASN,EAAKE,KAAKlD,EAAOmD,WAAYnD,EAAOoD,MAAO,QAAO,KAAA,EAClD,GADlClD,EAAI+B,EAAAS,GACOxC,EAAKqD,SAAS,KACnB,CAAAtB,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EAAA,GAAA,KAAA,EAEwD,GAA9D5C,EAAqBqD,EAA6BxD,EAAOoD,MACxC,CAAAnB,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EAAA,GAAA,KAAA,EAEvBlD,EAA8B4D,KAAK,CACjCT,KAAMhD,EAAOoD,KACbM,KAAMvD,EAAmBwD,QAAUC,EAA2BzD,EAAmBwD,QAASzD,GAAQA,IACjG,KAAA,EAAA+B,EAAAC,EAAA,EAAA,MAAA,KAAA,EAAAD,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAX,EAAA,GAAAO,EAAAI,EAAAS,EAAA5C,EAAA+D,EAAAhC,GAAA,KAAA,GAAA,OAAAI,EAAAX,EAAA,GAAAxB,EAAAgE,IAAA7B,EAAA6B,EAAA,IAAA,KAAA,GAAA,IAGDpE,EAA+BqE,4BAA2B,CAAA9B,EAAAC,EAAA,GAAA,KAAA,CAG/C,GAFP9B,EAAmBV,EAA+BqE,4BACrDC,OAAO,SAAC1C,GAAC,OAAM1B,EAAYqE,IAAI3C,EAAE,GACjC4C,aAEC9D,EAAiB+D,OAAS,GAAC,CAAAlC,EAAAC,EAAA,GAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EACtB,CACLqB,aAAcC,EAAaC,uCAC3BC,iBAAgB,8CAAAC,OAGtBpE,EAAiBqE,IAAI,SAACnD,GAAC,MAAA,MAAAkD,OAAYlD,EAAC,IAAA,GAAM4B,KAAK,MAAK,QAE/C,KAAA,GAIC7C,EAAsE,GAAEC,EAAA,EAAAC,EAE3DV,EAA6B,KAAA,GAAA,KAAAS,EAAAC,EAAA4D,QAAA,CAAAlC,EAAAC,EAAA,GAAA,KAAA,CAArCxB,EAAIH,EAAAD,GAAAK,EAAAyB,EAC8D,OAD9D5B,EACSd,EAA+BgF,wBAAsBlE,EAAI,IAAE,IAAjF,IAAAG,EAAAgC,MAAA/B,EAAAD,EAAAuB,KAAAU,MAAmF,CAAxE/B,EAAOD,EAAAiC,MACV/B,EAAK,IAAI6D,OAAO9D,EAAS,KACzBE,EAAUL,EAAKgD,KAAKkB,SAAS9D,GAAGE,EAAAoB,EAClBrB,GAAO,IAA3B,IAAAC,EAAA2B,MAAA1B,EAAAD,EAAAkB,KAAAU,MAAW1B,EAAKD,EAAA4B,MAAaxC,EAAgBoD,KAAK,CAAE5C,QAASC,EAAG+D,WAAY7B,KAAMtC,EAAKsC,KAAM9B,MAAOA,EAAM,IAAM,CAAA,MAAA4D,GAAA9D,EAAA6C,EAAAiB,EAAA,CAAA,QAAA9D,EAAA8C,GAAA,CAClH,CAAC,CAAA,MAAAgB,GAAAnE,EAAAkD,EAAAiB,EAAA,CAAA,QAAAnE,EAAAmD,GAAA,CAAA3C,EAAAiB,EACwE,OADxE3B,EACqBf,EAA+BqF,sBAAoBtE,EAAI,IAAEwB,EAAAX,EAAA,GAAAH,EAAAwB,IAAA,KAAA,GAAA,IAAAvB,EAAAD,EAAAe,KAAAU,KAAA,CAAAX,EAAAC,EAAA,GAAA,KAAA,CAApErB,EAAOO,EAAAyB,MACZvB,EAAI,EAAC,KAAA,GAAA,KACFA,EAAIZ,EAAKgD,KAAKS,QAAM,CAAAlC,EAAAC,EAAA,GAAA,KAAA,CACkB,IAC7B,KADRX,EAAQb,EAAKgD,KAAKsB,QAAQnE,EAASS,IACzB,CAAAW,EAAAC,EAAA,GAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EAAA,IAAA,KAAA,GAChB1C,EAAgBoD,KAAK,CAAE5C,QAAAA,EAASmC,KAAMtC,EAAKsC,KAAM9B,MAAOL,IACxDS,EAAIC,EAAQV,EAAQsD,OAAOlC,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAX,EAAA,GAAAQ,EAAAG,EAAAS,EAAAvB,EAAA0C,EAAA/B,GAAA,KAAA,GAAA,OAAAG,EAAAX,EAAA,GAAAH,EAAA2C,IAAA7B,EAAA6B,EAAA,IAAA,KAAA,GAAAxD,IAAA2B,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAA,KAK7B7B,EAAgB8D,OAAS,GAAC,CAAAlC,EAAAC,EAAA,GAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EACrB,CACLqB,aAAcC,EAAaY,iCAC3BV,iBAAgB,yHAAAC,OAKpBnE,EAAgBoE,IAAI,SAACX,GAAC,MAAA,MAAAU,OAAYV,EAAEd,cAAIwB,OAAUV,EAAEjD,QAAO,SAAA2D,OAAUV,EAAE5C,MAAK,MAAA,GAAQgC,KAAK,MAAK,QAE3F,KAAA,GAGG1B,EAAoC,GAAEC,EAAAW,EAE8B,OAF9BzC,EAEtBD,EAA+BwF,uBAAqBvF,EAAI,IAAEsC,EAAAX,EAAA,GAAAK,EAAArC,IAAAC,WAAAoC,IAAA,IAAAd,EAAAC,EAAA,OAAAxB,IAAA0C,EAAA,SAAAmD,GAAA,cAAAA,EAAAjD,GAAA,KAAA,EAArErB,EAAOa,EAAAmB,MACV/B,EAAK,IAAI6D,OAAO9D,GACNhB,EAA8BuF,KAAK,SAACtB,GAAC,OAAKhD,EAAGuE,KAAKvB,EAAEJ,KAAK,IAC3DlC,EAAwBiC,KAAK3C,EAAG+D,YAAY,KAAA,EAAA,OAAAM,EAAApC,EAAA,GAAA,EAAApB,EAAA,GAAAF,EAAAkB,IAAA,KAAA,GAAA,IAAAjB,EAAAD,EAAAS,KAAAU,KAAA,CAAAX,EAAAC,EAAA,GAAA,KAAA,CAAA,OAAAD,EAAAqD,EAAAC,EAAA5D,KAAA,IAAA,KAAA,GAAAM,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAX,EAAA,GAAAS,EAAAE,EAAAS,EAAAjB,EAAAoC,EAAA9B,GAAA,KAAA,GAAA,OAAAE,EAAAX,EAAA,GAAAG,EAAAqC,IAAA7B,EAAA6B,EAAA,IAAA,KAAA,GAAA,KAGxDtC,EAAwB2C,OAAS,GAAC,CAAAlC,EAAAC,EAAA,GAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EAC7B,CACLqB,aAAcC,EAAamB,gCAC3BjB,iBAAgB,yDAAAC,OAGpBhD,EAAwBiD,IAAI,SAACnD,GAAC,MAAA,MAAAkD,OAAYlD,EAAC,IAAA,GAAM4B,KAAK,MAAK,QAExD,KAAA,GAAA,OAAAjB,EAAAc,EAAA,GAAA,EAAAvD,EAAA,KAAA,CAAA,CAAA,GAAA,GAAA,GAAA,IAAA,CAAA,GAAA,GAAA,GAAA,IAAA,CAAA,EAAA,GAAA,GAAA,KAAA,KAIJN,MAAAC,KAAAC,UAAA"}
1
+ {"version":3,"file":"judgeByStaticAnalysis.js","names":[],"sources":["../../src/helpers/judgeByStaticAnalysis.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { findLanguageDefinitionByPath } from './findLanguageDefinitionByPath.js';\nimport { removeCommentsInSourceCode } from './removeCommentsInSourceCode.js';\n\nexport async function judgeByStaticAnalysis(\n cwd: string,\n problemMarkdownFrontMatterLike: Pick<\n ProblemMarkdownFrontMatter,\n 'forbiddenRegExpsInCode' | 'forbiddenTextsInCode' | 'requiredRegExpsInCode' | 'requiredSubmissionFilePaths'\n >\n): Promise<Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown'> | undefined> {\n const filePathSet = new Set<string>();\n const sourceCodeWithoutCommentFiles: { path: string; data: string }[] = [];\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true, recursive: true })) {\n if (!dirent.isFile()) continue;\n\n const relativePath = path.relative(cwd, path.join(dirent.parentPath, dirent.name));\n filePathSet.add(relativePath);\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n const isBinary = text.includes('\\uFFFD');\n if (isBinary) continue;\n\n const languageDefinition = findLanguageDefinitionByPath(dirent.name);\n if (!languageDefinition) continue;\n\n sourceCodeWithoutCommentFiles.push({\n path: dirent.name,\n data: languageDefinition.grammer ? removeCommentsInSourceCode(languageDefinition.grammer, text) : text,\n });\n }\n\n if (problemMarkdownFrontMatterLike.requiredSubmissionFilePaths) {\n const missingFilePaths = problemMarkdownFrontMatterLike.requiredSubmissionFilePaths\n .filter((p) => !filePathSet.has(p))\n .toSorted();\n\n if (missingFilePaths.length > 0) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n feedbackMarkdown: `ファイルが不足しています。\n次のファイルを追加してから再度提出してください。\n\n${missingFilePaths.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n }\n\n const forbiddenFounds: { pattern: string; path: string; match: string }[] = [];\n\n for (const file of sourceCodeWithoutCommentFiles) {\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenRegExpsInCode ?? []) {\n const re = new RegExp(pattern, 'g');\n const mathces = file.data.matchAll(re);\n for (const match of mathces) forbiddenFounds.push({ pattern: re.toString(), path: file.path, match: match[0] });\n }\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenTextsInCode ?? []) {\n let p = 0;\n while (p < file.data.length) {\n const index = file.data.indexOf(pattern, p);\n if (index === -1) break;\n forbiddenFounds.push({ pattern, path: file.path, match: pattern });\n p = index + pattern.length;\n }\n }\n }\n\n if (forbiddenFounds.length > 0) {\n return {\n decisionCode: DecisionCode.FORBIDDEN_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n${forbiddenFounds.map((f) => `| \\`${f.path}\\` | \\`${f.pattern}\\` | \\`${f.match}\\` |`).join('\\n')}\n`,\n };\n }\n\n const missingRequiredPatterns: string[] = [];\n\n for (const pattern of problemMarkdownFrontMatterLike.requiredRegExpsInCode ?? []) {\n const re = new RegExp(pattern);\n const isFound = sourceCodeWithoutCommentFiles.some((f) => re.test(f.data));\n if (!isFound) missingRequiredPatterns.push(re.toString());\n }\n\n if (missingRequiredPatterns.length > 0) {\n return {\n decisionCode: DecisionCode.REQUIRED_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n${missingRequiredPatterns.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n\n return;\n}\n"],"mappings":"sQAUA,eAAsB,EACpB,EACA,EAIgF,CAChF,IAAM,EAAc,IAAI,IAClB,EAAkE,CAAC,EAEzE,IAAK,IAAM,KAAU,MAAM,EAAG,SAAS,QAAQ,EAAK,CAAE,cAAe,GAAM,UAAW,EAAK,CAAC,EAAG,CAC7F,GAAI,CAAC,EAAO,OAAO,EAAG,SAEtB,IAAM,EAAe,EAAK,SAAS,EAAK,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,EACjF,EAAY,IAAI,CAAY,EAE5B,IAAM,EAAO,MAAM,EAAG,SAAS,SAAS,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,EAEzF,GADiB,EAAK,SAAS,GACpB,EAAG,SAEd,IAAM,EAAqB,EAA6B,EAAO,IAAI,EAC9D,GAEL,EAA8B,KAAK,CACjC,KAAM,EAAO,KACb,KAAM,EAAmB,QAAU,EAA2B,EAAmB,QAAS,CAAI,EAAI,CACpG,CAAC,CACH,CAEA,GAAI,EAA+B,4BAA6B,CAC9D,IAAM,EAAmB,EAA+B,4BACrD,OAAQ,GAAM,CAAC,EAAY,IAAI,CAAC,CAAC,CAAC,CAClC,SAAS,EAEZ,GAAI,EAAiB,OAAS,EAC5B,MAAO,CACL,aAAc,EAAa,uCAC3B,iBAAkB;;;EAGxB,EAAiB,IAAK,GAAM,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK;CAAI,EAAE;CAEjD,CAEJ,CAEA,IAAM,EAAsE,CAAC,EAE7E,IAAK,IAAM,KAAQ,EAA+B,CAChD,IAAK,IAAM,KAAW,EAA+B,wBAA0B,CAAC,EAAG,CACjF,IAAM,EAAK,IAAI,OAAO,EAAS,GAAG,EAC5B,EAAU,EAAK,KAAK,SAAS,CAAE,EACrC,IAAK,IAAM,KAAS,EAAS,EAAgB,KAAK,CAAE,QAAS,EAAG,SAAS,EAAG,KAAM,EAAK,KAAM,MAAO,EAAM,EAAG,CAAC,CAChH,CACA,IAAK,IAAM,KAAW,EAA+B,sBAAwB,CAAC,EAAG,CAC/E,IAAI,EAAI,EACR,KAAO,EAAI,EAAK,KAAK,QAAQ,CAC3B,IAAM,EAAQ,EAAK,KAAK,QAAQ,EAAS,CAAC,EAC1C,GAAI,IAAU,GAAI,MAClB,EAAgB,KAAK,CAAE,UAAS,KAAM,EAAK,KAAM,MAAO,CAAQ,CAAC,EACjE,EAAI,EAAQ,EAAQ,MACtB,CACF,CACF,CAEA,GAAI,EAAgB,OAAS,EAC3B,MAAO,CACL,aAAc,EAAa,iCAC3B,iBAAkB;;;;;EAKtB,EAAgB,IAAK,GAAM,OAAO,EAAE,KAAK,SAAS,EAAE,QAAQ,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC,KAAK;CAAI,EAAE;CAE7F,EAGF,IAAM,EAAoC,CAAC,EAE3C,IAAK,IAAM,KAAW,EAA+B,uBAAyB,CAAC,EAAG,CAChF,IAAM,EAAK,IAAI,OAAO,CAAO,EACb,EAA8B,KAAM,GAAM,EAAG,KAAK,EAAE,IAAI,CAC7D,GAAG,EAAwB,KAAK,EAAG,SAAS,CAAC,CAC1D,CAEA,GAAI,EAAwB,OAAS,EACnC,MAAO,CACL,aAAc,EAAa,gCAC3B,iBAAkB;;;EAGtB,EAAwB,IAAK,GAAM,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK;CAAI,EAAE;CAE1D,CAIJ"}
@@ -1,2 +1,2 @@
1
- "use strict";exports.parseArgs=function(r){var a=r[2]||void 0,s=r[3];try{return{cwd:a,params:s?JSON.parse(s):{}}}catch(r){throw new Error("bad params argument",{cause:r})}};
2
- //# sourceMappingURL=parseArgs.cjs.map
1
+ "use strict";function e(e){let t=e[2]||void 0,n=e[3];try{return{cwd:t,params:n?JSON.parse(n):{}}}catch(e){throw Error(`bad params argument`,{cause:e})}}exports.parseArgs=e;
2
+ //# sourceMappingURL=parseArgs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseArgs.cjs","sources":["../../src/helpers/parseArgs.ts"],"sourcesContent":["/**\n * Parse command line arguments in `judge.ts` or `debug.ts`.\n *\n * `cwd` is optional: when omitted, presets that support it may fall back to\n * judging against model answers under `<problemDir>/model_answers/*`.\n */\nexport function parseArgs(argv: readonly string[]): { cwd: string | undefined; params: unknown } {\n const cwd = argv[2] || undefined;\n const paramsJson = argv[3];\n\n try {\n return { cwd, params: paramsJson ? JSON.parse(paramsJson) : {} };\n } catch (error) {\n throw new Error('bad params argument', { cause: error });\n }\n}\n"],"names":["argv","cwd","undefined","paramsJson","params","JSON","parse","error","Error","cause"],"mappings":"+BAMO,SAAmBA,GACxB,IAAMC,EAAMD,EAAK,SAAME,EACjBC,EAAaH,EAAK,GAExB,IACE,MAAO,CAAEC,IAAAA,EAAKG,OAAQD,EAAaE,KAAKC,MAAMH,GAAc,CAAA,EAC9D,CAAE,MAAOI,GACP,MAAM,IAAIC,MAAM,sBAAuB,CAAEC,MAAOF,GAClD,CACF"}
1
+ {"version":3,"file":"parseArgs.cjs","names":[],"sources":["../../src/helpers/parseArgs.ts"],"sourcesContent":["/**\n * Parse command line arguments in `judge.ts` or `debug.ts`.\n *\n * `cwd` is optional: when omitted, presets that support it may fall back to\n * judging against model answers under `<problemDir>/model_answers/*`.\n */\nexport function parseArgs(argv: readonly string[]): { cwd: string | undefined; params: unknown } {\n const cwd = argv[2] || undefined;\n const paramsJson = argv[3];\n\n try {\n return { cwd, params: paramsJson ? JSON.parse(paramsJson) : {} };\n } catch (error) {\n throw new Error('bad params argument', { cause: error });\n }\n}\n"],"mappings":"aAMA,SAAgB,EAAU,EAAuE,CAC/F,IAAM,EAAM,EAAK,IAAM,IAAA,GACjB,EAAa,EAAK,GAExB,GAAI,CACF,MAAO,CAAE,MAAK,OAAQ,EAAa,KAAK,MAAM,CAAU,EAAI,CAAC,CAAE,CACjE,OAAS,EAAO,CACd,MAAU,MAAM,sBAAuB,CAAE,MAAO,CAAM,CAAC,CACzD,CACF"}
@@ -1,2 +1,2 @@
1
- function r(r){var a=r[2]||void 0,t=r[3];try{return{cwd:a,params:t?JSON.parse(t):{}}}catch(r){throw new Error("bad params argument",{cause:r})}}export{r as parseArgs};
2
- //# sourceMappingURL=parseArgs.js.map
1
+ function e(e){let t=e[2]||void 0,n=e[3];try{return{cwd:t,params:n?JSON.parse(n):{}}}catch(e){throw Error(`bad params argument`,{cause:e})}}export{e as parseArgs};
2
+ //# sourceMappingURL=parseArgs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseArgs.js","sources":["../../src/helpers/parseArgs.ts"],"sourcesContent":["/**\n * Parse command line arguments in `judge.ts` or `debug.ts`.\n *\n * `cwd` is optional: when omitted, presets that support it may fall back to\n * judging against model answers under `<problemDir>/model_answers/*`.\n */\nexport function parseArgs(argv: readonly string[]): { cwd: string | undefined; params: unknown } {\n const cwd = argv[2] || undefined;\n const paramsJson = argv[3];\n\n try {\n return { cwd, params: paramsJson ? JSON.parse(paramsJson) : {} };\n } catch (error) {\n throw new Error('bad params argument', { cause: error });\n }\n}\n"],"names":["parseArgs","argv","cwd","undefined","paramsJson","params","JSON","parse","error","Error","cause"],"mappings":"AAMO,SAASA,EAAUC,GACxB,IAAMC,EAAMD,EAAK,SAAME,EACjBC,EAAaH,EAAK,GAExB,IACE,MAAO,CAAEC,IAAAA,EAAKG,OAAQD,EAAaE,KAAKC,MAAMH,GAAc,CAAA,EAC9D,CAAE,MAAOI,GACP,MAAM,IAAIC,MAAM,sBAAuB,CAAEC,MAAOF,GAClD,CACF"}
1
+ {"version":3,"file":"parseArgs.js","names":[],"sources":["../../src/helpers/parseArgs.ts"],"sourcesContent":["/**\n * Parse command line arguments in `judge.ts` or `debug.ts`.\n *\n * `cwd` is optional: when omitted, presets that support it may fall back to\n * judging against model answers under `<problemDir>/model_answers/*`.\n */\nexport function parseArgs(argv: readonly string[]): { cwd: string | undefined; params: unknown } {\n const cwd = argv[2] || undefined;\n const paramsJson = argv[3];\n\n try {\n return { cwd, params: paramsJson ? JSON.parse(paramsJson) : {} };\n } catch (error) {\n throw new Error('bad params argument', { cause: error });\n }\n}\n"],"mappings":"AAMA,SAAgB,EAAU,EAAuE,CAC/F,IAAM,EAAM,EAAK,IAAM,IAAA,GACjB,EAAa,EAAK,GAExB,GAAI,CACF,MAAO,CAAE,MAAK,OAAQ,EAAa,KAAK,MAAM,CAAU,EAAI,CAAC,CAAE,CACjE,OAAS,EAAO,CACd,MAAU,MAAM,sBAAuB,CAAE,MAAO,CAAM,CAAC,CACzD,CACF"}
@@ -1,2 +1,3 @@
1
- "use strict";var n="=".repeat(72);exports.printDebugBanner=function(c){var t=c.map(function(n){return" ".concat(n)}).join("\n");console.warn("\n".concat(n,"\n").concat(t,"\n").concat(n))};
2
- //# sourceMappingURL=printDebugBanner.cjs.map
1
+ "use strict";const e=`=`.repeat(72);function t(t){let n=t.map(e=>` ${e}`).join(`
2
+ `);console.warn(`\n${e}\n${n}\n${e}`)}exports.printDebugBanner=t;
3
+ //# sourceMappingURL=printDebugBanner.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"printDebugBanner.cjs","sources":["../../src/helpers/printDebugBanner.ts"],"sourcesContent":["const BANNER_LINE = '='.repeat(72);\n\n/**\n * Print a prominent, multi-line banner to stderr so that debug-mode runs\n * (e.g., judging against model answers without an explicit cwd) are obvious.\n *\n * Written to stderr to avoid interfering with `printTestCaseResult` output on stdout.\n */\nexport function printDebugBanner(lines: readonly string[]): void {\n const body = lines.map((line) => ` ${line}`).join('\\n');\n console.warn(`\\n${BANNER_LINE}\\n${body}\\n${BANNER_LINE}`);\n}\n"],"names":["BANNER_LINE","repeat","lines","body","map","line","concat","join","console","warn"],"mappings":"aAAA,IAAMA,EAAc,IAAIC,OAAO,6BAQxB,SAA0BC,GAC/B,IAAMC,EAAOD,EAAME,IAAI,SAACC,GAAI,MAAA,KAAAC,OAAUD,EAAI,GAAIE,KAAK,MACnDC,QAAQC,KAAI,KAAAH,OAAMN,EAAW,MAAAM,OAAKH,EAAI,MAAAG,OAAKN,GAC7C"}
1
+ {"version":3,"file":"printDebugBanner.cjs","names":[],"sources":["../../src/helpers/printDebugBanner.ts"],"sourcesContent":["const BANNER_LINE = '='.repeat(72);\n\n/**\n * Print a prominent, multi-line banner to stderr so that debug-mode runs\n * (e.g., judging against model answers without an explicit cwd) are obvious.\n *\n * Written to stderr to avoid interfering with `printTestCaseResult` output on stdout.\n */\nexport function printDebugBanner(lines: readonly string[]): void {\n const body = lines.map((line) => ` ${line}`).join('\\n');\n console.warn(`\\n${BANNER_LINE}\\n${body}\\n${BANNER_LINE}`);\n}\n"],"mappings":"aAAA,MAAM,EAAc,IAAI,OAAO,EAAE,EAQjC,SAAgB,EAAiB,EAAgC,CAC/D,IAAM,EAAO,EAAM,IAAK,GAAS,KAAK,GAAM,CAAC,CAAC,KAAK;CAAI,EACvD,QAAQ,KAAK,KAAK,EAAY,IAAI,EAAK,IAAI,GAAa,CAC1D"}
@@ -1,2 +1,3 @@
1
- var n="=".repeat(72);function c(c){var o=c.map(function(n){return" ".concat(n)}).join("\n");console.warn("\n".concat(n,"\n").concat(o,"\n").concat(n))}export{c as printDebugBanner};
2
- //# sourceMappingURL=printDebugBanner.js.map
1
+ const e=`=`.repeat(72);function t(t){let n=t.map(e=>` ${e}`).join(`
2
+ `);console.warn(`\n${e}\n${n}\n${e}`)}export{t as printDebugBanner};
3
+ //# sourceMappingURL=printDebugBanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"printDebugBanner.js","sources":["../../src/helpers/printDebugBanner.ts"],"sourcesContent":["const BANNER_LINE = '='.repeat(72);\n\n/**\n * Print a prominent, multi-line banner to stderr so that debug-mode runs\n * (e.g., judging against model answers without an explicit cwd) are obvious.\n *\n * Written to stderr to avoid interfering with `printTestCaseResult` output on stdout.\n */\nexport function printDebugBanner(lines: readonly string[]): void {\n const body = lines.map((line) => ` ${line}`).join('\\n');\n console.warn(`\\n${BANNER_LINE}\\n${body}\\n${BANNER_LINE}`);\n}\n"],"names":["BANNER_LINE","repeat","printDebugBanner","lines","body","map","line","concat","join","console","warn"],"mappings":"AAAA,IAAMA,EAAc,IAAIC,OAAO,IAQxB,SAASC,EAAiBC,GAC/B,IAAMC,EAAOD,EAAME,IAAI,SAACC,GAAI,MAAA,KAAAC,OAAUD,EAAI,GAAIE,KAAK,MACnDC,QAAQC,KAAI,KAAAH,OAAMP,EAAW,MAAAO,OAAKH,EAAI,MAAAG,OAAKP,GAC7C"}
1
+ {"version":3,"file":"printDebugBanner.js","names":[],"sources":["../../src/helpers/printDebugBanner.ts"],"sourcesContent":["const BANNER_LINE = '='.repeat(72);\n\n/**\n * Print a prominent, multi-line banner to stderr so that debug-mode runs\n * (e.g., judging against model answers without an explicit cwd) are obvious.\n *\n * Written to stderr to avoid interfering with `printTestCaseResult` output on stdout.\n */\nexport function printDebugBanner(lines: readonly string[]): void {\n const body = lines.map((line) => ` ${line}`).join('\\n');\n console.warn(`\\n${BANNER_LINE}\\n${body}\\n${BANNER_LINE}`);\n}\n"],"mappings":"AAAA,MAAM,EAAc,IAAI,OAAO,EAAE,EAQjC,SAAgB,EAAiB,EAAgC,CAC/D,IAAM,EAAO,EAAM,IAAK,GAAS,KAAK,GAAM,CAAC,CAAC,KAAK;CAAI,EACvD,QAAQ,KAAK,KAAK,EAAY,IAAI,EAAK,IAAI,GAAa,CAC1D"}
@@ -1,2 +1,2 @@
1
- "use strict";var t=require("../types/testCaseResult.cjs");exports.encodeFileForTestCaseResult=function(t,e){var s=e.toString("utf8");return s.includes("�")?{path:t,encoding:"base64",data:e.toString("base64")}:{path:t,data:s}},exports.printTestCaseResult=function(e){console.info("".concat(t.TEST_CASE_RESULT_PREFIX).concat(JSON.stringify(e)))};
2
- //# sourceMappingURL=printTestCaseResult.cjs.map
1
+ "use strict";const e=require("../types/testCaseResult.cjs");function t(t){console.info(`${e.TEST_CASE_RESULT_PREFIX}${JSON.stringify(t)}`)}function n(e,t){let n=t.toString(`utf8`);return n.includes(`�`)?{path:e,encoding:`base64`,data:t.toString(`base64`)}:{path:e,data:n}}exports.encodeFileForTestCaseResult=n,exports.printTestCaseResult=t;
2
+ //# sourceMappingURL=printTestCaseResult.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"printTestCaseResult.cjs","sources":["../../src/helpers/printTestCaseResult.ts"],"sourcesContent":["import type { TestCaseResult } from '../types/testCaseResult.js';\nimport { TEST_CASE_RESULT_PREFIX } from '../types/testCaseResult.js';\n\n/**\n * Print a test case result in a format that can be read by the judge server.\n */\nexport function printTestCaseResult(result: TestCaseResult): void {\n console.info(`${TEST_CASE_RESULT_PREFIX}${JSON.stringify(result)}`);\n}\n\nexport function encodeFileForTestCaseResult(\n path: string,\n data: Buffer\n): NonNullable<TestCaseResult['outputFiles']>[number] {\n const utf8Text = data.toString('utf8');\n const isBinary = utf8Text.includes('\\uFFFD');\n return isBinary ? { path, encoding: 'base64', data: data.toString('base64') } : { path, data: utf8Text };\n}\n"],"names":["path","data","utf8Text","toString","includes","encoding","result","console","info","concat","TEST_CASE_RESULT_PREFIX","JSON","stringify"],"mappings":"8FAUO,SACLA,EACAC,GAEA,IAAMC,EAAWD,EAAKE,SAAS,QAE/B,OADiBD,EAASE,SAAS,KACjB,CAAEJ,KAAAA,EAAMK,SAAU,SAAUJ,KAAMA,EAAKE,SAAS,WAAc,CAAEH,KAAAA,EAAMC,KAAMC,EAChG,8BAXO,SAA6BI,GAClCC,QAAQC,KAAI,GAAAC,OAAIC,EAAAA,yBAAuBD,OAAGE,KAAKC,UAAUN,IAC3D"}
1
+ {"version":3,"file":"printTestCaseResult.cjs","names":["TEST_CASE_RESULT_PREFIX"],"sources":["../../src/helpers/printTestCaseResult.ts"],"sourcesContent":["import type { TestCaseResult } from '../types/testCaseResult.js';\nimport { TEST_CASE_RESULT_PREFIX } from '../types/testCaseResult.js';\n\n/**\n * Print a test case result in a format that can be read by the judge server.\n */\nexport function printTestCaseResult(result: TestCaseResult): void {\n console.info(`${TEST_CASE_RESULT_PREFIX}${JSON.stringify(result)}`);\n}\n\nexport function encodeFileForTestCaseResult(\n path: string,\n data: Buffer\n): NonNullable<TestCaseResult['outputFiles']>[number] {\n const utf8Text = data.toString('utf8');\n const isBinary = utf8Text.includes('\\uFFFD');\n return isBinary ? { path, encoding: 'base64', data: data.toString('base64') } : { path, data: utf8Text };\n}\n"],"mappings":"4DAMA,SAAgB,EAAoB,EAA8B,CAChE,QAAQ,KAAK,GAAGA,EAAAA,0BAA0B,KAAK,UAAU,CAAM,GAAG,CACpE,CAEA,SAAgB,EACd,EACA,EACoD,CACpD,IAAM,EAAW,EAAK,SAAS,MAAM,EAErC,OADiB,EAAS,SAAS,GACrB,EAAI,CAAE,OAAM,SAAU,SAAU,KAAM,EAAK,SAAS,QAAQ,CAAE,EAAI,CAAE,OAAM,KAAM,CAAS,CACzG"}
@@ -1,2 +1,2 @@
1
- import{TEST_CASE_RESULT_PREFIX as t}from"../types/testCaseResult.js";function n(n){console.info("".concat(t).concat(JSON.stringify(n)))}function o(t,n){var o=n.toString("utf8");return o.includes("�")?{path:t,encoding:"base64",data:n.toString("base64")}:{path:t,data:o}}export{o as encodeFileForTestCaseResult,n as printTestCaseResult};
2
- //# sourceMappingURL=printTestCaseResult.js.map
1
+ import{TEST_CASE_RESULT_PREFIX as e}from"../types/testCaseResult.js";function t(t){console.info(`${e}${JSON.stringify(t)}`)}function n(e,t){let n=t.toString(`utf8`);return n.includes(`�`)?{path:e,encoding:`base64`,data:t.toString(`base64`)}:{path:e,data:n}}export{n as encodeFileForTestCaseResult,t as printTestCaseResult};
2
+ //# sourceMappingURL=printTestCaseResult.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"printTestCaseResult.js","sources":["../../src/helpers/printTestCaseResult.ts"],"sourcesContent":["import type { TestCaseResult } from '../types/testCaseResult.js';\nimport { TEST_CASE_RESULT_PREFIX } from '../types/testCaseResult.js';\n\n/**\n * Print a test case result in a format that can be read by the judge server.\n */\nexport function printTestCaseResult(result: TestCaseResult): void {\n console.info(`${TEST_CASE_RESULT_PREFIX}${JSON.stringify(result)}`);\n}\n\nexport function encodeFileForTestCaseResult(\n path: string,\n data: Buffer\n): NonNullable<TestCaseResult['outputFiles']>[number] {\n const utf8Text = data.toString('utf8');\n const isBinary = utf8Text.includes('\\uFFFD');\n return isBinary ? { path, encoding: 'base64', data: data.toString('base64') } : { path, data: utf8Text };\n}\n"],"names":["printTestCaseResult","result","console","info","concat","TEST_CASE_RESULT_PREFIX","JSON","stringify","encodeFileForTestCaseResult","path","data","utf8Text","toString","includes","encoding"],"mappings":"qEAMO,SAASA,EAAoBC,GAClCC,QAAQC,KAAI,GAAAC,OAAIC,GAAuBD,OAAGE,KAAKC,UAAUN,IAC3D,CAEO,SAASO,EACdC,EACAC,GAEA,IAAMC,EAAWD,EAAKE,SAAS,QAE/B,OADiBD,EAASE,SAAS,KACjB,CAAEJ,KAAAA,EAAMK,SAAU,SAAUJ,KAAMA,EAAKE,SAAS,WAAc,CAAEH,KAAAA,EAAMC,KAAMC,EAChG"}
1
+ {"version":3,"file":"printTestCaseResult.js","names":[],"sources":["../../src/helpers/printTestCaseResult.ts"],"sourcesContent":["import type { TestCaseResult } from '../types/testCaseResult.js';\nimport { TEST_CASE_RESULT_PREFIX } from '../types/testCaseResult.js';\n\n/**\n * Print a test case result in a format that can be read by the judge server.\n */\nexport function printTestCaseResult(result: TestCaseResult): void {\n console.info(`${TEST_CASE_RESULT_PREFIX}${JSON.stringify(result)}`);\n}\n\nexport function encodeFileForTestCaseResult(\n path: string,\n data: Buffer\n): NonNullable<TestCaseResult['outputFiles']>[number] {\n const utf8Text = data.toString('utf8');\n const isBinary = utf8Text.includes('\\uFFFD');\n return isBinary ? { path, encoding: 'base64', data: data.toString('base64') } : { path, data: utf8Text };\n}\n"],"mappings":"qEAMA,SAAgB,EAAoB,EAA8B,CAChE,QAAQ,KAAK,GAAG,IAA0B,KAAK,UAAU,CAAM,GAAG,CACpE,CAEA,SAAgB,EACd,EACA,EACoD,CACpD,IAAM,EAAW,EAAK,SAAS,MAAM,EAErC,OADiB,EAAS,SAAS,GACrB,EAAI,CAAE,OAAM,SAAU,SAAU,KAAM,EAAK,SAAS,QAAQ,CAAE,EAAI,CAAE,OAAM,KAAM,CAAS,CACzG"}
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),n=require("node:path"),a=require("./printTestCaseResult.cjs");function s(){return(s=e.asyncToGenerator(e.regenerator().m(function s(t,u){var i,c,o,p,l,f;return e.regenerator().w(function(s){for(;;)switch(s.p=s.n){case 0:i=[],c=e.createForOfIteratorHelper(u),s.p=1,c.s();case 2:if((o=c.n()).done){s.n=7;break}return p=o.value,s.p=3,s.n=4,r.promises.readFile(n.join(t,p));case 4:l=s.v,i.push(a.encodeFileForTestCaseResult(p,l)),s.n=6;break;case 5:s.p=5,s.v;case 6:s.n=2;break;case 7:s.n=9;break;case 8:s.p=8,f=s.v,c.e(f);case 9:return s.p=9,c.f(),s.f(9);case 10:return s.a(2,i)}},s,null,[[3,5],[1,8,9,10]])}))).apply(this,arguments)}exports.readOutputFiles=function(e,r){return s.apply(this,arguments)};
2
- //# sourceMappingURL=readOutputFiles.cjs.map
1
+ "use strict";const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("./printTestCaseResult.cjs");let n=require("node:path");n=e.__toESM(n,1);let r=require("node:fs");r=e.__toESM(r,1);async function i(e,i){let a=[];for(let o of i)try{let i=await r.default.promises.readFile(n.default.join(e,o));a.push(t.encodeFileForTestCaseResult(o,i))}catch{}return a}exports.readOutputFiles=i;
2
+ //# sourceMappingURL=readOutputFiles.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"readOutputFiles.cjs","sources":["../../src/helpers/readOutputFiles.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { encodeFileForTestCaseResult } from './printTestCaseResult.js';\n\nexport async function readOutputFiles(\n cwd: string,\n outputFilePaths: readonly string[]\n): Promise<NonNullable<TestCaseResult['outputFiles']>> {\n const outputFiles: NonNullable<TestCaseResult['outputFiles']> = [];\n for (const filePath of outputFilePaths) {\n try {\n const buffer = await fs.promises.readFile(path.join(cwd, filePath));\n outputFiles.push(encodeFileForTestCaseResult(filePath, buffer));\n } catch {\n // file not found\n }\n }\n return outputFiles;\n}\n"],"names":["_readOutputFiles","_asyncToGenerator","_regenerator","m","_callee","cwd","outputFilePaths","outputFiles","_iterator","_step","filePath","buffer","_t2","w","_context","p","n","_createForOfIteratorHelper","s","done","value","fs","promises","readFile","path","join","v","push","encodeFileForTestCaseResult","e","f","a","apply","this","arguments","_x","_x2"],"mappings":"2JAqBC,SAAAA,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,gBAAAC,EAdM,SAAAC,EACLC,EACAC,GAAkC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAV,gBAAAW,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAE5BT,EAA0D,GAAEC,EAAAS,EAAAA,0BAC3CX,GAAeQ,EAAAC,EAAA,EAAAP,EAAAU,IAAA,KAAA,EAAA,IAAAT,EAAAD,EAAAQ,KAAAG,KAAA,CAAAL,EAAAE,EAAA,EAAA,KAAA,CAAnB,OAARN,EAAQD,EAAAW,MAAAN,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAEMK,EAAGC,SAASC,SAASC,EAAKC,KAAKpB,EAAKK,IAAU,KAAA,EAA7DC,EAAMG,EAAAY,EACZnB,EAAYoB,KAAKC,EAAAA,4BAA4BlB,EAAUC,IAASG,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAD,EAAAY,EAAA,KAAA,EAAAZ,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAY,EAAAlB,EAAAqB,EAAAjB,GAAA,KAAA,EAAA,OAAAE,EAAAC,EAAA,EAAAP,EAAAsB,IAAAhB,EAAAgB,EAAA,GAAA,KAAA,GAAA,OAAAhB,EAAAiB,EAAA,EAK7DxB,GAAW,EAAAH,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,KAAA,KACnB4B,MAAAC,KAAAC,UAAA,yBAdD,SAAqCC,EAAAC,GAAA,OAAApC,EAAAgC,MAAAC,KAAAC,UAAA"}
1
+ {"version":3,"file":"readOutputFiles.cjs","names":["fs","path","encodeFileForTestCaseResult"],"sources":["../../src/helpers/readOutputFiles.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { encodeFileForTestCaseResult } from './printTestCaseResult.js';\n\nexport async function readOutputFiles(\n cwd: string,\n outputFilePaths: readonly string[]\n): Promise<NonNullable<TestCaseResult['outputFiles']>> {\n const outputFiles: NonNullable<TestCaseResult['outputFiles']> = [];\n for (const filePath of outputFilePaths) {\n try {\n const buffer = await fs.promises.readFile(path.join(cwd, filePath));\n outputFiles.push(encodeFileForTestCaseResult(filePath, buffer));\n } catch {\n // file not found\n }\n }\n return outputFiles;\n}\n"],"mappings":"+LAOA,eAAsB,EACpB,EACA,EACqD,CACrD,IAAM,EAA0D,CAAC,EACjE,IAAK,IAAM,KAAY,EACrB,GAAI,CACF,IAAM,EAAS,MAAMA,EAAAA,QAAG,SAAS,SAASC,EAAAA,QAAK,KAAK,EAAK,CAAQ,CAAC,EAClE,EAAY,KAAKC,EAAAA,4BAA4B,EAAU,CAAM,CAAC,CAChE,MAAQ,CAER,CAEF,OAAO,CACT"}
@@ -1,2 +1,2 @@
1
- import{asyncToGenerator as e,regenerator as r,createForOfIteratorHelper as a}from"../_virtual/_rollupPluginBabelHelpers.js";import n from"node:fs";import t from"node:path";import{encodeFileForTestCaseResult as s}from"./printTestCaseResult.js";function o(e,r){return p.apply(this,arguments)}function p(){return(p=e(r().m(function e(o,p){var i,u,c,f,l,m;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:i=[],u=a(p),e.p=1,u.s();case 2:if((c=u.n()).done){e.n=7;break}return f=c.value,e.p=3,e.n=4,n.promises.readFile(t.join(o,f));case 4:l=e.v,i.push(s(f,l)),e.n=6;break;case 5:e.p=5,e.v;case 6:e.n=2;break;case 7:e.n=9;break;case 8:e.p=8,m=e.v,u.e(m);case 9:return e.p=9,u.f(),e.f(9);case 10:return e.a(2,i)}},e,null,[[3,5],[1,8,9,10]])}))).apply(this,arguments)}export{o as readOutputFiles};
2
- //# sourceMappingURL=readOutputFiles.js.map
1
+ import{encodeFileForTestCaseResult as e}from"./printTestCaseResult.js";import t from"node:path";import n from"node:fs";async function r(r,i){let a=[];for(let o of i)try{let i=await n.promises.readFile(t.join(r,o));a.push(e(o,i))}catch{}return a}export{r as readOutputFiles};
2
+ //# sourceMappingURL=readOutputFiles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"readOutputFiles.js","sources":["../../src/helpers/readOutputFiles.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { encodeFileForTestCaseResult } from './printTestCaseResult.js';\n\nexport async function readOutputFiles(\n cwd: string,\n outputFilePaths: readonly string[]\n): Promise<NonNullable<TestCaseResult['outputFiles']>> {\n const outputFiles: NonNullable<TestCaseResult['outputFiles']> = [];\n for (const filePath of outputFilePaths) {\n try {\n const buffer = await fs.promises.readFile(path.join(cwd, filePath));\n outputFiles.push(encodeFileForTestCaseResult(filePath, buffer));\n } catch {\n // file not found\n }\n }\n return outputFiles;\n}\n"],"names":["readOutputFiles","_x","_x2","_readOutputFiles","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","cwd","outputFilePaths","outputFiles","_iterator","_step","filePath","buffer","_t2","w","_context","p","n","_createForOfIteratorHelper","s","done","value","fs","promises","readFile","path","join","v","push","encodeFileForTestCaseResult","e","f","a"],"mappings":"mPAOA,SAAsBA,EAAeC,EAAAC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CAcpC,SAAAH,IAAA,OAAAA,EAAAI,EAAAC,IAAAC,EAdM,SAAAC,EACLC,EACAC,GAAkC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAV,IAAAW,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAE5BT,EAA0D,GAAEC,EAAAS,EAC3CX,GAAeQ,EAAAC,EAAA,EAAAP,EAAAU,IAAA,KAAA,EAAA,IAAAT,EAAAD,EAAAQ,KAAAG,KAAA,CAAAL,EAAAE,EAAA,EAAA,KAAA,CAAnB,OAARN,EAAQD,EAAAW,MAAAN,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAEMK,EAAGC,SAASC,SAASC,EAAKC,KAAKpB,EAAKK,IAAU,KAAA,EAA7DC,EAAMG,EAAAY,EACZnB,EAAYoB,KAAKC,EAA4BlB,EAAUC,IAASG,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAD,EAAAY,EAAA,KAAA,EAAAZ,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAY,EAAAlB,EAAAqB,EAAAjB,GAAA,KAAA,EAAA,OAAAE,EAAAC,EAAA,EAAAP,EAAAsB,IAAAhB,EAAAgB,EAAA,GAAA,KAAA,GAAA,OAAAhB,EAAAiB,EAAA,EAK7DxB,GAAW,EAAAH,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,KAAA,KACnBN,MAAAC,KAAAC,UAAA"}
1
+ {"version":3,"file":"readOutputFiles.js","names":[],"sources":["../../src/helpers/readOutputFiles.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { encodeFileForTestCaseResult } from './printTestCaseResult.js';\n\nexport async function readOutputFiles(\n cwd: string,\n outputFilePaths: readonly string[]\n): Promise<NonNullable<TestCaseResult['outputFiles']>> {\n const outputFiles: NonNullable<TestCaseResult['outputFiles']> = [];\n for (const filePath of outputFilePaths) {\n try {\n const buffer = await fs.promises.readFile(path.join(cwd, filePath));\n outputFiles.push(encodeFileForTestCaseResult(filePath, buffer));\n } catch {\n // file not found\n }\n }\n return outputFiles;\n}\n"],"mappings":"uHAOA,eAAsB,EACpB,EACA,EACqD,CACrD,IAAM,EAA0D,CAAC,EACjE,IAAK,IAAM,KAAY,EACrB,GAAI,CACF,IAAM,EAAS,MAAM,EAAG,SAAS,SAAS,EAAK,KAAK,EAAK,CAAQ,CAAC,EAClE,EAAY,KAAK,EAA4B,EAAU,CAAM,CAAC,CAChE,MAAQ,CAER,CAEF,OAAO,CACT"}
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),a=require("node:path"),n=require("front-matter"),t=require("../types/problem.cjs");function o(){return(o=e.asyncToGenerator(e.regenerator().m(function o(s){var i,u,c,p,l,m,f,d;return e.regenerator().w(function(o){for(;;)switch(o.p=o.n){case 0:return f=e.createForOfIteratorHelper,o.n=1,r.promises.readdir(s,{withFileTypes:!0});case 1:i=f(o.v),o.p=2,i.s();case 3:if((u=i.n()).done){o.n=8;break}if((c=u.value).isFile()){o.n=4;break}return o.a(3,7);case 4:if("problem.md"===c.name||c.name.endsWith(".problem.md")){o.n=5;break}return o.a(3,7);case 5:return o.n=6,r.promises.readFile(a.join(c.parentPath,c.name),"utf8");case 6:return p=o.v,l=n(p),m=l.attributes,o.a(2,t.problemMarkdownFrontMatterSchema.parse(m));case 7:o.n=3;break;case 8:o.n=10;break;case 9:o.p=9,d=o.v,i.e(d);case 10:return o.p=10,i.f(),o.f(10);case 11:throw new Error("problem markdown not found: ".concat(s));case 12:return o.a(2)}},o,null,[[2,9,10,11]])}))).apply(this,arguments)}exports.readProblemMarkdownFrontMatter=function(e){return o.apply(this,arguments)};
2
- //# sourceMappingURL=readProblemMarkdownFrontMatter.cjs.map
1
+ "use strict";const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../types/problem.cjs");let n=require("node:path");n=e.__toESM(n,1);let r=require("node:fs");r=e.__toESM(r,1);let i=require("front-matter");i=e.__toESM(i,1);async function a(e){for(let a of await r.default.promises.readdir(e,{withFileTypes:!0})){if(!a.isFile()||!(a.name===`problem.md`||a.name.endsWith(`.problem.md`)))continue;let{attributes:e}=(0,i.default)(await r.default.promises.readFile(n.default.join(a.parentPath,a.name),`utf8`));return t.problemMarkdownFrontMatterSchema.parse(e)}throw Error(`problem markdown not found: ${e}`)}exports.readProblemMarkdownFrontMatter=a;
2
+ //# sourceMappingURL=readProblemMarkdownFrontMatter.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"readProblemMarkdownFrontMatter.cjs","sources":["../../src/helpers/readProblemMarkdownFrontMatter.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport parseFrontMatter from 'front-matter';\n\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport { problemMarkdownFrontMatterSchema } from '../types/problem.js';\n\nexport async function readProblemMarkdownFrontMatter(problemDir: string): Promise<ProblemMarkdownFrontMatter> {\n for (const dirent of await fs.promises.readdir(problemDir, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (!(dirent.name === 'problem.md' || dirent.name.endsWith('.problem.md'))) continue;\n\n const markdown = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n const { attributes } = (parseFrontMatter as unknown as (markdown: string) => { attributes: unknown })(markdown);\n\n return problemMarkdownFrontMatterSchema.parse(attributes);\n }\n\n throw new Error(`problem markdown not found: ${problemDir}`);\n}\n"],"names":["_readProblemMarkdownFrontMatter","_asyncToGenerator","_regenerator","m","_callee","problemDir","_iterator","_step","dirent","markdown","_ref","attributes","_t","_t2","w","_context","p","n","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","v","s","done","value","isFile","a","name","endsWith","readFile","path","join","parentPath","parseFrontMatter","problemMarkdownFrontMatterSchema","parse","e","f","Error","concat","apply","this","arguments","_x"],"mappings":"gLAqBC,SAAAA,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,EAAAA,cAAAC,EAbM,SAAAC,EAA8CC,GAAkB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAX,gBAAAY,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAAA,OAAAL,EAAAM,EAAAA,0BAAAH,EAAAE,EAAA,EAC1CE,EAAGC,SAASC,QAAQhB,EAAY,CAAEiB,eAAe,IAAO,KAAA,EAAAhB,EAAAM,EAAAG,EAAAQ,GAAAR,EAAAC,EAAA,EAAAV,EAAAkB,IAAA,KAAA,EAAA,IAAAjB,EAAAD,EAAAW,KAAAQ,KAAA,CAAAV,EAAAE,EAAA,EAAA,KAAA,CAAlE,IAANT,EAAMD,EAAAmB,OACHC,SAAQ,CAAAZ,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAa,EAAA,EAAA,GAAA,KAAA,EAAA,GACE,eAAhBpB,EAAOqB,MAAyBrB,EAAOqB,KAAKC,SAAS,eAAc,CAAAf,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAa,EAAA,EAAA,GAAA,KAAA,EAAA,OAAAb,EAAAE,EAAA,EAElDE,EAAGC,SAASW,SAASC,EAAKC,KAAKzB,EAAO0B,WAAY1B,EAAOqB,MAAO,QAAO,KAAA,EAE5E,OAFZpB,EAAQM,EAAAQ,EAAAb,EAEUyB,EAA8E1B,GAA9FE,EAAUD,EAAVC,WAAUI,EAAAa,EAAA,EAEXQ,EAAAA,iCAAiCC,MAAM1B,IAAW,KAAA,EAAAI,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,GAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAQ,EAAAjB,EAAAgC,EAAAzB,GAAA,KAAA,GAAA,OAAAE,EAAAC,EAAA,GAAAV,EAAAiC,IAAAxB,EAAAwB,EAAA,IAAA,KAAA,GAAA,MAGrD,IAAIC,MAAK,+BAAAC,OAAgCpC,IAAa,KAAA,GAAA,OAAAU,EAAAa,EAAA,GAAA,EAAAxB,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,GAAA,KAAA,KAC7DsC,MAAAC,KAAAC,UAAA,wCAbD,SAAoDC,GAAA,OAAA7C,EAAA0C,MAAAC,KAAAC,UAAA"}
1
+ {"version":3,"file":"readProblemMarkdownFrontMatter.cjs","names":["fs","path","problemMarkdownFrontMatterSchema"],"sources":["../../src/helpers/readProblemMarkdownFrontMatter.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport parseFrontMatter from 'front-matter';\n\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport { problemMarkdownFrontMatterSchema } from '../types/problem.js';\n\nexport async function readProblemMarkdownFrontMatter(problemDir: string): Promise<ProblemMarkdownFrontMatter> {\n for (const dirent of await fs.promises.readdir(problemDir, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (!(dirent.name === 'problem.md' || dirent.name.endsWith('.problem.md'))) continue;\n\n const markdown = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n const { attributes } = (parseFrontMatter as unknown as (markdown: string) => { attributes: unknown })(markdown);\n\n return problemMarkdownFrontMatterSchema.parse(attributes);\n }\n\n throw new Error(`problem markdown not found: ${problemDir}`);\n}\n"],"mappings":"yOAQA,eAAsB,EAA+B,EAAyD,CAC5G,IAAK,IAAM,KAAU,MAAMA,EAAAA,QAAG,SAAS,QAAQ,EAAY,CAAE,cAAe,EAAK,CAAC,EAAG,CAEnF,GADI,CAAC,EAAO,OAAO,GACf,EAAE,EAAO,OAAS,cAAgB,EAAO,KAAK,SAAS,aAAa,GAAI,SAI5E,GAAM,CAAE,eAAA,EAAA,EAAA,QAAA,CAA8F,MAF/EA,EAAAA,QAAG,SAAS,SAASC,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,CAEiB,EAE9G,OAAOC,EAAAA,iCAAiC,MAAM,CAAU,CAC1D,CAEA,MAAU,MAAM,+BAA+B,GAAY,CAC7D"}
@@ -1,2 +1,2 @@
1
- import{asyncToGenerator as r,regenerator as e,createForOfIteratorHelper as a}from"../_virtual/_rollupPluginBabelHelpers.js";import n from"node:fs";import t from"node:path";import o from"front-matter";import{problemMarkdownFrontMatterSchema as s}from"../types/problem.js";function i(r){return p.apply(this,arguments)}function p(){return(p=r(e().m(function r(i){var p,m,u,c,f,l,b,d;return e().w(function(r){for(;;)switch(r.p=r.n){case 0:return b=a,r.n=1,n.promises.readdir(i,{withFileTypes:!0});case 1:p=b(r.v),r.p=2,p.s();case 3:if((m=p.n()).done){r.n=8;break}if((u=m.value).isFile()){r.n=4;break}return r.a(3,7);case 4:if("problem.md"===u.name||u.name.endsWith(".problem.md")){r.n=5;break}return r.a(3,7);case 5:return r.n=6,n.promises.readFile(t.join(u.parentPath,u.name),"utf8");case 6:return c=r.v,f=o(c),l=f.attributes,r.a(2,s.parse(l));case 7:r.n=3;break;case 8:r.n=10;break;case 9:r.p=9,d=r.v,p.e(d);case 10:return r.p=10,p.f(),r.f(10);case 11:throw new Error("problem markdown not found: ".concat(i));case 12:return r.a(2)}},r,null,[[2,9,10,11]])}))).apply(this,arguments)}export{i as readProblemMarkdownFrontMatter};
2
- //# sourceMappingURL=readProblemMarkdownFrontMatter.js.map
1
+ import{problemMarkdownFrontMatterSchema as e}from"../types/problem.js";import t from"node:path";import n from"node:fs";import r from"front-matter";async function i(i){for(let a of await n.promises.readdir(i,{withFileTypes:!0})){if(!a.isFile()||!(a.name===`problem.md`||a.name.endsWith(`.problem.md`)))continue;let{attributes:i}=r(await n.promises.readFile(t.join(a.parentPath,a.name),`utf8`));return e.parse(i)}throw Error(`problem markdown not found: ${i}`)}export{i as readProblemMarkdownFrontMatter};
2
+ //# sourceMappingURL=readProblemMarkdownFrontMatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"readProblemMarkdownFrontMatter.js","sources":["../../src/helpers/readProblemMarkdownFrontMatter.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport parseFrontMatter from 'front-matter';\n\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport { problemMarkdownFrontMatterSchema } from '../types/problem.js';\n\nexport async function readProblemMarkdownFrontMatter(problemDir: string): Promise<ProblemMarkdownFrontMatter> {\n for (const dirent of await fs.promises.readdir(problemDir, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (!(dirent.name === 'problem.md' || dirent.name.endsWith('.problem.md'))) continue;\n\n const markdown = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n const { attributes } = (parseFrontMatter as unknown as (markdown: string) => { attributes: unknown })(markdown);\n\n return problemMarkdownFrontMatterSchema.parse(attributes);\n }\n\n throw new Error(`problem markdown not found: ${problemDir}`);\n}\n"],"names":["readProblemMarkdownFrontMatter","_x","_readProblemMarkdownFrontMatter","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","_iterator","_step","dirent","markdown","_ref","attributes","_t","_t2","w","_context","p","n","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","v","s","done","value","isFile","a","name","endsWith","readFile","path","join","parentPath","parseFrontMatter","problemMarkdownFrontMatterSchema","parse","e","f","Error","concat"],"mappings":"+QAQA,SAAsBA,EAA8BC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CAanD,SAAAH,IAAA,OAAAA,EAAAI,EAAAC,IAAAC,EAbM,SAAAC,EAA8CC,GAAkB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAX,IAAAY,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAAA,OAAAL,EAAAM,EAAAH,EAAAE,EAAA,EAC1CE,EAAGC,SAASC,QAAQhB,EAAY,CAAEiB,eAAe,IAAO,KAAA,EAAAhB,EAAAM,EAAAG,EAAAQ,GAAAR,EAAAC,EAAA,EAAAV,EAAAkB,IAAA,KAAA,EAAA,IAAAjB,EAAAD,EAAAW,KAAAQ,KAAA,CAAAV,EAAAE,EAAA,EAAA,KAAA,CAAlE,IAANT,EAAMD,EAAAmB,OACHC,SAAQ,CAAAZ,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAa,EAAA,EAAA,GAAA,KAAA,EAAA,GACE,eAAhBpB,EAAOqB,MAAyBrB,EAAOqB,KAAKC,SAAS,eAAc,CAAAf,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAa,EAAA,EAAA,GAAA,KAAA,EAAA,OAAAb,EAAAE,EAAA,EAElDE,EAAGC,SAASW,SAASC,EAAKC,KAAKzB,EAAO0B,WAAY1B,EAAOqB,MAAO,QAAO,KAAA,EAE5E,OAFZpB,EAAQM,EAAAQ,EAAAb,EAEUyB,EAA8E1B,GAA9FE,EAAUD,EAAVC,WAAUI,EAAAa,EAAA,EAEXQ,EAAiCC,MAAM1B,IAAW,KAAA,EAAAI,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,GAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAQ,EAAAjB,EAAAgC,EAAAzB,GAAA,KAAA,GAAA,OAAAE,EAAAC,EAAA,GAAAV,EAAAiC,IAAAxB,EAAAwB,EAAA,IAAA,KAAA,GAAA,MAGrD,IAAIC,MAAK,+BAAAC,OAAgCpC,IAAa,KAAA,GAAA,OAAAU,EAAAa,EAAA,GAAA,EAAAxB,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,GAAA,KAAA,KAC7DN,MAAAC,KAAAC,UAAA"}
1
+ {"version":3,"file":"readProblemMarkdownFrontMatter.js","names":[],"sources":["../../src/helpers/readProblemMarkdownFrontMatter.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport parseFrontMatter from 'front-matter';\n\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport { problemMarkdownFrontMatterSchema } from '../types/problem.js';\n\nexport async function readProblemMarkdownFrontMatter(problemDir: string): Promise<ProblemMarkdownFrontMatter> {\n for (const dirent of await fs.promises.readdir(problemDir, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (!(dirent.name === 'problem.md' || dirent.name.endsWith('.problem.md'))) continue;\n\n const markdown = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n const { attributes } = (parseFrontMatter as unknown as (markdown: string) => { attributes: unknown })(markdown);\n\n return problemMarkdownFrontMatterSchema.parse(attributes);\n }\n\n throw new Error(`problem markdown not found: ${problemDir}`);\n}\n"],"mappings":"mJAQA,eAAsB,EAA+B,EAAyD,CAC5G,IAAK,IAAM,KAAU,MAAM,EAAG,SAAS,QAAQ,EAAY,CAAE,cAAe,EAAK,CAAC,EAAG,CAEnF,GADI,CAAC,EAAO,OAAO,GACf,EAAE,EAAO,OAAS,cAAgB,EAAO,KAAK,SAAS,aAAa,GAAI,SAI5E,GAAM,CAAE,cAAgB,EAA8E,MAF/E,EAAG,SAAS,SAAS,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,CAEiB,EAE9G,OAAO,EAAiC,MAAM,CAAU,CAC1D,CAEA,MAAU,MAAM,+BAA+B,GAAY,CAC7D"}
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),a=require("node:path"),n="_shared";function t(){return(t=e.asyncToGenerator(e.regenerator().m(function t(s){var i,u,o,p,c,f,l,d,h,m,b,k,g,w,v,y,P,j;return e.regenerator().w(function(t){for(;;)switch(t.p=t.n){case 0:if(r.existsSync(s)){t.n=1;break}return t.a(2,[]);case 1:return i=new Set,u=new Map,o=new Map,p=new Map,c=new Map,P=e.createForOfIteratorHelper,t.n=2,r.promises.readdir(s,{withFileTypes:!0});case 2:f=P(t.v),t.p=3,f.s();case 4:if((l=f.n()).done){t.n=10;break}if(!(d=l.value).isFile()){t.n=7;break}if(h=a.parse(d.name),m=h.ext,b=h.name,".in"===m||".out"===m){t.n=5;break}return t.a(3,9);case 5:return t.n=6,r.promises.readFile(a.join(d.parentPath,d.name),"utf8");case 6:k=t.v,i.add(b),".in"===m&&u.set(b,k),".out"===m&&o.set(b,k),t.n=9;break;case 7:if(!d.isDirectory()){t.n=9;break}if(g=a.parse(d.name),w=g.ext,v=g.name,".fin"===w||".fout"===w){t.n=8;break}return t.a(3,9);case 8:i.add(v),".fin"===w&&p.set(v,a.join(d.parentPath,d.name)),".fout"===w&&c.set(v,a.join(d.parentPath,d.name));case 9:t.n=4;break;case 10:t.n=12;break;case 11:t.p=11,j=t.v,f.e(j);case 12:return t.p=12,f.f(),t.f(12);case 13:return y=e.toConsumableArray(i).filter(function(e){return e!==n}).toSorted().map(function(e){return{id:e,input:u.get(e),output:o.get(e),fileInputPath:p.get(e),fileOutputPath:c.get(e)}}),i.has(n)&&(y.shared={fileInputPath:p.get(n)}),t.a(2,y)}},t,null,[[3,11,12,13]])}))).apply(this,arguments)}exports.readTestCases=function(e){return t.apply(this,arguments)};
2
- //# sourceMappingURL=readTestCases.cjs.map
1
+ "use strict";const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("node:path");t=e.__toESM(t,1);let n=require("node:fs");n=e.__toESM(n,1);const r=`_shared`;async function i(e){if(!n.default.existsSync(e))return[];let i=new Set,a=new Map,o=new Map,s=new Map,c=new Map;for(let r of await n.default.promises.readdir(e,{withFileTypes:!0}))if(r.isFile()){let{ext:e,name:s}=t.default.parse(r.name);if(e!==`.in`&&e!==`.out`)continue;let c=await n.default.promises.readFile(t.default.join(r.parentPath,r.name),`utf8`);i.add(s),e===`.in`&&a.set(s,c),e===`.out`&&o.set(s,c)}else if(r.isDirectory()){let{ext:e,name:n}=t.default.parse(r.name);if(e!==`.fin`&&e!==`.fout`)continue;i.add(n),e===`.fin`&&s.set(n,t.default.join(r.parentPath,r.name)),e===`.fout`&&c.set(n,t.default.join(r.parentPath,r.name))}let l=[...i].filter(e=>e!==r).toSorted().map(e=>({id:e,input:a.get(e),output:o.get(e),fileInputPath:s.get(e),fileOutputPath:c.get(e)}));return i.has(r)&&(l.shared={fileInputPath:s.get(r)}),l}exports.readTestCases=i;
2
+ //# sourceMappingURL=readTestCases.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"readTestCases.cjs","sources":["../../src/helpers/readTestCases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nconst SHARED_TEST_CASE_NAME = '_shared';\n\nexport async function readTestCases(directory: string): Promise<\n { id: string; input?: string; output?: string; fileInputPath?: string; fileOutputPath?: string }[] & {\n shared?: { fileInputPath?: string };\n }\n> {\n if (!fs.existsSync(directory)) return [];\n\n const idSet = new Set<string>();\n const idToInput = new Map<string, string>();\n const idToOutput = new Map<string, string>();\n const idToFileInputPath = new Map<string, string>();\n const idToFileOutputPath = new Map<string, string>();\n\n for (const dirent of await fs.promises.readdir(directory, { withFileTypes: true })) {\n if (dirent.isFile()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.in' && ext !== '.out') continue;\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n idSet.add(name);\n if (ext === '.in') idToInput.set(name, text);\n if (ext === '.out') idToOutput.set(name, text);\n } else if (dirent.isDirectory()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.fin' && ext !== '.fout') continue;\n\n idSet.add(name);\n if (ext === '.fin') idToFileInputPath.set(name, path.join(dirent.parentPath, dirent.name));\n if (ext === '.fout') idToFileOutputPath.set(name, path.join(dirent.parentPath, dirent.name));\n }\n }\n\n const testCases: Awaited<ReturnType<typeof readTestCases>> = [...idSet]\n .filter((id) => id !== SHARED_TEST_CASE_NAME)\n .toSorted()\n .map((id) => ({\n id,\n input: idToInput.get(id),\n output: idToOutput.get(id),\n fileInputPath: idToFileInputPath.get(id),\n fileOutputPath: idToFileOutputPath.get(id),\n }));\n\n if (idSet.has(SHARED_TEST_CASE_NAME)) {\n testCases.shared = { fileInputPath: idToFileInputPath.get(SHARED_TEST_CASE_NAME) };\n }\n\n return testCases;\n}\n"],"names":["SHARED_TEST_CASE_NAME","_readTestCases","_asyncToGenerator","_regenerator","m","_callee","directory","idSet","idToInput","idToOutput","idToFileInputPath","idToFileOutputPath","_iterator","_step","dirent","_path$parse","ext","name","text","_path$parse2","_ext","_name","testCases","_t","_t2","w","_context","p","n","fs","existsSync","a","Set","Map","_createForOfIteratorHelper","promises","readdir","withFileTypes","v","s","done","value","isFile","path","parse","readFile","join","parentPath","add","set","isDirectory","e","f","_toConsumableArray","filter","id","toSorted","map","input","get","output","fileInputPath","fileOutputPath","has","shared","apply","this","arguments","_x"],"mappings":"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"}
1
+ {"version":3,"file":"readTestCases.cjs","names":["fs","path"],"sources":["../../src/helpers/readTestCases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nconst SHARED_TEST_CASE_NAME = '_shared';\n\nexport async function readTestCases(directory: string): Promise<\n { id: string; input?: string; output?: string; fileInputPath?: string; fileOutputPath?: string }[] & {\n shared?: { fileInputPath?: string };\n }\n> {\n if (!fs.existsSync(directory)) return [];\n\n const idSet = new Set<string>();\n const idToInput = new Map<string, string>();\n const idToOutput = new Map<string, string>();\n const idToFileInputPath = new Map<string, string>();\n const idToFileOutputPath = new Map<string, string>();\n\n for (const dirent of await fs.promises.readdir(directory, { withFileTypes: true })) {\n if (dirent.isFile()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.in' && ext !== '.out') continue;\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n idSet.add(name);\n if (ext === '.in') idToInput.set(name, text);\n if (ext === '.out') idToOutput.set(name, text);\n } else if (dirent.isDirectory()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.fin' && ext !== '.fout') continue;\n\n idSet.add(name);\n if (ext === '.fin') idToFileInputPath.set(name, path.join(dirent.parentPath, dirent.name));\n if (ext === '.fout') idToFileOutputPath.set(name, path.join(dirent.parentPath, dirent.name));\n }\n }\n\n const testCases: Awaited<ReturnType<typeof readTestCases>> = [...idSet]\n .filter((id) => id !== SHARED_TEST_CASE_NAME)\n .toSorted()\n .map((id) => ({\n id,\n input: idToInput.get(id),\n output: idToOutput.get(id),\n fileInputPath: idToFileInputPath.get(id),\n fileOutputPath: idToFileOutputPath.get(id),\n }));\n\n if (idSet.has(SHARED_TEST_CASE_NAME)) {\n testCases.shared = { fileInputPath: idToFileInputPath.get(SHARED_TEST_CASE_NAME) };\n }\n\n return testCases;\n}\n"],"mappings":"wJAGA,MAAM,EAAwB,UAE9B,eAAsB,EAAc,EAIlC,CACA,GAAI,CAACA,EAAAA,QAAG,WAAW,CAAS,EAAG,MAAO,CAAC,EAEvC,IAAM,EAAQ,IAAI,IACZ,EAAY,IAAI,IAChB,EAAa,IAAI,IACjB,EAAoB,IAAI,IACxB,EAAqB,IAAI,IAE/B,IAAK,IAAM,KAAU,MAAMA,EAAAA,QAAG,SAAS,QAAQ,EAAW,CAAE,cAAe,EAAK,CAAC,EAC/E,GAAI,EAAO,OAAO,EAAG,CACnB,GAAM,CAAE,MAAK,QAASC,EAAAA,QAAK,MAAM,EAAO,IAAI,EAC5C,GAAI,IAAQ,OAAS,IAAQ,OAAQ,SAErC,IAAM,EAAO,MAAMD,EAAAA,QAAG,SAAS,SAASC,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,EAEzF,EAAM,IAAI,CAAI,EACV,IAAQ,OAAO,EAAU,IAAI,EAAM,CAAI,EACvC,IAAQ,QAAQ,EAAW,IAAI,EAAM,CAAI,CAC/C,MAAO,GAAI,EAAO,YAAY,EAAG,CAC/B,GAAM,CAAE,MAAK,QAASA,EAAAA,QAAK,MAAM,EAAO,IAAI,EAC5C,GAAI,IAAQ,QAAU,IAAQ,QAAS,SAEvC,EAAM,IAAI,CAAI,EACV,IAAQ,QAAQ,EAAkB,IAAI,EAAMA,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,EACrF,IAAQ,SAAS,EAAmB,IAAI,EAAMA,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,CAC7F,CAGF,IAAM,EAAuD,CAAC,GAAG,CAAK,CAAC,CACpE,OAAQ,GAAO,IAAO,CAAqB,CAAC,CAC5C,SAAS,CAAC,CACV,IAAK,IAAQ,CACZ,KACA,MAAO,EAAU,IAAI,CAAE,EACvB,OAAQ,EAAW,IAAI,CAAE,EACzB,cAAe,EAAkB,IAAI,CAAE,EACvC,eAAgB,EAAmB,IAAI,CAAE,CAC3C,EAAE,EAMJ,OAJI,EAAM,IAAI,CAAqB,IACjC,EAAU,OAAS,CAAE,cAAe,EAAkB,IAAI,CAAqB,CAAE,GAG5E,CACT"}
@@ -1,2 +1,2 @@
1
- import{asyncToGenerator as e,regenerator as a,toConsumableArray as r,createForOfIteratorHelper as n}from"../_virtual/_rollupPluginBabelHelpers.js";import t from"node:fs";import i from"node:path";var s="_shared";function o(e){return u.apply(this,arguments)}function u(){return(u=e(a().m(function e(o){var u,p,f,c,l,m,d,h,b,k,w,g,v,y,P,j,x,F;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.existsSync(o)){e.n=1;break}return e.a(2,[]);case 1:return u=new Set,p=new Map,f=new Map,c=new Map,l=new Map,x=n,e.n=2,t.promises.readdir(o,{withFileTypes:!0});case 2:m=x(e.v),e.p=3,m.s();case 4:if((d=m.n()).done){e.n=10;break}if(!(h=d.value).isFile()){e.n=7;break}if(b=i.parse(h.name),k=b.ext,w=b.name,".in"===k||".out"===k){e.n=5;break}return e.a(3,9);case 5:return e.n=6,t.promises.readFile(i.join(h.parentPath,h.name),"utf8");case 6:g=e.v,u.add(w),".in"===k&&p.set(w,g),".out"===k&&f.set(w,g),e.n=9;break;case 7:if(!h.isDirectory()){e.n=9;break}if(v=i.parse(h.name),y=v.ext,P=v.name,".fin"===y||".fout"===y){e.n=8;break}return e.a(3,9);case 8:u.add(P),".fin"===y&&c.set(P,i.join(h.parentPath,h.name)),".fout"===y&&l.set(P,i.join(h.parentPath,h.name));case 9:e.n=4;break;case 10:e.n=12;break;case 11:e.p=11,F=e.v,m.e(F);case 12:return e.p=12,m.f(),e.f(12);case 13:return j=r(u).filter(function(e){return e!==s}).toSorted().map(function(e){return{id:e,input:p.get(e),output:f.get(e),fileInputPath:c.get(e),fileOutputPath:l.get(e)}}),u.has(s)&&(j.shared={fileInputPath:c.get(s)}),e.a(2,j)}},e,null,[[3,11,12,13]])}))).apply(this,arguments)}export{o as readTestCases};
2
- //# sourceMappingURL=readTestCases.js.map
1
+ import e from"node:path";import t from"node:fs";const n=`_shared`;async function r(r){if(!t.existsSync(r))return[];let i=new Set,a=new Map,o=new Map,s=new Map,c=new Map;for(let n of await t.promises.readdir(r,{withFileTypes:!0}))if(n.isFile()){let{ext:r,name:s}=e.parse(n.name);if(r!==`.in`&&r!==`.out`)continue;let c=await t.promises.readFile(e.join(n.parentPath,n.name),`utf8`);i.add(s),r===`.in`&&a.set(s,c),r===`.out`&&o.set(s,c)}else if(n.isDirectory()){let{ext:t,name:r}=e.parse(n.name);if(t!==`.fin`&&t!==`.fout`)continue;i.add(r),t===`.fin`&&s.set(r,e.join(n.parentPath,n.name)),t===`.fout`&&c.set(r,e.join(n.parentPath,n.name))}let l=[...i].filter(e=>e!==n).toSorted().map(e=>({id:e,input:a.get(e),output:o.get(e),fileInputPath:s.get(e),fileOutputPath:c.get(e)}));return i.has(n)&&(l.shared={fileInputPath:s.get(n)}),l}export{r as readTestCases};
2
+ //# sourceMappingURL=readTestCases.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"readTestCases.js","sources":["../../src/helpers/readTestCases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nconst SHARED_TEST_CASE_NAME = '_shared';\n\nexport async function readTestCases(directory: string): Promise<\n { id: string; input?: string; output?: string; fileInputPath?: string; fileOutputPath?: string }[] & {\n shared?: { fileInputPath?: string };\n }\n> {\n if (!fs.existsSync(directory)) return [];\n\n const idSet = new Set<string>();\n const idToInput = new Map<string, string>();\n const idToOutput = new Map<string, string>();\n const idToFileInputPath = new Map<string, string>();\n const idToFileOutputPath = new Map<string, string>();\n\n for (const dirent of await fs.promises.readdir(directory, { withFileTypes: true })) {\n if (dirent.isFile()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.in' && ext !== '.out') continue;\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n idSet.add(name);\n if (ext === '.in') idToInput.set(name, text);\n if (ext === '.out') idToOutput.set(name, text);\n } else if (dirent.isDirectory()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.fin' && ext !== '.fout') continue;\n\n idSet.add(name);\n if (ext === '.fin') idToFileInputPath.set(name, path.join(dirent.parentPath, dirent.name));\n if (ext === '.fout') idToFileOutputPath.set(name, path.join(dirent.parentPath, dirent.name));\n }\n }\n\n const testCases: Awaited<ReturnType<typeof readTestCases>> = [...idSet]\n .filter((id) => id !== SHARED_TEST_CASE_NAME)\n .toSorted()\n .map((id) => ({\n id,\n input: idToInput.get(id),\n output: idToOutput.get(id),\n fileInputPath: idToFileInputPath.get(id),\n fileOutputPath: idToFileOutputPath.get(id),\n }));\n\n if (idSet.has(SHARED_TEST_CASE_NAME)) {\n testCases.shared = { fileInputPath: idToFileInputPath.get(SHARED_TEST_CASE_NAME) };\n }\n\n return testCases;\n}\n"],"names":["SHARED_TEST_CASE_NAME","readTestCases","_x","_readTestCases","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","directory","idSet","idToInput","idToOutput","idToFileInputPath","idToFileOutputPath","_iterator","_step","dirent","_path$parse","ext","name","text","_path$parse2","_ext","_name","testCases","_t","_t2","w","_context","p","n","fs","existsSync","a","Set","Map","_createForOfIteratorHelper","promises","readdir","withFileTypes","v","s","done","value","isFile","path","parse","readFile","join","parentPath","add","set","isDirectory","e","f","_toConsumableArray","filter","id","toSorted","map","input","get","output","fileInputPath","fileOutputPath","has","shared"],"mappings":"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"}
1
+ {"version":3,"file":"readTestCases.js","names":[],"sources":["../../src/helpers/readTestCases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nconst SHARED_TEST_CASE_NAME = '_shared';\n\nexport async function readTestCases(directory: string): Promise<\n { id: string; input?: string; output?: string; fileInputPath?: string; fileOutputPath?: string }[] & {\n shared?: { fileInputPath?: string };\n }\n> {\n if (!fs.existsSync(directory)) return [];\n\n const idSet = new Set<string>();\n const idToInput = new Map<string, string>();\n const idToOutput = new Map<string, string>();\n const idToFileInputPath = new Map<string, string>();\n const idToFileOutputPath = new Map<string, string>();\n\n for (const dirent of await fs.promises.readdir(directory, { withFileTypes: true })) {\n if (dirent.isFile()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.in' && ext !== '.out') continue;\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n idSet.add(name);\n if (ext === '.in') idToInput.set(name, text);\n if (ext === '.out') idToOutput.set(name, text);\n } else if (dirent.isDirectory()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.fin' && ext !== '.fout') continue;\n\n idSet.add(name);\n if (ext === '.fin') idToFileInputPath.set(name, path.join(dirent.parentPath, dirent.name));\n if (ext === '.fout') idToFileOutputPath.set(name, path.join(dirent.parentPath, dirent.name));\n }\n }\n\n const testCases: Awaited<ReturnType<typeof readTestCases>> = [...idSet]\n .filter((id) => id !== SHARED_TEST_CASE_NAME)\n .toSorted()\n .map((id) => ({\n id,\n input: idToInput.get(id),\n output: idToOutput.get(id),\n fileInputPath: idToFileInputPath.get(id),\n fileOutputPath: idToFileOutputPath.get(id),\n }));\n\n if (idSet.has(SHARED_TEST_CASE_NAME)) {\n testCases.shared = { fileInputPath: idToFileInputPath.get(SHARED_TEST_CASE_NAME) };\n }\n\n return testCases;\n}\n"],"mappings":"gDAGA,MAAM,EAAwB,UAE9B,eAAsB,EAAc,EAIlC,CACA,GAAI,CAAC,EAAG,WAAW,CAAS,EAAG,MAAO,CAAC,EAEvC,IAAM,EAAQ,IAAI,IACZ,EAAY,IAAI,IAChB,EAAa,IAAI,IACjB,EAAoB,IAAI,IACxB,EAAqB,IAAI,IAE/B,IAAK,IAAM,KAAU,MAAM,EAAG,SAAS,QAAQ,EAAW,CAAE,cAAe,EAAK,CAAC,EAC/E,GAAI,EAAO,OAAO,EAAG,CACnB,GAAM,CAAE,MAAK,QAAS,EAAK,MAAM,EAAO,IAAI,EAC5C,GAAI,IAAQ,OAAS,IAAQ,OAAQ,SAErC,IAAM,EAAO,MAAM,EAAG,SAAS,SAAS,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,EAEzF,EAAM,IAAI,CAAI,EACV,IAAQ,OAAO,EAAU,IAAI,EAAM,CAAI,EACvC,IAAQ,QAAQ,EAAW,IAAI,EAAM,CAAI,CAC/C,MAAO,GAAI,EAAO,YAAY,EAAG,CAC/B,GAAM,CAAE,MAAK,QAAS,EAAK,MAAM,EAAO,IAAI,EAC5C,GAAI,IAAQ,QAAU,IAAQ,QAAS,SAEvC,EAAM,IAAI,CAAI,EACV,IAAQ,QAAQ,EAAkB,IAAI,EAAM,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,EACrF,IAAQ,SAAS,EAAmB,IAAI,EAAM,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,CAC7F,CAGF,IAAM,EAAuD,CAAC,GAAG,CAAK,CAAC,CACpE,OAAQ,GAAO,IAAO,CAAqB,CAAC,CAC5C,SAAS,CAAC,CACV,IAAK,IAAQ,CACZ,KACA,MAAO,EAAU,IAAI,CAAE,EACvB,OAAQ,EAAW,IAAI,CAAE,EACzB,cAAe,EAAkB,IAAI,CAAE,EACvC,eAAgB,EAAmB,IAAI,CAAE,CAC3C,EAAE,EAMJ,OAJI,EAAM,IAAI,CAAqB,IACjC,EAAU,OAAS,CAAE,cAAe,EAAkB,IAAI,CAAqB,CAAE,GAG5E,CACT"}
@@ -1,2 +1,6 @@
1
- "use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs");function n(n,i,a,u){var c,f;if(void 0===u&&(u=function(n){var r,l,i,s;return[].concat(e.toConsumableArray(null!=(r=null==(l=n.comments)?void 0:l.map(function(e){var n;return{closeRegExp:t(null!=(n=e.close)?n:/(?=\n)/g),isComment:!0,openRegExp:t(e.open)}}))?r:[]),e.toConsumableArray(null!=(i=null==(s=n.strings)?void 0:s.map(function(e){return{closeRegExp:t(e.close),isComment:!1,openRegExp:t(e.open)}}))?i:[]))}(n)),!(null!=(c=n.comments)&&c.length||a.removeStrings&&null!=(f=n.strings)&&f.length))return i;for(var g=[],m=0;m<i.length;){var h,v=void 0,x=e.createForOfIteratorHelper(u);try{for(x.s();!(h=x.n()).done;){var d=h.value,p=d.openRegExp;p.lastIndex=m;var S=p.exec(i);S&&r(S,d,v,a)&&(v={grammar:d,match:S})}}catch(e){x.e(e)}finally{x.f()}if(v){var E=v.match.index;if(!v.grammar.isComment&&a.removeStrings&&(E=s(i,v.match.index)),g.push(i.slice(m,E)),v.grammar.isComment){var R=v.grammar.closeRegExp;R.lastIndex=v.match.index+v.match[0].length;var C=R.exec(i);m=C?C.index+C[0].length:i.length}else{m=l(i,v.match.index,v.grammar);var I=i.slice(v.match.index,m);a.removeStrings?g.push(o(n,u,i,v.match.index,I)):g.push(I)}}else g.push(i.slice(m)),m=i.length}return g.join("")}function r(e,n,r,t){return!r||(e.index<r.match.index||!(e.index>r.match.index)&&(t.removeStrings&&r.grammar.isComment&&!n.isComment))}function t(e){return new RegExp(e,e.flags.includes("g")?e.flags:"".concat(e.flags,"g"))}function l(e,n,r){if("`"===e[n])return function(e,n){var r=n+1;for(;r<e.length;)if("\\"!==e[r]){if("`"===e[r])return r+1;"$"!==e[r]||"{"!==e[r+1]?r+=1:r=c(e,r+2,"}",{slashStartsRegExp:!0}).endIndex+1}else r+=2;return e.length}(e,n);if(u(e,n))return function(e,n){var r=i(e,n),t=n+r.length;for(;t<e.length;){if(e.startsWith(r,t))return t+r.length;"{"!==e[t]||"{"!==e[t+1]?"{"!==e[t]?t+="\\"===e[t]?2:1:t=c(e,t+1,"}",{slashStartsRegExp:!1}).endIndex+1:t+=2}return e.length}(e,n);var t=r.closeRegExp;t.lastIndex=n+1;var l=t.exec(e);return l?l.index+l[0].length:e.length}function i(e,n){var r,t=e.slice(n,n+3);return"'''"===t||'"""'===t?t:null!=(r=e[n])?r:""}function s(e,n){var r=a(e,n);return r?n-r.length:n}function a(e,n){var r;if('"'===e[n]||"'"===e[n]){for(var t=n-1;t>=0&&/[A-Za-z]/.test(null!=(l=e[t])?l:"");){var l;t-=1}var i=e.slice(t+1,n);if(i&&/^[bfru]+$/i.test(i)&&!(t>=0&&/[\dA-Za-z_]/.test(null!=(r=e[t])?r:"")))return i}}function o(e,r,t,l,s){return s.startsWith("`")?function(e,r,t){var l=[],i=1;for(;i<t.length-1;)if("\\"!==t[i])if("$"!==t[i]||"{"!==t[i+1])i+=1;else{var s=c(t,i+2,"}",{slashStartsRegExp:!0});l.push(n(e,s.content,{removeStrings:!0},r)),i=s.endIndex+1}else i+=2;return l.join("\n")}(e,r,s):u(t,l)?function(e,r,t){var l=i(t,0).length,s=[],a=l;for(;a<t.length-l;)if("{"!==t[a]||"{"!==t[a+1])if("{"!==t[a])a+="\\"===t[a]?2:1;else{var o=c(t,a+1,"}",{slashStartsRegExp:!1});s.push(n(e,o.content,{removeStrings:!0},r)),a=o.endIndex+1}else a+=2;return s.join("\n")}(e,r,s):""}function u(e,n){var r,t;return null!=(r=null==(t=a(e,n))?void 0:t.toLowerCase().includes("f"))&&r}function c(e,n,r,t){for(var l=1,i=n;i<e.length;){var s=e[i];if('"'!==s&&"'"!==s&&"`"!==s)if(t.slashStartsRegExp&&"/"===e[i]&&"/"===e[i+1])i=m(e,i);else if(t.slashStartsRegExp&&"/"===e[i]&&"*"===e[i+1])i=h(e,i);else if(t.slashStartsRegExp&&"/"===s)i=g(e,i);else{if("{"===s&&(l+=1),s===r&&0===(l-=1))return{content:e.slice(n,i),endIndex:i};i+=1}else i=f(e,i)}return{content:e.slice(n),endIndex:e.length}}function f(e,n){for(var r=i(e,n),t=n+r.length;t<e.length;)if("\\"!==e[t]){if(e.startsWith(r,t))return t+r.length;t+=1}else t+=2;return t}function g(e,n){for(var r=n+1,t=!1;r<e.length;)if("\\"!==e[r]){if("["===e[r]&&(t=!0),"]"===e[r]&&(t=!1),"/"===e[r]&&!t){for(r+=1;/[A-Za-z]/.test(null!=(l=e[r])?l:"");){var l;r+=1}return r}if("\n"===e[r])return n+1;r+=1}else r+=2;return n+1}function m(e,n){var r=e.indexOf("\n",n+2);return-1===r?e.length:r}function h(e,n){var r=e.indexOf("*/",n+2);return-1===r?e.length:r+2}exports.removeCommentsAndStringsInSourceCode=function(e,r){return n(e,r,{removeStrings:!0})},exports.removeCommentsInSourceCode=function(e,r){return n(e,r,{removeStrings:!1})};
2
- //# sourceMappingURL=removeCommentsInSourceCode.cjs.map
1
+ "use strict";function e(e,t){return n(e,t,{removeStrings:!1})}function t(e,t){return n(e,t,{removeStrings:!0})}function n(e,t,n,a=r(e)){if(!e.comments?.length&&(!n.removeStrings||!e.strings?.length))return t;let s=[],c=0;for(;c<t.length;){let r;for(let e of a){let a=e.openRegExp;a.lastIndex=c;let o=a.exec(t);o&&i(o,e,r,n)&&(r={grammar:e,match:o})}if(r){let i=r.match.index;if(!r.grammar.isComment&&n.removeStrings&&(i=u(t,r.match.index)),s.push(t.slice(c,i)),r.grammar.isComment){let e=r.grammar.closeRegExp;e.lastIndex=r.match.index+r.match[0].length;let n=e.exec(t);c=n?n.index+n[0].length:t.length}else{c=o(t,r.match.index,r.grammar);let i=t.slice(r.match.index,c);n.removeStrings?s.push(f(e,a,t,r.match.index,i)):s.push(i)}}else s.push(t.slice(c)),c=t.length}return s.join(``)}function r(e){return[...e.comments?.map(e=>({closeRegExp:a(e.close??/(?=\n)/g),isComment:!0,openRegExp:a(e.open)}))??[],...e.strings?.map(e=>({closeRegExp:a(e.close),isComment:!1,openRegExp:a(e.open)}))??[]]}function i(e,t,n,r){return!n||e.index<n.match.index?!0:e.index>n.match.index?!1:r.removeStrings&&n.grammar.isComment&&!t.isComment}function a(e){return new RegExp(e,e.flags.includes(`g`)?e.flags:`${e.flags}g`)}function o(e,t,n){if(e[t]==="`")return s(e,t);if(p(e,t))return c(e,t);let r=n.closeRegExp;r.lastIndex=t+1;let i=r.exec(e);return i?i.index+i[0].length:e.length}function s(e,t){let n=t+1;for(;n<e.length;){if(e[n]===`\\`){n+=2;continue}if(e[n]==="`")return n+1;if(e[n]===`$`&&e[n+1]===`{`){n=g(e,n+2,`}`,{slashStartsRegExp:!0}).endIndex+1;continue}n+=1}return e.length}function c(e,t){let n=l(e,t),r=t+n.length;for(;r<e.length;){if(e.startsWith(n,r))return r+n.length;if(e[r]===`{`&&e[r+1]===`{`){r+=2;continue}if(e[r]===`{`){r=g(e,r+1,`}`,{slashStartsRegExp:!1}).endIndex+1;continue}r+=e[r]===`\\`?2:1}return e.length}function l(e,t){let n=e.slice(t,t+3);return n===`'''`||n===`"""`?n:e[t]??``}function u(e,t){let n=d(e,t);return n?t-n.length:t}function d(e,t){if(e[t]!==`"`&&e[t]!==`'`)return;let n=t-1;for(;n>=0&&/[A-Za-z]/.test(e[n]??``);)--n;let r=e.slice(n+1,t);if(!(!r||!/^[bfru]+$/i.test(r))&&!(n>=0&&/[\dA-Za-z_]/.test(e[n]??``)))return r}function f(e,t,n,r,i){return i.startsWith("`")?m(e,t,i):p(n,r)?h(e,t,i):``}function p(e,t){return d(e,t)?.toLowerCase().includes(`f`)??!1}function m(e,t,r){let i=[],a=1;for(;a<r.length-1;){if(r[a]===`\\`){a+=2;continue}if(r[a]===`$`&&r[a+1]===`{`){let o=g(r,a+2,`}`,{slashStartsRegExp:!0});i.push(n(e,o.content,{removeStrings:!0},t)),a=o.endIndex+1;continue}a+=1}return i.join(`
2
+ `)}function h(e,t,r){let i=l(r,0).length,a=[],o=i;for(;o<r.length-i;){if(r[o]===`{`&&r[o+1]===`{`){o+=2;continue}if(r[o]===`{`){let i=g(r,o+1,`}`,{slashStartsRegExp:!1});a.push(n(e,i.content,{removeStrings:!0},t)),o=i.endIndex+1;continue}o+=r[o]===`\\`?2:1}return a.join(`
3
+ `)}function g(e,t,n,r){let i=1,a=t;for(;a<e.length;){let o=e[a];if(o===`"`||o===`'`||o==="`"){a=_(e,a);continue}if(r.slashStartsRegExp&&e[a]===`/`&&e[a+1]===`/`){a=y(e,a);continue}if(r.slashStartsRegExp&&e[a]===`/`&&e[a+1]===`*`){a=b(e,a);continue}if(r.slashStartsRegExp&&o===`/`){a=v(e,a);continue}if(o===`{`&&(i+=1),o===n&&(--i,i===0))return{content:e.slice(t,a),endIndex:a};a+=1}return{content:e.slice(t),endIndex:e.length}}function _(e,t){let n=l(e,t),r=t+n.length;for(;r<e.length;){if(e[r]===`\\`){r+=2;continue}if(e.startsWith(n,r))return r+n.length;r+=1}return r}function v(e,t){let n=t+1,r=!1;for(;n<e.length;){if(e[n]===`\\`){n+=2;continue}if(e[n]===`[`&&(r=!0),e[n]===`]`&&(r=!1),e[n]===`/`&&!r){for(n+=1;/[A-Za-z]/.test(e[n]??``);)n+=1;return n}if(e[n]===`
4
+ `)return t+1;n+=1}return t+1}function y(e,t){let n=e.indexOf(`
5
+ `,t+2);return n===-1?e.length:n}function b(e,t){let n=e.indexOf(`*/`,t+2);return n===-1?e.length:n+2}exports.removeCommentsAndStringsInSourceCode=t,exports.removeCommentsInSourceCode=e;
6
+ //# sourceMappingURL=removeCommentsInSourceCode.cjs.map