@yamato-daiwa/automation 0.7.0-alpha.1 → 0.7.0-alpha.3

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 (2) hide show
  1. package/EntryPoint.js +319 -185
  2. package/package.json +7 -4
package/EntryPoint.js CHANGED
@@ -34,7 +34,7 @@ function revisionHash(data) {
34
34
  \***********************/
35
35
  /***/ ((module) => {
36
36
 
37
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@yamato-daiwa/automation","version":"0.7.0-alpha.1","description":"The project building tool with declarative YAML configuration specializing on Pug, Stylus and TypeScript as source code languages.","keywords":["build","pug","stylus","tool","typescript"],"engines":{"node":">=18.0.0"},"bin":{"yda":"Executable"},"files":["EntryPoint.js"],"dependencies":{"@eslint-community/eslint-plugin-eslint-comments":"4.5.0","@stylistic/eslint-plugin":"3.1.0","@typescript-eslint/eslint-plugin":"8.32.0","@typescript-eslint/parser":"8.32.0","@vue/compiler-sfc":"3.5.13","@webdiscus/pug-loader":"2.11.1","@yamato-daiwa/es-extensions":"1.8.0-alpha.9","@yamato-daiwa/es-extensions-nodejs":"1.8.0-alpha.9","@yamato-daiwa/style_guides":"0.6.8","autoprefixer":"10.4.21","browser-sync":"3.0.4","css-loader":"7.1.2","cssnano":"7.0.7","dotenv":"16.5.0","eslint":"9.26.0","eslint-plugin-import":"2.31.0","eslint-plugin-n":"17.17.0","eslint-plugin-react":"7.37.5","eslint-plugin-vue":"9.33.0","eslint-plugin-vue-pug":"0.6.2","fork-ts-checker-webpack-plugin":"7.3.0","gulp":"4.0.2","gulp-data":"1.3.1","gulp-if":"3.0.0","gulp-imagemin":"7.1.0","gulp-nodemon":"2.5.0","gulp-plumber":"1.2.1","gulp-postcss":"10.0.0","gulp-pug":"5.0.0","gulp-sourcemaps":"3.0.0","gulp-stylus":"3.0.1","imagemin-pngquant":"9.0.2","js-beautify":"1.15.4","json5-loader":"4.0.1","nanoid":"5.1.5","node-html-parser":"6.1.13","node-notifier":"10.0.1","pa11y":"8.0.0","probe-image-size":"7.2.3","pug-lint":"2.7.0","pug3-ast-loader":"0.0.0","puppeteer":"24.8.2","rev-hash":"4.1.0","stlint":"1.0.65","stream-combiner2":"1.1.1","style-loader":"4.0.0","stylus":"0.63.0","stylus-loader":"8.1.1","ts-loader":"9.5.2","vinyl":"2.2.1","vue-loader":"17.4.2","vue-style-loader":"4.1.3","webpack":"5.99.8","webpack-node-externals":"3.0.0","webpack-stream":"7.0.0","worker-loader":"3.0.8","yaml-loader":"0.8.1"},"devDependencies":{"@types/browser-sync":"2.29.0","@types/cssnano":"5.0.0","@types/gulp":"4.0.17","@types/gulp-if":"3.0.4","@types/gulp-imagemin":"7.0.3","@types/gulp-nodemon":"0.0.37","@types/gulp-plumber":"0.0.37","@types/gulp-postcss":"8.0.6","@types/gulp-sourcemaps":"0.0.38","@types/gulp-stylus":"2.7.8","@types/js-beautify":"1.14.3","@types/node":"22.15.17","@types/node-notifier":"8.0.5","@types/pa11y":"5.3.7","@types/probe-image-size":"7.2.5","@types/pug":"2.0.10","@types/vnu-jar":"17.11.2","@types/webpack-node-externals":"3.0.4","@types/webpack-stream":"3.2.15","eslint-webpack-plugin":"4.2.0","ts-node":"10.9.2","typescript":"5.8.3","vnu-jar":"24.10.17","webpack-cli":"6.0.1"},"scripts":{"Incremental Development Building":"webpack --mode development","Production Building":"webpack --mode production","Linting":"eslint Source"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/TokugawaTakeshi/Yamato-Daiwa-Automation.git"},"homepage":"https://automation.yamato-daiwa.com/","bugs":{"url":"https://github.com/TokugawaTakeshi/Yamato-Daiwa-Automation/issues","email":"tokugawa.takesi@gmail.com"}}');
37
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@yamato-daiwa/automation","version":"0.7.0-alpha.3","description":"The project building tool with declarative YAML configuration specializing on Pug, Stylus and TypeScript as source code languages.","keywords":["build","pug","stylus","tool","typescript"],"engines":{"node":">=20.0.0"},"bin":{"yda":"Executable"},"files":["EntryPoint.js"],"dependencies":{"@eslint-community/eslint-plugin-eslint-comments":"4.5.0","@stylistic/eslint-plugin":"3.1.0","@typescript-eslint/eslint-plugin":"8.32.0","@typescript-eslint/parser":"8.32.0","@vue/compiler-sfc":"3.5.13","@webdiscus/pug-loader":"2.11.1","@yamato-daiwa/es-extensions":"1.8.0-alpha.9","@yamato-daiwa/es-extensions-nodejs":"1.8.0-alpha.9","@yamato-daiwa/style_guides":"0.6.8","autoprefixer":"10.4.21","browser-sync":"3.0.4","css-loader":"7.1.2","cssnano":"7.0.7","dotenv":"16.5.0","eslint":"9.26.0","eslint-plugin-import":"2.31.0","eslint-plugin-n":"17.17.0","eslint-plugin-react":"7.37.5","eslint-plugin-vue":"9.33.0","eslint-plugin-vue-pug":"0.6.2","fork-ts-checker-webpack-plugin":"7.3.0","gulp":"4.0.2","gulp-data":"1.3.1","gulp-if":"3.0.0","gulp-imagemin":"7.1.0","gulp-nodemon":"2.5.0","gulp-plumber":"1.2.1","gulp-postcss":"10.0.0","gulp-pug":"5.0.0","gulp-sourcemaps":"3.0.0","gulp-stylus":"3.0.1","htmlnano":"2.1.2","imagemin-pngquant":"9.0.2","js-beautify":"1.15.4","json5-loader":"4.0.1","nanoid":"5.1.5","node-html-parser":"7.0.1","node-notifier":"10.0.1","pa11y":"8.0.0","probe-image-size":"7.2.3","pug-lint":"2.7.0","pug3-ast-loader":"0.0.0","puppeteer":"24.8.2","rev-hash":"4.1.0","stlint":"1.0.65","stream-combiner2":"1.1.1","style-loader":"4.0.0","stylus":"0.63.0","stylus-loader":"8.1.1","ts-loader":"9.5.2","vinyl":"2.2.1","vnu-jar":"24.10.17","vue-loader":"17.4.2","vue-style-loader":"4.1.3","vue-tsc":"2.2.10","webpack":"5.99.8","webpack-node-externals":"3.0.0","webpack-stream":"7.0.0","worker-loader":"3.0.8","yaml-loader":"0.8.1"},"devDependencies":{"@types/browser-sync":"2.29.0","@types/cssnano":"5.0.0","@types/gulp":"4.0.17","@types/gulp-if":"3.0.4","@types/gulp-imagemin":"7.0.3","@types/gulp-nodemon":"0.0.37","@types/gulp-plumber":"0.0.37","@types/gulp-postcss":"8.0.6","@types/gulp-sourcemaps":"0.0.38","@types/gulp-stylus":"2.7.8","@types/js-beautify":"1.14.3","@types/node":"22.15.17","@types/node-notifier":"8.0.5","@types/pa11y":"5.3.7","@types/probe-image-size":"7.2.5","@types/pug":"2.0.10","@types/vnu-jar":"17.11.2","@types/webpack-node-externals":"3.0.4","@types/webpack-stream":"3.2.15","eslint-webpack-plugin":"4.2.0","ts-node":"10.9.2","typescript":"5.8.3","webpack-cli":"6.0.1"},"scripts":{"Incremental Development Building":"webpack --mode development","Production Building":"webpack --mode production","Linting":"eslint Source"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/TokugawaTakeshi/Yamato-Daiwa-Automation.git"},"homepage":"https://automation.yamato-daiwa.com/","funding":"https://github.com/TokugawaTakeshi/Yamato-Daiwa-Automation?sponsor=1","bugs":{"url":"https://github.com/TokugawaTakeshi/Yamato-Daiwa-Automation/issues","email":"tokugawa.takesi@gmail.com"}}');
38
38
 
39
39
  /***/ }),
40
40
 
@@ -73,26 +73,28 @@ var ApplicationConsoleLineInterface;
73
73
  options: {
74
74
  mode: {
75
75
  newName: "projectBuildingMode",
76
- description: "The project building mode; affects to presence or absence of incremental building, " +
77
- "browser live reloading, code minification etc.",
78
- type: es_extensions_nodejs_1.ConsoleCommandsParser.ParametersTypes.string,
79
- required: true,
80
76
  shortcut: "m",
81
- allowedAlternatives: Object.values(ConsumingProjectBuildingModes_1.default)
82
- },
83
- configurationFile: {
84
- description: "Custom name of the configuration file (the default one is " +
85
- `"${CONFIGURATION_FILE_DEFAULT_NAME_WITH_EXTENSION_1.default}")`,
86
- newName: "customConfigurationFileName__possiblyWithoutExtension",
77
+ required: true,
87
78
  type: es_extensions_nodejs_1.ConsoleCommandsParser.ParametersTypes.string,
88
- required: false
79
+ allowedAlternatives: Object.values(ConsumingProjectBuildingModes_1.default),
80
+ description: "The project building mode; affects to presence or absence of incremental building, " +
81
+ "browser live reloading, code minification etc."
89
82
  },
90
83
  selectiveExecution: {
91
84
  newName: "selectiveExecutionID",
85
+ shortcut: "s",
86
+ required: false,
87
+ type: es_extensions_nodejs_1.ConsoleCommandsParser.ParametersTypes.string,
92
88
  description: "Allows to specify the selection of tasks, entry points groups, etc. by selective execution ID, " +
93
89
  "herewith the desired selective execution must be preliminarily defined in the configuration file.",
90
+ },
91
+ configurationFile: {
92
+ newName: "customConfigurationFileName__possiblyWithoutExtension",
93
+ shortcut: "c",
94
+ required: false,
94
95
  type: es_extensions_nodejs_1.ConsoleCommandsParser.ParametersTypes.string,
95
- required: false
96
+ description: "Custom name of the configuration file (the default one is " +
97
+ `"${CONFIGURATION_FILE_DEFAULT_NAME_WITH_EXTENSION_1.default}")`
96
98
  }
97
99
  }
98
100
  },
@@ -4786,8 +4788,10 @@ class FilesMasterWatcher {
4786
4788
  FilesMasterWatcher.passiveWatchers.add(passiveWatcher);
4787
4789
  }
4788
4790
  /* [ Chokidar theory ] While the globs are absolute path based, the second parameter will be the absolute path too. */
4789
- static onAnyChokidarEvent(chokidarEventName, targetFileOrDirectoryAbsolutePath__operationingSystemDependentPathSeparators) {
4791
+ static onAnyChokidarEvent(chokidarEventName, targetFileOrDirectoryAbsolutePath__operatingSystemDependentPathSeparators) {
4790
4792
  let eventName;
4793
+ /* eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check --
4794
+ * Only operations with files are actual in this case. */
4791
4795
  switch (chokidarEventName) {
4792
4796
  case ChokidarSpecialist_1.default.EventsNames.fileAdded: {
4793
4797
  eventName = FilesMasterWatcher.EventsNames.fileAdded;
@@ -4806,7 +4810,7 @@ class FilesMasterWatcher {
4806
4810
  }
4807
4811
  }
4808
4812
  const targetFileAbsolutePath__forwardSlashesPathSeparators = es_extensions_nodejs_1.ImprovedPath.
4809
- replacePathSeparatorsToForwardSlashes(targetFileOrDirectoryAbsolutePath__operationingSystemDependentPathSeparators);
4813
+ replacePathSeparatorsToForwardSlashes(targetFileOrDirectoryAbsolutePath__operatingSystemDependentPathSeparators);
4810
4814
  for (const passiveWatcher of FilesMasterWatcher.passiveWatchers) {
4811
4815
  if (passiveWatcher.isRelatedFileAbsolutePath(targetFileAbsolutePath__forwardSlashesPathSeparators)) {
4812
4816
  passiveWatcher.notifyAboutRelatedFileStateChange(targetFileAbsolutePath__forwardSlashesPathSeparators, eventName);
@@ -9141,7 +9145,7 @@ var MarkupProcessingSettings__FromFile__RawValid;
9141
9145
  }
9142
9146
  }
9143
9147
  },
9144
- [markupProcessingPropertiesLocalization.staticPreview.importsFromStaticDataFiles.KEY]: {
9148
+ $importsFromStaticDataFiles: {
9145
9149
  newName: "importsFromStaticDataFiles",
9146
9150
  preValidationModifications: es_extensions_1.nullToUndefined,
9147
9151
  type: Array,
@@ -9149,13 +9153,13 @@ var MarkupProcessingSettings__FromFile__RawValid;
9149
9153
  element: {
9150
9154
  type: Object,
9151
9155
  properties: {
9152
- [markupProcessingPropertiesLocalization.staticPreview.importsFromStaticDataFiles.importedVariableName.KEY]: {
9156
+ $importedVariableName: {
9153
9157
  newName: "importedVariableName",
9154
9158
  type: String,
9155
9159
  required: true,
9156
9160
  minimalCharactersCount: 1
9157
9161
  },
9158
- [markupProcessingPropertiesLocalization.staticPreview.importsFromStaticDataFiles.fileRelativePath.KEY]: {
9162
+ $fileRelativePath: {
9159
9163
  newName: "fileRelativePath",
9160
9164
  type: String,
9161
9165
  required: true,
@@ -9166,6 +9170,7 @@ var MarkupProcessingSettings__FromFile__RawValid;
9166
9170
  }
9167
9171
  }
9168
9172
  },
9173
+ /* ━━━ Linting ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
9169
9174
  $linting: {
9170
9175
  newName: "linting",
9171
9176
  preValidationModifications: es_extensions_1.nullToUndefined,
@@ -9173,6 +9178,7 @@ var MarkupProcessingSettings__FromFile__RawValid;
9173
9178
  required: false,
9174
9179
  properties: lintingSettingsLocalizedPropertiesSpecification
9175
9180
  },
9181
+ /* ━━━ Importing From TypeScript ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
9176
9182
  $importingFromTypeScript: {
9177
9183
  newName: "importingFromTypeScript",
9178
9184
  preValidationModifications: es_extensions_1.nullToUndefined,
@@ -9205,8 +9211,8 @@ var MarkupProcessingSettings__FromFile__RawValid;
9205
9211
  }
9206
9212
  }
9207
9213
  },
9208
- // ━━━ TODO ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
9209
- routing: {
9214
+ $routing: {
9215
+ newName: "routing",
9210
9216
  type: Object,
9211
9217
  required: false,
9212
9218
  preValidationModifications: es_extensions_1.nullToUndefined,
@@ -9239,6 +9245,7 @@ var MarkupProcessingSettings__FromFile__RawValid;
9239
9245
  sourceCodeProcessingSettingsGenericPropertiesLocalization,
9240
9246
  localizedConsumingProjectLocalizedPreDefinedBuildingModes,
9241
9247
  entryPointsGroupBuildingModeIndependentSpecificSettingsLocalizedPropertiesSpecification: {
9248
+ // ━━━ TODO ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
9242
9249
  [markupProcessingPropertiesLocalization.entryPointsGroups.outputFormat.KEY]: {
9243
9250
  newName: "outputFormat",
9244
9251
  type: String,
@@ -9549,7 +9556,6 @@ const MarkupProcessingSharedState_1 = __importDefault(__webpack_require__(/*! @M
9549
9556
  const gulp_1 = __importDefault(__webpack_require__(/*! gulp */ "gulp"));
9550
9557
  const gulp_data_1 = __importDefault(__webpack_require__(/*! gulp-data */ "gulp-data"));
9551
9558
  const gulp_pug_1 = __importDefault(__webpack_require__(/*! gulp-pug */ "gulp-pug"));
9552
- const js_beautify_1 = __importDefault(__webpack_require__(/*! js-beautify */ "js-beautify"));
9553
9559
  /* ─── Third-party Solutions Specialists ──────────────────────────────────────────────────────────────────────────── */
9554
9560
  const PugPreProcessorSpecialist_1 = __importDefault(__webpack_require__(/*! @ThirdPartySolutionsSpecialists/PugPreProcessorSpecialist */ "./ThirdPartySolutionsSpecialists/PugPreProcessorSpecialist.ts"));
9555
9561
  /* ─── Applied Utils ──────────────────────────────────────────────────────────────────────────────────────────────── */
@@ -9565,6 +9571,8 @@ const AccessibilityInspector_1 = __importDefault(__webpack_require__(/*! @Markup
9565
9571
  const ImagesAspectRatioAffixer_1 = __importDefault(__webpack_require__(/*! @MarkupProcessing/Plugins/ImagesAspectRatioAffixer */ "./ProjectBuilding/SourceCodeProcessing/Markup/Plugins/ImagesAspectRatioAffixer.ts"));
9566
9572
  const SpacesNormalizerForCJK_Text_1 = __importDefault(__webpack_require__(/*! @MarkupProcessing/Plugins/SpacesNormalizerForCJK_Text */ "./ProjectBuilding/SourceCodeProcessing/Markup/Plugins/SpacesNormalizerForCJK_Text.ts"));
9567
9573
  const CodeListingPugFilter_1 = __importDefault(__webpack_require__(/*! @MarkupProcessing/PugFilters/CodeListingPugFilter */ "./ProjectBuilding/SourceCodeProcessing/Markup/PugFilters/CodeListingPugFilter.ts"));
9574
+ const js_beautify_1 = __importDefault(__webpack_require__(/*! js-beautify */ "js-beautify"));
9575
+ const htmlnano_1 = __importDefault(__webpack_require__(/*! htmlnano */ "htmlnano"));
9568
9576
  /* ─── General Utils ──────────────────────────────────────────────────────────────────────────────────────────────── */
9569
9577
  const es_extensions_1 = __webpack_require__(/*! @yamato-daiwa/es-extensions */ "@yamato-daiwa/es-extensions");
9570
9578
  const es_extensions_nodejs_1 = __webpack_require__(/*! @yamato-daiwa/es-extensions-nodejs */ "@yamato-daiwa/es-extensions-nodejs");
@@ -9674,18 +9682,14 @@ class MarkupProcessor extends GulpStreamsBasedTaskExecutor_1.default {
9674
9682
  return () => gulp_1.default.
9675
9683
  src(entryPointsSourceFilesAbsolutePaths).
9676
9684
  pipe(this.handleErrorIfItWillOccur()).
9677
- pipe(GulpStreamModifier_1.default.modify({
9678
- onStreamStartedEventCommonHandler: this.replacePlainVinylFileWithMarkupEntryPointVinylFile.bind(this)
9685
+ pipe(GulpStreamModifier_1.default.modifyForSingleVinylFileSubtype({
9686
+ onStreamStartedEventHandler: this.replacePlainVinylFileWithMarkupEntryPointVinylFile.bind(this)
9679
9687
  })).
9680
- pipe(GulpStreamModifier_1.default.modify({
9681
- onStreamStartedEventHandlersForSpecificFileTypes: new Map([
9682
- [MarkupEntryPointVinylFile_1.default, this.injectImportsFromTypeScriptIfAnyToMarkupFile.bind(this)]
9683
- ])
9688
+ pipe(GulpStreamModifier_1.default.modifyForSingleVinylFileSubtype({
9689
+ onStreamStartedEventHandler: this.injectImportsFromTypeScriptIfAnyToMarkupFile.bind(this)
9684
9690
  })).
9685
- pipe(GulpStreamModifier_1.default.modify({
9686
- onStreamStartedEventHandlersForSpecificFileTypes: new Map([
9687
- [MarkupEntryPointVinylFile_1.default, MarkupProcessor.managePageVariations]
9688
- ])
9691
+ pipe(GulpStreamModifier_1.default.modifyForSingleVinylFileSubtype({
9692
+ onStreamStartedEventHandler: MarkupProcessor.managePageVariations
9689
9693
  })).
9690
9694
  pipe(this.logProcessedFilesIfMust()).
9691
9695
  pipe((0, gulp_data_1.default)((vinylFile) => ({
@@ -9710,15 +9714,11 @@ class MarkupProcessor extends GulpStreamsBasedTaskExecutor_1.default {
9710
9714
  "code_listing--yda": CodeListingPugFilter_1.default.apply
9711
9715
  }
9712
9716
  })).
9713
- pipe(GulpStreamModifier_1.default.modify({
9714
- onStreamStartedEventHandlersForSpecificFileTypes: new Map([
9715
- [MarkupEntryPointVinylFile_1.default, MarkupProcessor.formatOrMinifyContentIfMust]
9716
- ])
9717
+ pipe(GulpStreamModifier_1.default.modifyForSingleVinylFileSubtype({
9718
+ onStreamStartedEventHandler: MarkupProcessor.formatOrMinifyContentIfMust
9717
9719
  })).
9718
- pipe(GulpStreamModifier_1.default.modify({
9719
- onStreamStartedEventHandlersForSpecificFileTypes: new Map([
9720
- [MarkupEntryPointVinylFile_1.default, this.onOutputHTML_FileReady.bind(this)]
9721
- ])
9720
+ pipe(GulpStreamModifier_1.default.modifyForSingleVinylFileSubtype({
9721
+ onStreamStartedEventHandler: this.onOutputHTML_FileReady.bind(this)
9722
9722
  })).
9723
9723
  pipe(gulp_1.default.dest((targetFile) => MarkupEntryPointVinylFile_1.default.getOutputDirectoryAbsolutePathOfExpectedToBeSelfInstance(targetFile))).
9724
9724
  on("end", this.onStreamEnded.bind(this));
@@ -9819,12 +9819,13 @@ class MarkupProcessor extends GulpStreamsBasedTaskExecutor_1.default {
9819
9819
  }
9820
9820
  static async formatOrMinifyContentIfMust(markupVinylFile) {
9821
9821
  if (markupVinylFile.actualEntryPointsGroupSettings.outputCodeFormatting.mustExecute) {
9822
- /* [ Theory ]
9823
- * + `indent_with_tabs` overrides `indent_size` and `indent_char` so not required.
9824
- * */
9825
9822
  markupVinylFile.setContents(MarkupProcessor.formatHTML_Code(markupVinylFile));
9826
9823
  return Promise.resolve(GulpStreamModifier_1.default.CompletionSignals.PASSING_ON);
9827
9824
  }
9825
+ if (markupVinylFile.actualEntryPointsGroupSettings.outputCodeMinifying.mustExecute) {
9826
+ markupVinylFile.setContents(await MarkupProcessor.minifyHTML_Code(markupVinylFile));
9827
+ return Promise.resolve(GulpStreamModifier_1.default.CompletionSignals.PASSING_ON);
9828
+ }
9828
9829
  return Promise.resolve(GulpStreamModifier_1.default.CompletionSignals.PASSING_ON);
9829
9830
  }
9830
9831
  /* eslint-disable @typescript-eslint/member-ordering --
@@ -9935,6 +9936,9 @@ class MarkupProcessor extends GulpStreamsBasedTaskExecutor_1.default {
9935
9936
  /* ━━━ Helpers ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
9936
9937
  static formatHTML_Code(markupVinylFile) {
9937
9938
  const { outputCodeFormatting: outputCodeFormattingSettings } = markupVinylFile.actualEntryPointsGroupSettings;
9939
+ /* [ Theory ]
9940
+ * + `indent_with_tabs` overrides `indent_size` and `indent_char` so not required.
9941
+ * */
9938
9942
  return js_beautify_1.default.html(markupVinylFile.stringifiedContents, {
9939
9943
  ...outputCodeFormattingSettings.indentationString.includes(es_extensions_1.SpaceCharacters.regularSpace) ?
9940
9944
  { indent_size: (0, es_extensions_1.splitString)(outputCodeFormattingSettings.indentationString, "").length } : null,
@@ -9944,6 +9948,19 @@ class MarkupProcessor extends GulpStreamsBasedTaskExecutor_1.default {
9944
9948
  indent_body_inner_html: outputCodeFormattingSettings.mustIndentHeadAndBodyTags
9945
9949
  });
9946
9950
  }
9951
+ static async minifyHTML_Code(markupVinylFile) {
9952
+ const { outputCodeMinifying: outputCodeFormattingSettings } = markupVinylFile.actualEntryPointsGroupSettings;
9953
+ return (await htmlnano_1.default.process(markupVinylFile.stringifiedContents, {
9954
+ collapseAttributeWhitespace: outputCodeFormattingSettings.attributesExtraWhitespacesCollapsing,
9955
+ deduplicateAttributeValues: outputCodeFormattingSettings.attributesValuesDeduplication,
9956
+ collapseWhitespace: "aggressive",
9957
+ minifyCss: true,
9958
+ minifyJs: true,
9959
+ /* [ Theory ] Could cause the errors like #htmlnano fails to minify the svg:Error: Config should be an object#
9960
+ * on which user can not affect */
9961
+ minifySvg: false
9962
+ })).html;
9963
+ }
9947
9964
  }
9948
9965
  exports["default"] = MarkupProcessor;
9949
9966
 
@@ -10783,11 +10800,85 @@ const node_notifier_1 = __importDefault(__webpack_require__(/*! node-notifier */
10783
10800
  const es_extensions_1 = __webpack_require__(/*! @yamato-daiwa/es-extensions */ "@yamato-daiwa/es-extensions");
10784
10801
  const es_extensions_nodejs_1 = __webpack_require__(/*! @yamato-daiwa/es-extensions-nodejs */ "@yamato-daiwa/es-extensions-nodejs");
10785
10802
  const nanoid_1 = __webpack_require__(/*! nanoid */ "nanoid");
10803
+ const Stopwatch_1 = __importDefault(__webpack_require__(/*! @UtilsIncubator/Stopwatch */ "./UtilsIncubator/Stopwatch.ts"));
10786
10804
  class HTML_Validator {
10787
10805
  /* ━━━ Fields ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
10788
10806
  static selfSingleInstance = null;
10789
10807
  /* ─── Work Variables ───────────────────────────────────────────────────────────────────────────────────────────── */
10790
10808
  queuedFilesMetadata = [];
10809
+ consumingProjectRootDirectoryAbsolutePath;
10810
+ /* ─── Raw Validations Results Specification (Third-party Library Dependent) ────────────────────────────────────── */
10811
+ /** @description
10812
+ * + The NuChecker output could change with new versions. The validation of output objects allows to be notified about
10813
+ * them soon.
10814
+ * + Being defined in the third-parry solution, the following properties could not be renamed to more clear ones during
10815
+ * data reading & parsing.
10816
+ * + The order of properties has been matched with the output of parsed JSON to console. */
10817
+ static validationsResultsSpecification = {
10818
+ nameForLogging: "Nu HTML Checker (v.Nu) Output",
10819
+ subtype: es_extensions_1.RawObjectDataProcessor.ObjectSubtypes.fixedKeyAndValuePairsObject,
10820
+ properties: {
10821
+ messages: {
10822
+ type: Array,
10823
+ required: true,
10824
+ element: {
10825
+ type: Object,
10826
+ properties: {
10827
+ type: {
10828
+ type: String,
10829
+ required: true,
10830
+ allowedAlternatives: ["info", "error", "non-document-error", "network-error"]
10831
+ },
10832
+ url: {
10833
+ type: String,
10834
+ required: true,
10835
+ minimalCharactersCount: 7
10836
+ },
10837
+ lastLine: {
10838
+ type: Number,
10839
+ required: false,
10840
+ numbersSet: es_extensions_1.RawObjectDataProcessor.NumbersSets.naturalNumber
10841
+ },
10842
+ lastColumn: {
10843
+ type: Number,
10844
+ required: false,
10845
+ numbersSet: es_extensions_1.RawObjectDataProcessor.NumbersSets.naturalNumber
10846
+ },
10847
+ firstColumn: {
10848
+ type: Number,
10849
+ required: false,
10850
+ numbersSet: es_extensions_1.RawObjectDataProcessor.NumbersSets.naturalNumber
10851
+ },
10852
+ subType: {
10853
+ type: String,
10854
+ required: false,
10855
+ allowedAlternatives: ["warning", "fatal", "io", "schema", "internal"]
10856
+ },
10857
+ message: {
10858
+ type: String,
10859
+ required: true,
10860
+ minimalCharactersCount: 1
10861
+ },
10862
+ extract: {
10863
+ type: String,
10864
+ required: false
10865
+ },
10866
+ hiliteStart: {
10867
+ type: Number,
10868
+ required: false,
10869
+ /* [ Theory ] The 0 is rare but possible (at least was possible for May 2025). */
10870
+ numbersSet: es_extensions_1.RawObjectDataProcessor.NumbersSets.nonNegativeInteger
10871
+ },
10872
+ hiliteLength: {
10873
+ type: Number,
10874
+ required: false,
10875
+ numbersSet: es_extensions_1.RawObjectDataProcessor.NumbersSets.naturalNumber
10876
+ }
10877
+ }
10878
+ }
10879
+ }
10880
+ }
10881
+ };
10791
10882
  /* ─── Logging ──────────────────────────────────────────────────────────────────────────────────────────────────── */
10792
10883
  logging;
10793
10884
  static DISPLAYING_LINES_COUNT_BEFORE_ISSUE_IN_CODE_LISTING = 2;
@@ -10797,10 +10888,11 @@ class HTML_Validator {
10797
10888
  /* ─── Caching ──────────────────────────────────────────────────────────────────────────────────────────────────── */
10798
10889
  /* [ Theory ]
10799
10890
  * Between 2 project buildings, the content of most HTML files could not change (especially since the project has
10800
- * become mature). */
10801
- static CACHED_HTML_VALIDATION_RESULTS_DIRECTORY_NAME = "HTML_Validation";
10802
- CACHED_VALIDATIONS_RESULTS_FILE_PARENT_DIRECTORY_ABSOLUTE_PATH;
10803
- CACHED_VALIDATIONS_RESULTS_FILE_ABSOLUTE_PATH;
10891
+ * become mature). Thanks to checksums, it is possible to detect has page content changed quickly. */
10892
+ static CACHED_VALIDATIONS_RESULTS_FOLDER_NAME = "HTML_Validation";
10893
+ static CACHED_VALIDATIONS_RESULTS_FILE_CONSTANT_NAME_PART = "HTML_Validation";
10894
+ absolutePathOfParentDirectoryOfCachedValidationsResultsFile;
10895
+ absolutePathOfCachedValidationsResultsFile;
10804
10896
  cachedValidationsResults;
10805
10897
  static cachedValidationsResultsFileContentSpecification = {
10806
10898
  nameForLogging: "HTML_Validator.CachedValidationResultsFileContentSpecification",
@@ -10871,81 +10963,10 @@ class HTML_Validator {
10871
10963
  }
10872
10964
  }
10873
10965
  };
10874
- /* ─── Raw Validations Results Specification (Third-party Library Dependent) ────────────────────────────────────── */
10875
- /** @description
10876
- * ● The NuChecker output could change with new versions. The validation allows to be notified about them soon.
10877
- * ● Being defined in third-parry solution, the following properties could not be renamed to more clear ones during
10878
- * data reading.
10879
- * ● The order of properties has been matched with output of parsed JSON to console. */
10880
- static validationsResultsSpecification = {
10881
- nameForLogging: "Nu HTML Checker (v.Nu) Output",
10882
- subtype: es_extensions_1.RawObjectDataProcessor.ObjectSubtypes.fixedKeyAndValuePairsObject,
10883
- properties: {
10884
- messages: {
10885
- type: Array,
10886
- required: true,
10887
- element: {
10888
- type: Object,
10889
- properties: {
10890
- type: {
10891
- type: String,
10892
- required: true,
10893
- allowedAlternatives: ["info", "error", "non-document-error", "network-error"]
10894
- },
10895
- url: {
10896
- type: String,
10897
- required: true,
10898
- minimalCharactersCount: 7
10899
- },
10900
- lastLine: {
10901
- type: Number,
10902
- required: false,
10903
- numbersSet: es_extensions_1.RawObjectDataProcessor.NumbersSets.naturalNumber
10904
- },
10905
- lastColumn: {
10906
- type: Number,
10907
- required: false,
10908
- numbersSet: es_extensions_1.RawObjectDataProcessor.NumbersSets.naturalNumber
10909
- },
10910
- firstColumn: {
10911
- type: Number,
10912
- required: false,
10913
- numbersSet: es_extensions_1.RawObjectDataProcessor.NumbersSets.naturalNumber
10914
- },
10915
- subType: {
10916
- type: String,
10917
- required: false,
10918
- allowedAlternatives: ["warning", "fatal", "io", "schema", "internal"]
10919
- },
10920
- message: {
10921
- type: String,
10922
- required: true,
10923
- minimalCharactersCount: 1
10924
- },
10925
- extract: {
10926
- type: String,
10927
- required: false
10928
- },
10929
- hiliteStart: {
10930
- type: Number,
10931
- required: false,
10932
- numbersSet: es_extensions_1.RawObjectDataProcessor.NumbersSets.naturalNumber
10933
- },
10934
- hiliteLength: {
10935
- type: Number,
10936
- required: false,
10937
- numbersSet: es_extensions_1.RawObjectDataProcessor.NumbersSets.naturalNumber
10938
- }
10939
- }
10940
- }
10941
- }
10942
- }
10943
- };
10944
10966
  /* ─── Temporary Files ──────────────────────────────────────────────────────────────────────────────────────────── */
10945
10967
  static TEMPORARY_FORMATTED_HTML_FILES_FOLDER_NAME = "HTML_Validation";
10946
- TEMPORARY_FORMATTED_HTML_FILES_DIRECTORY_ABSOLUTE_PATH;
10947
- TEMPORARY_FORMATTED_HTML_FILES_DIRECTORY_PATH_RELATIVE_TO_CONSUMING_PROJECT_ROOT;
10948
- CONSUMING_PROJECT_ROOT_DIRECTORY_ABSOLUTE_PATH;
10968
+ absolutePathOfParentDirectoryOfTemporaryFormattedHTML_Files;
10969
+ parenRelativeToConsumingProjectRootOfParentDirectoryOfTemporaryFormattedHTML_Files;
10949
10970
  /* ─── Localization ─────────────────────────────────────────────────────────────────────────────────────────────── */
10950
10971
  static localization = HTML_ValidatorLocalization_english_1.default;
10951
10972
  /* ━━━ Public Static Methods (Facade) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
@@ -10964,6 +10985,9 @@ class HTML_Validator {
10964
10985
  }
10965
10986
  HTML_Validator.selfSingleInstance = new HTML_Validator(requirements);
10966
10987
  }
10988
+ /** @description
10989
+ * Separate launching of `vnu-jar` per each file may cause the performance impact thus more efficient is to accumulate
10990
+ * the files and validate them at once. */
10967
10991
  static enqueueFileForValidation(targetFileMetadata) {
10968
10992
  const selfSingleInstance = HTML_Validator.
10969
10993
  getExpectedToBeInitializedSelfSingleInstance();
@@ -10977,13 +11001,16 @@ class HTML_Validator {
10977
11001
  }
10978
11002
  /* ━━━ Constructor ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
10979
11003
  constructor({ temporaryFileDirectoryAbsolutePath, projectBuildingMasterConfigRepresentative, logging }) {
10980
- this.CACHED_VALIDATIONS_RESULTS_FILE_PARENT_DIRECTORY_ABSOLUTE_PATH = es_extensions_nodejs_1.ImprovedPath.joinPathSegments([
11004
+ this.consumingProjectRootDirectoryAbsolutePath = projectBuildingMasterConfigRepresentative.
11005
+ consumingProjectRootDirectoryAbsolutePath;
11006
+ /* ─── Caching ────────────────────────────────────────────────────────────────────────────────────────────────── */
11007
+ this.absolutePathOfParentDirectoryOfCachedValidationsResultsFile = es_extensions_nodejs_1.ImprovedPath.joinPathSegments([
10981
11008
  DotYDA_DirectoryManager_1.default.OPTIMIZATION_FILES_DIRECTORY_ABSOLUTE_PATH,
10982
- HTML_Validator.CACHED_HTML_VALIDATION_RESULTS_DIRECTORY_NAME
11009
+ HTML_Validator.CACHED_VALIDATIONS_RESULTS_FOLDER_NAME
10983
11010
  ], { alwaysForwardSlashSeparators: true });
10984
- this.CACHED_VALIDATIONS_RESULTS_FILE_ABSOLUTE_PATH = HTML_Validator.
10985
- computeActualCachedValidationsResultsFileParentDirectoryAbsolutePath({
10986
- parentDirectoryAbsolutePath: this.CACHED_VALIDATIONS_RESULTS_FILE_PARENT_DIRECTORY_ABSOLUTE_PATH,
11011
+ this.absolutePathOfCachedValidationsResultsFile = HTML_Validator.
11012
+ computeAbsolutePathOfCachedValidationsResultsFileActualForCurrentProjectBuildingMode({
11013
+ parentDirectoryAbsolutePath: this.absolutePathOfParentDirectoryOfCachedValidationsResultsFile,
10987
11014
  projectBuildingSelectiveExecutionID: projectBuildingMasterConfigRepresentative.selectiveExecutionID,
10988
11015
  consumingProjectBuildingMode: projectBuildingMasterConfigRepresentative.consumingProjectBuildingMode
10989
11016
  });
@@ -10991,18 +11018,18 @@ class HTML_Validator {
10991
11018
  try {
10992
11019
  cachedValidationsResults = es_extensions_nodejs_1.ObjectDataFilesProcessor.
10993
11020
  processFile({
10994
- filePath: this.CACHED_VALIDATIONS_RESULTS_FILE_ABSOLUTE_PATH,
11021
+ filePath: this.absolutePathOfCachedValidationsResultsFile,
10995
11022
  validDataSpecification: HTML_Validator.cachedValidationsResultsFileContentSpecification,
10996
11023
  synchronously: true
10997
11024
  });
10998
11025
  }
10999
11026
  catch (error) {
11000
11027
  if (!(error instanceof es_extensions_nodejs_1.FileNotFoundError)) {
11001
- // TODO ① Extract textings
11002
11028
  es_extensions_1.Logger.logError({
11003
11029
  errorType: "CachedDataRetrievingFailure",
11004
- title: "Cached data retrieving failure",
11005
- description: `Unable to read the existing cache file "${this.CACHED_VALIDATIONS_RESULTS_FILE_ABSOLUTE_PATH}".`,
11030
+ ...HTML_Validator.localization.cachedPreviousValidationsResultsDataRetrievingFailure({
11031
+ cachedValidationsResultsFileAbsolutePath: this.absolutePathOfCachedValidationsResultsFile
11032
+ }),
11006
11033
  occurrenceLocation: "HTML_Validator.retrieveCachedPastValidationsResultsFromFileIfItExists" +
11007
11034
  "(cachedValidationsResultsFileAbsolutePath)",
11008
11035
  caughtError: error,
@@ -11011,79 +11038,85 @@ class HTML_Validator {
11011
11038
  }
11012
11039
  }
11013
11040
  this.cachedValidationsResults = new Map(Object.entries(cachedValidationsResults ?? {}));
11014
- this.TEMPORARY_FORMATTED_HTML_FILES_DIRECTORY_ABSOLUTE_PATH = es_extensions_nodejs_1.ImprovedPath.joinPathSegments([
11041
+ /* ─── Logging ──────────────────────────────────────────────────────────────────────────────────────────────────── */
11042
+ this.logging = logging;
11043
+ /* ─── Temporary Files ────────────────────────────────────────────────────────────────────────────────────────── */
11044
+ this.absolutePathOfParentDirectoryOfTemporaryFormattedHTML_Files = es_extensions_nodejs_1.ImprovedPath.joinPathSegments([
11015
11045
  temporaryFileDirectoryAbsolutePath,
11016
11046
  HTML_Validator.TEMPORARY_FORMATTED_HTML_FILES_FOLDER_NAME
11017
11047
  ]);
11018
- this.TEMPORARY_FORMATTED_HTML_FILES_DIRECTORY_PATH_RELATIVE_TO_CONSUMING_PROJECT_ROOT = es_extensions_nodejs_1.ImprovedPath.
11048
+ this.parenRelativeToConsumingProjectRootOfParentDirectoryOfTemporaryFormattedHTML_Files = es_extensions_nodejs_1.ImprovedPath.
11019
11049
  computeRelativePath({
11020
11050
  basePath: projectBuildingMasterConfigRepresentative.consumingProjectRootDirectoryAbsolutePath,
11021
- comparedPath: this.TEMPORARY_FORMATTED_HTML_FILES_DIRECTORY_ABSOLUTE_PATH,
11051
+ comparedPath: this.absolutePathOfParentDirectoryOfTemporaryFormattedHTML_Files,
11022
11052
  alwaysForwardSlashSeparators: true
11023
11053
  });
11024
- this.CONSUMING_PROJECT_ROOT_DIRECTORY_ABSOLUTE_PATH =
11025
- projectBuildingMasterConfigRepresentative.consumingProjectRootDirectoryAbsolutePath;
11026
- this.logging = logging;
11027
11054
  }
11028
11055
  /* ━━━ Private Methods ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
11029
11056
  /* ─── Validation ───────────────────────────────────────────────────────────────────────────────────────────────── */
11030
11057
  async validateQueuedFilesButReportAll() {
11058
+ // ━━━ TODO Есть вопросы ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
11059
+ // TODO Почему это не соответствует типу NormalizedValidationsResults? И почему семантически не понятен ключ карты?
11031
11060
  const validationsResults = (0, es_extensions_1.createMapBasedOnOtherMap)(this.cachedValidationsResults, (filePathRelativeToConsumingProjectRootDirectory__forwardSlashesSeparatorsOnly, { issues }) => [filePathRelativeToConsumingProjectRootDirectory__forwardSlashesSeparatorsOnly, issues]);
11032
11061
  /* [ Approach ]
11033
- * To get readable logs with code fragment, the original output HTML files could not be used because they could
11034
- * contain the minified HTML code.
11062
+ * To get readable logs with code fragment, the original output HTML files could not be used because they possibly
11063
+ * contains the minified HTML code.
11035
11064
  * The saving of temporary HTML files with formatted HTML code could be the solution.
11036
11065
  * Anyway the Nu HTML Checker does not work with HTML strings — it accepts only relative paths of file saved to drive. */
11037
11066
  const formattedTemporaryHTML_FilesPathsRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly = [];
11038
- /* [ Theory ] How to understand for which file Nu HTML Checker issued the message?
11039
- * By the output which will include the URI like
11067
+ /* [ Theory ]
11068
+ * Nu HTML Checker can inspect the multiple files at once while returns the single array with issues data for all files.
11069
+ * How to understand for which file Nu HTML Checker emitted the specific issue?
11070
+ * The data of each issue will include the URI like
11040
11071
  * "file:/D:/IntelliJ%20IDEA/SampleProject/.yda/Temporary/HTML_Validation/4834cf5c-253f-4147-b00c-b8ca53922315.html"
11041
11072
  * It is the encoded (`encodeURI()` for ECMAScript) absolute path of temporary formatted HTML file with "file:/" prefix. */
11042
11073
  const temporaryFormattedHTML_FilesEncodedURIsAndOriginalHTML_FilesRelativePathsCorrespondence = new Map();
11043
11074
  /* [ Theory ]
11044
11075
  * Nu HTML Checker will not output the data for valid files while their paths is still required for summary. */
11045
11076
  const relativeToConsumingProjectRootPathsOfOriginalHTML_FilesWillBeValidated__forwardSlashesSeparatorsOnly = new Set();
11046
- const cachedHTML_CodeSplitToLinesByFilesRelativePaths = new Map();
11047
- const MD5_HashesOfHTML_ContentBySourceFilesRelativePaths = new Map();
11077
+ const cachedHTML_CodeSplitToLinesByFilesRelativePathsOfOriginalHTML_Files = new Map();
11078
+ const MD5_HashesOfHTML_ContentBySourceFilesRelativePathsOfOriginalHTML_Files = new Map();
11048
11079
  for (const { pathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly: originalHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly, formattedHTML_Content, HTML_ContentMD5_Hash } of this.queuedFilesMetadata) {
11080
+ // TODO Почему это надо сделать даже если файл валидирован не будет?
11049
11081
  relativeToConsumingProjectRootPathsOfOriginalHTML_FilesWillBeValidated__forwardSlashesSeparatorsOnly.add(originalHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly);
11082
+ // TODO Почему это надо сделать даже если файл валидирован не будет?
11083
+ MD5_HashesOfHTML_ContentBySourceFilesRelativePathsOfOriginalHTML_Files.set(originalHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly, HTML_ContentMD5_Hash);
11050
11084
  const cachedValidationsResultsForCurrentFile = this.cachedValidationsResults.get(originalHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly);
11051
- MD5_HashesOfHTML_ContentBySourceFilesRelativePaths.set(originalHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly, HTML_ContentMD5_Hash);
11052
11085
  if (cachedValidationsResultsForCurrentFile?.contentMD5Checksum === HTML_ContentMD5_Hash) {
11053
11086
  continue;
11054
11087
  }
11055
11088
  validationsResults.delete(originalHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly);
11056
- cachedHTML_CodeSplitToLinesByFilesRelativePaths.set(originalHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly, (0, es_extensions_1.splitString)(formattedHTML_Content, "\n"));
11057
- const temporaryHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly = es_extensions_nodejs_1.ImprovedPath.joinPathSegments([
11058
- this.TEMPORARY_FORMATTED_HTML_FILES_DIRECTORY_PATH_RELATIVE_TO_CONSUMING_PROJECT_ROOT,
11089
+ cachedHTML_CodeSplitToLinesByFilesRelativePathsOfOriginalHTML_Files.set(originalHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly, (0, es_extensions_1.splitString)(formattedHTML_Content, "\n"));
11090
+ const formattedTemporaryHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly = es_extensions_nodejs_1.ImprovedPath.joinPathSegments([
11091
+ this.parenRelativeToConsumingProjectRootOfParentDirectoryOfTemporaryFormattedHTML_Files,
11059
11092
  `${(0, nanoid_1.nanoid)()}.html`
11060
11093
  ], { alwaysForwardSlashSeparators: true });
11061
- formattedTemporaryHTML_FilesPathsRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly.push(temporaryHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly);
11062
- const temporaryHTML_FileAbsolutePath__forwardSlashesSeparatorsOnly = es_extensions_nodejs_1.ImprovedPath.joinPathSegments([
11063
- this.CONSUMING_PROJECT_ROOT_DIRECTORY_ABSOLUTE_PATH,
11064
- temporaryHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly
11094
+ formattedTemporaryHTML_FilesPathsRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly.push(formattedTemporaryHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly);
11095
+ const formattedTemporaryHTML_FileAbsolutePath__forwardSlashesSeparatorsOnly = es_extensions_nodejs_1.ImprovedPath.joinPathSegments([
11096
+ this.consumingProjectRootDirectoryAbsolutePath,
11097
+ formattedTemporaryHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly
11065
11098
  ], { alwaysForwardSlashSeparators: true });
11066
- temporaryFormattedHTML_FilesEncodedURIsAndOriginalHTML_FilesRelativePathsCorrespondence.set(`file:/${encodeURI(temporaryHTML_FileAbsolutePath__forwardSlashesSeparatorsOnly)}`, originalHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly);
11099
+ temporaryFormattedHTML_FilesEncodedURIsAndOriginalHTML_FilesRelativePathsCorrespondence.set(`file:/${encodeURI(formattedTemporaryHTML_FileAbsolutePath__forwardSlashesSeparatorsOnly)}`, originalHTML_FilePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly);
11067
11100
  es_extensions_nodejs_1.ImprovedFileSystem.writeFileToPossiblyNotExistingDirectory({
11068
- filePath: temporaryHTML_FileAbsolutePath__forwardSlashesSeparatorsOnly,
11101
+ filePath: formattedTemporaryHTML_FileAbsolutePath__forwardSlashesSeparatorsOnly,
11069
11102
  content: formattedHTML_Content,
11070
11103
  synchronously: true
11071
11104
  });
11072
11105
  }
11073
11106
  if (this.logging.validationStart) {
11074
- es_extensions_1.Logger.logInfo(HTML_Validator.localization.generateValidationStartedInfoLog({
11075
- targetFileRelativePaths: this.queuedFilesMetadata.map((metadataOfQueuedFile) => metadataOfQueuedFile.pathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly)
11076
- }));
11107
+ es_extensions_1.Logger.logInfo(HTML_Validator.localization.validationStartedInfoLog);
11077
11108
  }
11078
- /* [ Theory ] If pass no files to Nu HTML Checker, it will fail with error. */
11109
+ const validationTimeMeasuringStopwatch = new Stopwatch_1.default().startOrRestart();
11110
+ /* [ Theory ] If pass no files to Nu HTML Checker, it will fail with the error. */
11079
11111
  if (formattedTemporaryHTML_FilesPathsRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly.length === 0) {
11080
11112
  HTML_Validator.reportValidationsResults(validationsResults);
11081
11113
  return;
11082
11114
  }
11083
11115
  const rawValidationsResults = await HTML_Validator.getRawValidationsResultsFromNuHTML_Checker(formattedTemporaryHTML_FilesPathsRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly);
11116
+ // ━━━ TODO ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
11084
11117
  // TODO ④ Improve Method
11085
11118
  es_extensions_nodejs_1.ImprovedFileSystem.removeDirectoryWithFiles({
11086
- targetPath: this.TEMPORARY_FORMATTED_HTML_FILES_DIRECTORY_ABSOLUTE_PATH,
11119
+ targetPath: this.absolutePathOfParentDirectoryOfTemporaryFormattedHTML_Files,
11087
11120
  mustThrowErrorIfOneOrMoreFilesCouldNotBeDeleted: false
11088
11121
  });
11089
11122
  const rawValidationsResultsInspectionOutput = es_extensions_1.RawObjectDataProcessor.process(rawValidationsResults, HTML_Validator.validationsResultsSpecification);
@@ -11108,21 +11141,22 @@ class HTML_Validator {
11108
11141
  const issuesOfCurrentFile = validationsResults.get(filePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly);
11109
11142
  if ((0, es_extensions_1.isUndefined)(issuesOfCurrentFile)) {
11110
11143
  validationsResults.set(filePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly, [
11111
- HTML_Validator.normalizeRawValidationIssue(rawValidationIssue, (0, es_extensions_1.getExpectedToBeNonUndefinedMapValue)(cachedHTML_CodeSplitToLinesByFilesRelativePaths, filePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly))
11144
+ HTML_Validator.normalizeRawValidationIssue(rawValidationIssue, (0, es_extensions_1.getExpectedToBeNonUndefinedMapValue)(cachedHTML_CodeSplitToLinesByFilesRelativePathsOfOriginalHTML_Files, filePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly))
11112
11145
  ]);
11113
11146
  continue;
11114
11147
  }
11115
- issuesOfCurrentFile.push(HTML_Validator.normalizeRawValidationIssue(rawValidationIssue, (0, es_extensions_1.getExpectedToBeNonUndefinedMapValue)(cachedHTML_CodeSplitToLinesByFilesRelativePaths, filePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly)));
11148
+ issuesOfCurrentFile.push(HTML_Validator.normalizeRawValidationIssue(rawValidationIssue, (0, es_extensions_1.getExpectedToBeNonUndefinedMapValue)(cachedHTML_CodeSplitToLinesByFilesRelativePathsOfOriginalHTML_Files, filePathRelativeToConsumingProjectRoot__forwardSlashesSeparatorsOnly)));
11116
11149
  }
11117
11150
  for (const relativeToConsumingProjectRootPathOfOriginalValidHTML_Files__forwardSlashesSeparatorsOnly of relativeToConsumingProjectRootPathsOfOriginalHTML_FilesWillBeValidated__forwardSlashesSeparatorsOnly) {
11118
11151
  validationsResults.set(relativeToConsumingProjectRootPathOfOriginalValidHTML_Files__forwardSlashesSeparatorsOnly, []);
11119
11152
  }
11153
+ validationTimeMeasuringStopwatch.stop();
11120
11154
  HTML_Validator.reportValidationsResults(validationsResults);
11121
11155
  this.cachedValidationsResults = (0, es_extensions_1.createMapBasedOnOtherMap)(validationsResults, (filePathRelativeToConsumingProjectRootDirectory__forwardSlashesSeparatorsOnly, issues) => [
11122
11156
  filePathRelativeToConsumingProjectRootDirectory__forwardSlashesSeparatorsOnly,
11123
11157
  {
11124
11158
  issues,
11125
- contentMD5Checksum: (0, es_extensions_1.getExpectedToBeNonUndefinedMapValue)(MD5_HashesOfHTML_ContentBySourceFilesRelativePaths, filePathRelativeToConsumingProjectRootDirectory__forwardSlashesSeparatorsOnly)
11159
+ contentMD5Checksum: (0, es_extensions_1.getExpectedToBeNonUndefinedMapValue)(MD5_HashesOfHTML_ContentBySourceFilesRelativePathsOfOriginalHTML_Files, filePathRelativeToConsumingProjectRootDirectory__forwardSlashesSeparatorsOnly)
11126
11160
  }
11127
11161
  ]);
11128
11162
  this.writeCacheToFile();
@@ -11142,7 +11176,7 @@ class HTML_Validator {
11142
11176
  * + It is possible to output the validation error to `stdout` instead if to specify the respective option,
11143
11177
  * but the first parameter will be non-null anyway.
11144
11178
  * + The reaction to non-existing file is completely same as to valid file: the stringified object
11145
- * `{"messages":[]}` will be returned. */
11179
+ * `{"messages":[]}` will be returned. */
11146
11180
  const stringifiedOutput = Buffer.isBuffer(stderr) ? stderr.toString("utf8") : stderr;
11147
11181
  try {
11148
11182
  resolve(JSON.parse(stringifiedOutput));
@@ -11193,7 +11227,6 @@ class HTML_Validator {
11193
11227
  mustThrowErrorIfSpecifiedCharactersNumbersIsOutOfRange: false
11194
11228
  }) :
11195
11229
  "");
11196
- // ━━━ TODO ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
11197
11230
  const highlightedCodeFragment = (0, es_extensions_1.cropString)({
11198
11231
  targetString: actualLineOfCode,
11199
11232
  startingCharacterNumber__numerationFrom1: numberOfStartingColumnOfHighlightedCodeFragment__numerationFrom1,
@@ -11338,18 +11371,16 @@ class HTML_Validator {
11338
11371
  }
11339
11372
  return formattedIssues.join("\n\n");
11340
11373
  }
11341
- /* ─── Cache file ───────────────────────────────────────────────────────────────────────────────────────────────── */
11342
- static computeActualCachedValidationsResultsFileParentDirectoryAbsolutePath({ parentDirectoryAbsolutePath, projectBuildingSelectiveExecutionID, consumingProjectBuildingMode }) {
11374
+ /* ─── Cached Validations Results File ──────────────────────────────────────────────────────────────────────────── */
11375
+ static computeAbsolutePathOfCachedValidationsResultsFileActualForCurrentProjectBuildingMode({ parentDirectoryAbsolutePath, projectBuildingSelectiveExecutionID, consumingProjectBuildingMode }) {
11343
11376
  return es_extensions_nodejs_1.ImprovedPath.joinPathSegments([
11344
11377
  parentDirectoryAbsolutePath,
11345
- "HTML_Validation." +
11346
- (0, es_extensions_1.insertSubstring)(projectBuildingSelectiveExecutionID, { modifier: (specifiedProjectBuildingSelectiveExecutionID) => `${specifiedProjectBuildingSelectiveExecutionID}.` }) +
11347
- `${(0, es_extensions_1.toLowerCamelCase)(consumingProjectBuildingMode)}.json`
11378
+ `${HTML_Validator.CACHED_VALIDATIONS_RESULTS_FILE_CONSTANT_NAME_PART}.${(0, es_extensions_1.insertSubstring)(projectBuildingSelectiveExecutionID, { modifier: (specifiedProjectBuildingSelectiveExecutionID) => `${specifiedProjectBuildingSelectiveExecutionID}.` })}${(0, es_extensions_1.toLowerCamelCase)(consumingProjectBuildingMode)}.json`
11348
11379
  ]);
11349
11380
  }
11350
11381
  writeCacheToFile() {
11351
11382
  es_extensions_nodejs_1.ImprovedFileSystem.createDirectory({
11352
- targetPath: this.CACHED_VALIDATIONS_RESULTS_FILE_PARENT_DIRECTORY_ABSOLUTE_PATH,
11383
+ targetPath: this.absolutePathOfParentDirectoryOfCachedValidationsResultsFile,
11353
11384
  mustThrowErrorIfTargetDirectoryExists: false,
11354
11385
  synchronously: true
11355
11386
  });
@@ -11358,7 +11389,7 @@ class HTML_Validator {
11358
11389
  accumulatingValue[filePathRelativeToConsumingProjectRootDirectory] = cachedValidationRawResultsForSpecificFile;
11359
11390
  return accumulatingValue;
11360
11391
  }, {});
11361
- fs_1.default.writeFileSync(this.CACHED_VALIDATIONS_RESULTS_FILE_ABSOLUTE_PATH, JSON.stringify(cachedValidationsResultsFileContent, null, 2));
11392
+ fs_1.default.writeFileSync(this.absolutePathOfCachedValidationsResultsFile, JSON.stringify(cachedValidationsResultsFileContent, null, 2));
11362
11393
  }
11363
11394
  /* ━━━ Routines ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
11364
11395
  static getExpectedToBeInitializedSelfSingleInstance() {
@@ -11410,13 +11441,16 @@ exports["default"] = HTML_Validator;
11410
11441
 
11411
11442
  Object.defineProperty(exports, "__esModule", ({ value: true }));
11412
11443
  const HTML_ValidatorLocalization__english = {
11413
- generateValidationStartedInfoLog: ({ targetFileRelativePaths }) => ({
11414
- title: "HTML code validation started",
11415
- description: "Begin the validation of the HTML code for the following files.\n" +
11416
- targetFileRelativePaths.
11417
- map((targetFileRelativePath) => `● ${targetFileRelativePath}`).
11418
- join("\n")
11444
+ cachedPreviousValidationsResultsDataRetrievingFailure: ({ cachedValidationsResultsFileAbsolutePath }) => ({
11445
+ title: "Cached Previous Validations Data Retrieving Failure",
11446
+ description: "Unable to read and/or parse the existing HTML validation cache file " +
11447
+ `"${cachedValidationsResultsFileAbsolutePath}".`
11419
11448
  }),
11449
+ validationStartedInfoLog: {
11450
+ title: "HTML Code Validation Started",
11451
+ description: "Validating the output HTML files..."
11452
+ },
11453
+ // ━━━ TODO ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
11420
11454
  issuesFoundToastNotification: {
11421
11455
  title: "HTML validation, issue(s) found",
11422
11456
  message: "W3C rules violations and / or recommendations neglect detected. Check the console for the details."
@@ -15199,6 +15233,66 @@ const vinyl_1 = __importDefault(__webpack_require__(/*! vinyl */ "vinyl"));
15199
15233
  /* --- General utils ------------------------------------------------------------------------------------------------ */
15200
15234
  const es_extensions_1 = __webpack_require__(/*! @yamato-daiwa/es-extensions */ "@yamato-daiwa/es-extensions");
15201
15235
  class GulpStreamModifier {
15236
+ static modifyForSingleVinylFileSubtype({ onStreamStartedEventHandler, onStreamEndedEventHandler }) {
15237
+ return new stream_1.default.Transform({
15238
+ objectMode: true,
15239
+ /* eslint-disable-next-line max-params -- The limitation of "Stream" native library */
15240
+ transform(chunk, _encoding, callback) {
15241
+ if (!vinyl_1.default.isVinyl(chunk)) {
15242
+ es_extensions_1.Logger.throwErrorAndLog({
15243
+ errorInstance: new es_extensions_1.UnexpectedEventError(es_extensions_1.PoliteErrorsMessagesBuilder.buildMessage({
15244
+ technicalDetails: "The \"chunk\" parameter is not an instance of Vinyl file",
15245
+ politeExplanation: "According official TypeScript types definitions, the second parameter of native " +
15246
+ "\"stream.TransformOptions.transform\" method has \"any\" type. Using it with Gulp, we are expected " +
15247
+ "that \"chunk\" could be only Vinyl file instances and during tests is was such as. However, this " +
15248
+ "time, it is not the instance of Vinyl file. We need to investigate it and decide what to do with it."
15249
+ })),
15250
+ title: es_extensions_1.UnexpectedEventError.localization.defaultTitle,
15251
+ occurrenceLocation: "GulpStreamModifier.modifyForSingleVinylFileSubtype(compoundParameter)",
15252
+ additionalData: { chunk }
15253
+ });
15254
+ }
15255
+ const addNewFilesToStream = (newFiles) => {
15256
+ for (const newFile of Array.isArray(newFiles) ? newFiles : [newFiles]) {
15257
+ this.push(newFile);
15258
+ }
15259
+ };
15260
+ const targetFile = chunk;
15261
+ onStreamStartedEventHandler(targetFile, addNewFilesToStream).
15262
+ then((completionSignal) => {
15263
+ switch (completionSignal) {
15264
+ case GulpStreamModifier.CompletionSignals.PASSING_ON: {
15265
+ callback(null, targetFile);
15266
+ break;
15267
+ }
15268
+ case GulpStreamModifier.CompletionSignals.REMOVING_FILE_FROM_STREAM: {
15269
+ callback();
15270
+ break;
15271
+ }
15272
+ }
15273
+ }).
15274
+ /* eslint-disable-next-line @typescript-eslint/use-unknown-in-catch-callback-variable --
15275
+ * `TransformCallback` does not accept the error of `unknown` type. */
15276
+ catch((error) => { callback(error); });
15277
+ },
15278
+ flush(callback) {
15279
+ if ((0, es_extensions_1.isUndefined)(onStreamEndedEventHandler)) {
15280
+ callback();
15281
+ return;
15282
+ }
15283
+ const addNewFilesToStream = (newFiles) => {
15284
+ for (const newFile of Array.isArray(newFiles) ? newFiles : [newFiles]) {
15285
+ this.push(newFile);
15286
+ }
15287
+ };
15288
+ onStreamEndedEventHandler(addNewFilesToStream).
15289
+ then(() => { callback(); }).
15290
+ /* eslint-disable-next-line @typescript-eslint/use-unknown-in-catch-callback-variable --
15291
+ * `TransformCallback` does not accept the error of `unknown` type. */
15292
+ catch((error) => { callback(error); });
15293
+ }
15294
+ });
15295
+ }
15202
15296
  static modify(compoundParameter) {
15203
15297
  return new stream_1.default.Transform({
15204
15298
  objectMode: true,
@@ -15309,7 +15403,7 @@ exports["default"] = GulpStreamModifier;
15309
15403
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
15310
15404
 
15311
15405
 
15312
- /* eslint max-depth: [ warn, 4 ] */
15406
+ /* eslint max-depth: [ warn, 4 ] -- Maybe extracting to methods is possible but it will be too many parameters. */
15313
15407
  var __importDefault = (this && this.__importDefault) || function (mod) {
15314
15408
  return (mod && mod.__esModule) ? mod : { "default": mod };
15315
15409
  };
@@ -15388,7 +15482,7 @@ class SourceCodeSelectiveReprocessingHelper {
15388
15482
  this.TARGET_FILES_TYPE_IN_SINGULAR_FORM = initializationProperties.logging.targetFilesTypeInSingularForm;
15389
15483
  /* [ Theory ] The cached metadata from previous YDA launches could be. */
15390
15484
  this.retrieveCacheFromFileAndApplyIfItExists();
15391
- this.scanFilesHierarchyTreeForEntryPoints(new Set(initializationProperties.initialEntryPointsSourceFilesAbsolutePaths.map((entryPointFileAbsolutePath__potentiallyWithOperationingSystemDependentPathSeparators) => es_extensions_nodejs_1.ImprovedPath.replacePathSeparatorsToForwardSlashes(entryPointFileAbsolutePath__potentiallyWithOperationingSystemDependentPathSeparators))));
15485
+ this.scanFilesHierarchyTreeForEntryPoints(new Set(initializationProperties.initialEntryPointsSourceFilesAbsolutePaths.map((entryPointFileAbsolutePath__potentiallyWithOperatingSystemDependentPathSeparators) => es_extensions_nodejs_1.ImprovedPath.replacePathSeparatorsToForwardSlashes(entryPointFileAbsolutePath__potentiallyWithOperatingSystemDependentPathSeparators))));
15392
15486
  if (initializationProperties.logging.mustEnable) {
15393
15487
  this.logChildrenFilesAndEntryPointsRelationships();
15394
15488
  }
@@ -15488,6 +15582,9 @@ class SourceCodeSelectiveReprocessingHelper {
15488
15582
  comparedPath: entryPointAbsolutePath__forwardSlashSeparators,
15489
15583
  alwaysForwardSlashSeparators: true
15490
15584
  });
15585
+ // console.log("CHECKPOINT 1");
15586
+ // console.log("entryPointPathRelativeToConsumingProjectRootDirectory__forwardSlashSeparators");
15587
+ // console.log(entryPointPathRelativeToConsumingProjectRootDirectory__forwardSlashSeparators);
15491
15588
  let entryPointLastModificationDateTime__ISO8601;
15492
15589
  try {
15493
15590
  entryPointLastModificationDateTime__ISO8601 = fs_1.default.statSync(entryPointAbsolutePath__forwardSlashSeparators).
@@ -15545,19 +15642,20 @@ class SourceCodeSelectiveReprocessingHelper {
15545
15642
  alwaysForwardSlashSeparators: true
15546
15643
  }))
15547
15644
  };
15645
+ // console.debug("CHECKPOINT 2");
15646
+ // console.log("absolutePathsOfExistingDirectChildrenFilesOfCurrentEntryPoint__forwardSlashSeparators");
15647
+ // console.log(absolutePathsOfExistingDirectChildrenFilesOfCurrentEntryPoint__forwardSlashSeparators);
15648
+ // console.log("cachedMetadataOfCurrentEntryPoint");
15649
+ // console.log(cachedMetadataOfCurrentEntryPoint);
15650
+ // debugger;
15548
15651
  this.entryPointsMetadata.set(entryPointPathRelativeToConsumingProjectRootDirectory__forwardSlashSeparators, cachedMetadataOfCurrentEntryPoint);
15549
15652
  }
15550
- es_extensions_1.Logger.logGeneric({
15551
- mustOutputIf: SourceCodeSelectiveReprocessingHelper.DEBUGGING_MODE,
15552
- badge: { customText: "Debug" },
15553
- title: "SourceCodeSelectiveReprocessingHelper, Entry Point Analysis Complete.",
15554
- description: entryPointPathRelativeToConsumingProjectRootDirectory__forwardSlashSeparators,
15555
- additionalData: cachedMetadataOfCurrentEntryPoint
15556
- });
15653
+ const experimentalArrayForInfiniteRecursionPreventing = [entryPointPathRelativeToConsumingProjectRootDirectory__forwardSlashSeparators];
15557
15654
  for (const absolutePathOfDirectExistingChildFileOfCurrentEntryPoint__forwardSlashSeparators of absolutePathsOfExistingDirectChildrenFilesOfCurrentEntryPoint__forwardSlashSeparators) {
15558
15655
  this.updateMetadataForExistingChildFile({
15559
15656
  targetChildFileAbsolutePath__forwardSlashSeparators: absolutePathOfDirectExistingChildFileOfCurrentEntryPoint__forwardSlashSeparators,
15560
- parentEntryPointAbsolutePath__forwardSlashSeparators: entryPointAbsolutePath__forwardSlashSeparators
15657
+ parentEntryPointAbsolutePath__forwardSlashSeparators: entryPointAbsolutePath__forwardSlashSeparators,
15658
+ experimentalArrayForInfiniteRecursionPreventing
15561
15659
  });
15562
15660
  this.absolutePathsOfChildrenFilesWhichHasBeenScannedDuringCurrentPass.
15563
15661
  add(absolutePathOfDirectExistingChildFileOfCurrentEntryPoint__forwardSlashSeparators);
@@ -15719,7 +15817,7 @@ class SourceCodeSelectiveReprocessingHelper {
15719
15817
  }
15720
15818
  return null;
15721
15819
  }
15722
- updateMetadataForExistingChildFile({ targetChildFileAbsolutePath__forwardSlashSeparators, parentEntryPointAbsolutePath__forwardSlashSeparators }) {
15820
+ updateMetadataForExistingChildFile({ targetChildFileAbsolutePath__forwardSlashSeparators, parentEntryPointAbsolutePath__forwardSlashSeparators, experimentalArrayForInfiniteRecursionPreventing }) {
15723
15821
  const targetChildFileRelativePath__forwardSlashSeparators = es_extensions_nodejs_1.ImprovedPath.computeRelativePath({
15724
15822
  basePath: this.CONSUMING_PROJECT_ROOT_DIRECTORY_ABSOLUTE_PATH,
15725
15823
  comparedPath: targetChildFileAbsolutePath__forwardSlashSeparators,
@@ -15735,12 +15833,21 @@ class SourceCodeSelectiveReprocessingHelper {
15735
15833
  absolutePathsOfAffiliatedFilesWhichHasBeenScannedDuringCurrentPass: this.absolutePathsOfChildrenFilesWhichHasBeenScannedDuringCurrentPass
15736
15834
  }
15737
15835
  });
15836
+ // console.log("CHECKPOINT 3");
15837
+ // console.log("targetChildFileRelativePath__forwardSlashSeparators");
15838
+ // console.log(targetChildFileRelativePath__forwardSlashSeparators);
15839
+ // console.log("cachedMetadataOfCurrentChildFile");
15840
+ // console.log(cachedMetadataOfCurrentChildFile);
15841
+ // console.log("absolutePathsOfChildrenFilesWhichHasBeenScannedDuringCurrentPass");
15842
+ // console.log(this.absolutePathsOfChildrenFilesWhichHasBeenScannedDuringCurrentPass);
15843
+ // debugger;
15738
15844
  /* [ Approach ] If the child file has been scanned it must be in the `childrenFilesMetadata` however for the
15739
15845
  * TypeScript type checking the non-undefined check of "cachedMetadataOfCurrentAffiliatedFile" additionally
15740
15846
  * required. */
15741
15847
  if (this.absolutePathsOfChildrenFilesWhichHasBeenScannedDuringCurrentPass.
15742
15848
  has(targetChildFileRelativePath__forwardSlashSeparators) &&
15743
15849
  (0, es_extensions_1.isNotUndefined)(cachedMetadataOfCurrentChildFile)) {
15850
+ // console.log("CHECKPOINT 4 - A");
15744
15851
  cachedMetadataOfCurrentChildFile.parentEntryPointsAbsolutePaths.
15745
15852
  add(parentEntryPointAbsolutePath__forwardSlashSeparators);
15746
15853
  this.registerEntryPointAsParentTo({
@@ -15749,6 +15856,7 @@ class SourceCodeSelectiveReprocessingHelper {
15749
15856
  });
15750
15857
  return;
15751
15858
  }
15859
+ // console.log("CHECKPOINT 4 - B");
15752
15860
  let targetChildFileModificationDateTime__ISO8601;
15753
15861
  try {
15754
15862
  targetChildFileModificationDateTime__ISO8601 = fs_1.default.
@@ -15765,6 +15873,8 @@ class SourceCodeSelectiveReprocessingHelper {
15765
15873
  });
15766
15874
  return;
15767
15875
  }
15876
+ // console.log("CHECKPOINT 5");
15877
+ // debugger;
15768
15878
  let absolutePathsOfExistingChildrenFilesOfTargetOne__forwardSlashSeparators;
15769
15879
  if (cachedMetadataOfCurrentChildFile?.modificationDateTime__ISO8601 === targetChildFileModificationDateTime__ISO8601) {
15770
15880
  absolutePathsOfExistingChildrenFilesOfTargetOne__forwardSlashSeparators = new Set();
@@ -15781,10 +15891,14 @@ class SourceCodeSelectiveReprocessingHelper {
15781
15891
  add(parentEntryPointAbsolutePath__forwardSlashSeparators);
15782
15892
  }
15783
15893
  else {
15894
+ // console.log("CHECKPOINT 6-B");
15784
15895
  absolutePathsOfExistingChildrenFilesOfTargetOne__forwardSlashSeparators = this.
15785
15896
  getAbsolutePathsOfExistingChildrenFilesOfExistingTargetFile__forwardSlashSeparators({
15786
15897
  targetFileAbsolutePath__forwardSlashSeparators: targetChildFileAbsolutePath__forwardSlashSeparators
15787
15898
  });
15899
+ // console.log("absolutePathsOfExistingChildrenFilesOfTargetOne__forwardSlashSeparators");
15900
+ // console.log(absolutePathsOfExistingChildrenFilesOfTargetOne__forwardSlashSeparators);
15901
+ // debugger;
15788
15902
  this.childrenFilesMetadata.set(targetChildFileRelativePath__forwardSlashSeparators, {
15789
15903
  parentEntryPointsAbsolutePaths: new Set([parentEntryPointAbsolutePath__forwardSlashSeparators]),
15790
15904
  modificationDateTime__ISO8601: targetChildFileModificationDateTime__ISO8601,
@@ -15797,10 +15911,20 @@ class SourceCodeSelectiveReprocessingHelper {
15797
15911
  }
15798
15912
  this.absolutePathsOfChildrenFilesWhichHasBeenScannedDuringCurrentPass.
15799
15913
  add(targetChildFileRelativePath__forwardSlashSeparators);
15914
+ // console.log("CHECKPOINT 7");
15915
+ // console.log("absolutePathsOfChildrenFilesWhichHasBeenScannedDuringCurrentPass");
15916
+ // console.log(this.absolutePathsOfChildrenFilesWhichHasBeenScannedDuringCurrentPass);
15917
+ // console.log("absolutePathsOfExistingChildrenFilesOfTargetOne__forwardSlashSeparators");
15918
+ // console.log(absolutePathsOfExistingChildrenFilesOfTargetOne__forwardSlashSeparators);
15919
+ // experimentalArrayForInfiniteRecursionPreventing.push(experimentalArrayForInfiniteRecursionPreventing)
15800
15920
  for (const absolutePathOfExistingAffiliatedFileOfTargetOne__forwardSlashSeparators of absolutePathsOfExistingChildrenFilesOfTargetOne__forwardSlashSeparators) {
15921
+ // console.log("CHECKPOINT 8");
15922
+ // console.log(absolutePathOfExistingAffiliatedFileOfTargetOne__forwardSlashSeparators);
15923
+ // debugger;
15801
15924
  this.updateMetadataForExistingChildFile({
15802
15925
  targetChildFileAbsolutePath__forwardSlashSeparators: absolutePathOfExistingAffiliatedFileOfTargetOne__forwardSlashSeparators,
15803
- parentEntryPointAbsolutePath__forwardSlashSeparators
15926
+ parentEntryPointAbsolutePath__forwardSlashSeparators,
15927
+ experimentalArrayForInfiniteRecursionPreventing
15804
15928
  });
15805
15929
  }
15806
15930
  }
@@ -16311,6 +16435,16 @@ module.exports = require("gulp-stylus");
16311
16435
 
16312
16436
  /***/ }),
16313
16437
 
16438
+ /***/ "htmlnano":
16439
+ /*!***************************!*\
16440
+ !*** external "htmlnano" ***!
16441
+ \***************************/
16442
+ /***/ ((module) => {
16443
+
16444
+ module.exports = require("htmlnano");
16445
+
16446
+ /***/ }),
16447
+
16314
16448
  /***/ "imagemin-pngquant":
16315
16449
  /*!************************************!*\
16316
16450
  !*** external "imagemin-pngquant" ***!
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yamato-daiwa/automation",
3
- "version": "0.7.0-alpha.1",
3
+ "version": "0.7.0-alpha.3",
4
4
  "description": "The project building tool with declarative YAML configuration specializing on Pug, Stylus and TypeScript as source code languages.",
5
5
  "keywords": [
6
6
  "build",
@@ -10,7 +10,7 @@
10
10
  "typescript"
11
11
  ],
12
12
  "engines": {
13
- "node": ">=18.0.0"
13
+ "node": ">=20.0.0"
14
14
  },
15
15
  "bin": {
16
16
  "yda": "Executable"
@@ -50,11 +50,12 @@
50
50
  "gulp-pug": "5.0.0",
51
51
  "gulp-sourcemaps": "3.0.0",
52
52
  "gulp-stylus": "3.0.1",
53
+ "htmlnano": "2.1.2",
53
54
  "imagemin-pngquant": "9.0.2",
54
55
  "js-beautify": "1.15.4",
55
56
  "json5-loader": "4.0.1",
56
57
  "nanoid": "5.1.5",
57
- "node-html-parser": "6.1.13",
58
+ "node-html-parser": "7.0.1",
58
59
  "node-notifier": "10.0.1",
59
60
  "pa11y": "8.0.0",
60
61
  "probe-image-size": "7.2.3",
@@ -69,8 +70,10 @@
69
70
  "stylus-loader": "8.1.1",
70
71
  "ts-loader": "9.5.2",
71
72
  "vinyl": "2.2.1",
73
+ "vnu-jar": "24.10.17",
72
74
  "vue-loader": "17.4.2",
73
75
  "vue-style-loader": "4.1.3",
76
+ "vue-tsc": "2.2.10",
74
77
  "webpack": "5.99.8",
75
78
  "webpack-node-externals": "3.0.0",
76
79
  "webpack-stream": "7.0.0",
@@ -100,7 +103,6 @@
100
103
  "eslint-webpack-plugin": "4.2.0",
101
104
  "ts-node": "10.9.2",
102
105
  "typescript": "5.8.3",
103
- "vnu-jar": "24.10.17",
104
106
  "webpack-cli": "6.0.1"
105
107
  },
106
108
  "scripts": {
@@ -114,6 +116,7 @@
114
116
  "url": "git+https://github.com/TokugawaTakeshi/Yamato-Daiwa-Automation.git"
115
117
  },
116
118
  "homepage": "https://automation.yamato-daiwa.com/",
119
+ "funding": "https://github.com/TokugawaTakeshi/Yamato-Daiwa-Automation?sponsor=1",
117
120
  "bugs": {
118
121
  "url": "https://github.com/TokugawaTakeshi/Yamato-Daiwa-Automation/issues",
119
122
  "email": "tokugawa.takesi@gmail.com"