@yamato-daiwa/automation 0.6.0 → 0.6.1

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 +79 -48
  2. package/package.json +3 -1
package/EntryPoint.js CHANGED
@@ -183,7 +183,7 @@ const w3cHtmlValidator = {
183
183
  \***********************/
184
184
  /***/ ((module) => {
185
185
 
186
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@yamato-daiwa/automation","version":"1.0.0-alpha.0","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.4.1","@stylistic/eslint-plugin":"3.1.0","@typescript-eslint/eslint-plugin":"8.25.0","@typescript-eslint/parser":"8.25.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.4","autoprefixer":"10.4.20","browser-sync":"3.0.3","css-loader":"7.1.2","cssnano":"7.0.6","dotenv":"16.4.7","eslint":"9.21.0","eslint-plugin-import":"2.31.0","eslint-plugin-n":"17.15.1","eslint-plugin-react":"7.37.4","eslint-plugin-vue":"9.32.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","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":"22.10.0","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","w3c-html-validator":"1.8.2","webpack":"5.98.0","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.13.7","@types/node-notifier":"8.0.5","@types/pa11y":"5.3.7","@types/probe-image-size":"7.2.5","@types/pug":"2.0.10","@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.7.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/","bugs":{"url":"https://github.com/TokugawaTakeshi/Yamato-Daiwa-Automation/issues","email":"tokugawa.takesi@gmail.com"}}');
186
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@yamato-daiwa/automation","version":"0.6.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.4.1","@stylistic/eslint-plugin":"3.1.0","@typescript-eslint/eslint-plugin":"8.25.0","@typescript-eslint/parser":"8.25.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.4","autoprefixer":"10.4.20","browser-sync":"3.0.3","css-loader":"7.1.2","cssnano":"7.0.6","dotenv":"16.4.7","eslint":"9.21.0","eslint-plugin-import":"2.31.0","eslint-plugin-n":"17.15.1","eslint-plugin-react":"7.37.4","eslint-plugin-vue":"9.32.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","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":"22.10.0","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","w3c-html-validator":"1.8.2","webpack":"5.98.0","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.13.7","@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.7.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"}}');
187
187
 
188
188
  /***/ }),
189
189
 
@@ -1182,7 +1182,7 @@ exports["default"] = ImagesProcessingRawSettingsNormalizer;
1182
1182
 
1183
1183
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1184
1184
  exports["default"] = {
1185
- supportedSourceFilesNamesExtensionsWithoutLeadingDots: ["jpg", "png", "gif", "svg", "ico", "webp"]
1185
+ supportedSourceFilesNamesExtensionsWithoutLeadingDots: ["jpg", "jpeg", "png", "gif", "svg", "ico", "webp"]
1186
1186
  };
1187
1187
 
1188
1188
 
@@ -8728,13 +8728,18 @@ class MarkupEntryPointVinylFile extends VinylFileClass_1.default {
8728
8728
  manageVariationsForStaticPreviewIfAnyAndStaticPreviewBuildingMode() {
8729
8729
  /* [ Approach ] For all product building modes except static preview all following settings will be undefined. */
8730
8730
  const localeDependentPagesVariationsSettings = this.markupProcessingSettingsRepresentative.localeDependentPagesVariationsSettings;
8731
- const localesData = localeDependentPagesVariationsSettings?.locales ?? new Map();
8732
- const localizedStringResourcesConstantName = localeDependentPagesVariationsSettings?.localizedStringResourcesConstantName ?? "";
8733
- const areLocaleDependentVariationsRequiredForCurrentFile = localesData.size > 0 &&
8734
- localeDependentPagesVariationsSettings?.excludedFilesAbsolutePaths.includes(this.sourceAbsolutePath) === false;
8731
+ if ((0, es_extensions_1.isUndefined)(localeDependentPagesVariationsSettings)) {
8732
+ return {
8733
+ newFiles: [],
8734
+ mustInitialFileBeDeleted: false
8735
+ };
8736
+ }
8737
+ const { localizedStringResourcesConstantName, localeVariableName, locales } = localeDependentPagesVariationsSettings;
8738
+ const areLocaleDependentVariationsRequiredForCurrentFile = locales.size > 0 &&
8739
+ !localeDependentPagesVariationsSettings.excludedFilesAbsolutePaths.includes(this.sourceAbsolutePath);
8735
8740
  const pageVariations = [];
8736
8741
  if (areLocaleDependentVariationsRequiredForCurrentFile) {
8737
- for (const localeData of localesData.values()) {
8742
+ for (const localeData of locales.values()) {
8738
8743
  pageVariations.push(new MarkupEntryPointVinylFile({
8739
8744
  initialPlainVinylFile: new vinyl_1.default({
8740
8745
  base: this.base,
@@ -8748,7 +8753,10 @@ class MarkupEntryPointVinylFile extends VinylFileClass_1.default {
8748
8753
  }),
8749
8754
  markupProcessingSettingsRepresentative: this.markupProcessingSettingsRepresentative,
8750
8755
  staticPreviewLocalizationData: {
8751
- [localizedStringResourcesConstantName]: localeData.stringResources
8756
+ ...(0, es_extensions_1.isNotUndefined)(localeVariableName) && (0, es_extensions_1.isNotUndefined)(localeData.localeVariableValue) ?
8757
+ { [localeVariableName]: localeData.localeVariableValue } : null,
8758
+ ...(0, es_extensions_1.isNotUndefined)(localizedStringResourcesConstantName) && (0, es_extensions_1.isNotUndefined)(localeData.stringResources) ?
8759
+ { [localizedStringResourcesConstantName]: localeData.stringResources } : null
8752
8760
  },
8753
8761
  ...(0, es_extensions_1.isNotUndefined)(this.pageStateDependentVariationsSpecification) ?
8754
8762
  {
@@ -8768,7 +8776,7 @@ class MarkupEntryPointVinylFile extends VinylFileClass_1.default {
8768
8776
  }
8769
8777
  for (const [derivedFileAbsolutePath, state] of this.pageStateDependentVariationsSpecification.derivedPagesAndStatesMap.entries()) {
8770
8778
  if (areLocaleDependentVariationsRequiredForCurrentFile) {
8771
- for (const localeData of localesData.values()) {
8779
+ for (const localeData of locales.values()) {
8772
8780
  pageVariations.push(new MarkupEntryPointVinylFile({
8773
8781
  initialPlainVinylFile: new vinyl_1.default({
8774
8782
  base: this.base,
@@ -8785,7 +8793,10 @@ class MarkupEntryPointVinylFile extends VinylFileClass_1.default {
8785
8793
  [this.pageStateDependentVariationsSpecification.stateVariableName]: state
8786
8794
  },
8787
8795
  staticPreviewLocalizationData: {
8788
- [localizedStringResourcesConstantName]: localeData.stringResources
8796
+ ...(0, es_extensions_1.isNotUndefined)(localeVariableName) && (0, es_extensions_1.isNotUndefined)(localeData.localeVariableValue) ?
8797
+ { [localeVariableName]: localeData.localeVariableValue } : null,
8798
+ ...(0, es_extensions_1.isNotUndefined)(localizedStringResourcesConstantName) && (0, es_extensions_1.isNotUndefined)(localeData.stringResources) ?
8799
+ { [localizedStringResourcesConstantName]: localeData.stringResources } : null
8789
8800
  }
8790
8801
  }));
8791
8802
  }
@@ -9117,13 +9128,19 @@ var MarkupProcessingSettings__FromFile__RawValid;
9117
9128
  $stringResourcesFileRelativePath: {
9118
9129
  newName: "stringResourcesFileRelativePath",
9119
9130
  type: String,
9120
- required: true,
9131
+ required: false,
9121
9132
  minimalCharactersCount: 1
9122
9133
  },
9123
9134
  $localizedStringResourcesConstantName: {
9124
9135
  newName: "localizedStringResourcesConstantName",
9125
9136
  type: String,
9126
- required: true,
9137
+ required: false,
9138
+ minimalCharactersCount: 1
9139
+ },
9140
+ $localeVariableName: {
9141
+ newName: "localeVariableName",
9142
+ type: String,
9143
+ required: false,
9127
9144
  minimalCharactersCount: 1
9128
9145
  },
9129
9146
  $locales: {
@@ -9134,10 +9151,16 @@ var MarkupProcessingSettings__FromFile__RawValid;
9134
9151
  value: {
9135
9152
  type: Object,
9136
9153
  properties: {
9154
+ $localeVariableValue: {
9155
+ newName: "localeVariableValue",
9156
+ type: String,
9157
+ required: false,
9158
+ minimalCharactersCount: 1
9159
+ },
9137
9160
  $keyInLocalizedStringResourcesObject: {
9138
9161
  newName: "keyInLocalizedStringResourcesObject",
9139
9162
  type: String,
9140
- required: true,
9163
+ required: false,
9141
9164
  minimalCharactersCount: 1
9142
9165
  },
9143
9166
  $outputFileInterimNameExtensionWithoutDot: {
@@ -10916,11 +10939,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
10916
10939
  /* ─── Assets ────────────────────────────────────────────────────────────────────────────────────────────────────── */
10917
10940
  const HTML_ValidatorLocalization_english_1 = __importDefault(__webpack_require__(/*! ./HTML_ValidatorLocalization.english */ "./ProjectBuilding/SourceCodeProcessing/Markup/Plugins/HTML_Validator/HTML_ValidatorLocalization.english.ts"));
10918
10941
  /* ─── Generals utils ────────────────────────────────────────────────────────────────────────────────────────────── */
10942
+ const fs_1 = __importDefault(__webpack_require__(/*! fs */ "fs"));
10919
10943
  const es_extensions_1 = __webpack_require__(/*! @yamato-daiwa/es-extensions */ "@yamato-daiwa/es-extensions");
10920
10944
  const es_extensions_nodejs_1 = __webpack_require__(/*! @yamato-daiwa/es-extensions-nodejs */ "@yamato-daiwa/es-extensions-nodejs");
10921
10945
  const Stopwatch_1 = __importDefault(__webpack_require__(/*! @UtilsIncubator/Stopwatch */ "./UtilsIncubator/Stopwatch.ts"));
10922
10946
  const node_notifier_1 = __importDefault(__webpack_require__(/*! node-notifier */ "node-notifier"));
10923
- const fs_1 = __importDefault(__webpack_require__(/*! fs */ "fs"));
10924
10947
  class HTML_Validator {
10925
10948
  /* ━━━ Fields ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
10926
10949
  HTML_ValidationService;
@@ -11207,7 +11230,7 @@ class HTML_Validator {
11207
11230
  errorType: "HTML_ValidationServiceRejectionError",
11208
11231
  title: "HTML Validation Rejection",
11209
11232
  description: "Sorry, the validation service has rejected the requests because of limit exceeding. ",
11210
- occurrenceLocation: "HTML_Validator.validateSingleFile(compoundParameter)",
11233
+ occurrenceLocation: "HTML_Validator.validateSingleFile(compoundParameter)"
11211
11234
  });
11212
11235
  }
11213
11236
  }
@@ -12742,46 +12765,19 @@ class MarkupProcessingRawSettingsNormalizer extends SourceCodeProcessingRawSetti
12742
12765
  if ((0, es_extensions_1.isUndefined)(staticPreviewPageVariationsSettings.localeDependent)) {
12743
12766
  return { stateDependent: stateDependentPagesVariationsMetadata };
12744
12767
  }
12745
- const stringResourcesFileAbsolutePath = es_extensions_nodejs_1.ImprovedPath.joinPathSegments([
12746
- this.consumingProjectRootDirectoryAbsolutePath,
12747
- staticPreviewPageVariationsSettings.localeDependent.stringResourcesFileRelativePath
12748
- ], { alwaysForwardSlashSeparators: true });
12749
- let stringResources;
12750
- try {
12751
- stringResources = es_extensions_nodejs_1.ObjectDataFilesProcessor.processFile({
12752
- filePath: stringResourcesFileAbsolutePath,
12753
- synchronously: true
12754
- });
12755
- }
12756
- catch (error) {
12757
- es_extensions_1.Logger.throwErrorAndLog({
12758
- errorInstance: new es_extensions_1.FileReadingFailedError({
12759
- customMessage: `Unable to read the file with string resources at "${stringResourcesFileAbsolutePath}".`
12760
- }),
12761
- title: es_extensions_1.FileReadingFailedError.localization.defaultTitle,
12762
- occurrenceLocation: "MarkupProcessingRawSettingsNormalizer." +
12763
- "normalizeStaticPreviewPagesVariationsSettings()",
12764
- innerError: error
12765
- });
12766
- }
12767
- if (!(0, es_extensions_1.isArbitraryObject)(stringResources)) {
12768
- es_extensions_1.Logger.throwErrorAndLog({
12769
- errorInstance: new es_extensions_1.InvalidExternalDataError({
12770
- customMessage: `The content of string resources files "${stringResourcesFileAbsolutePath}" is not an object.`
12771
- }),
12772
- title: es_extensions_1.InvalidExternalDataError.localization.defaultTitle,
12773
- occurrenceLocation: "MarkupProcessingRawSettingsNormalizer." +
12774
- "normalizeStaticPreviewPagesVariationsSettings()"
12775
- });
12776
- }
12768
+ const stringResources = this.getStringResourcesFromFileIfExist(staticPreviewPageVariationsSettings.localeDependent.stringResourcesFileRelativePath);
12777
12769
  const localeDependentPagesVariationsMetadata = {
12778
12770
  localizedStringResourcesConstantName: staticPreviewPageVariationsSettings.localeDependent.
12779
12771
  localizedStringResourcesConstantName,
12772
+ localeVariableName: staticPreviewPageVariationsSettings.localeDependent.localeVariableName,
12780
12773
  locales: new Map(Object.entries(staticPreviewPageVariationsSettings.localeDependent.locales).
12781
12774
  map(([localeKey, localeData]) => [
12782
12775
  localeKey,
12783
12776
  {
12784
- stringResources: stringResources[localeData.keyInLocalizedStringResourcesObject],
12777
+ ...(0, es_extensions_1.isNotNull)(stringResources) && (0, es_extensions_1.isNotUndefined)(localeData.keyInLocalizedStringResourcesObject) ?
12778
+ { stringResources: stringResources[localeData.keyInLocalizedStringResourcesObject] } : null,
12779
+ ...(0, es_extensions_1.isNotUndefined)(localeData.localeVariableValue) ?
12780
+ { localeVariableValue: localeData.localeVariableValue } : null,
12785
12781
  outputFileInterimNameExtensionWithoutDot: localeData.outputFileInterimNameExtensionWithoutDot
12786
12782
  }
12787
12783
  ])),
@@ -12892,6 +12888,41 @@ class MarkupProcessingRawSettingsNormalizer extends SourceCodeProcessingRawSetti
12892
12888
  }
12893
12889
  };
12894
12890
  }
12891
+ getStringResourcesFromFileIfExist(stringResourcesFileRelativePath) {
12892
+ if ((0, es_extensions_1.isUndefined)(stringResourcesFileRelativePath)) {
12893
+ return null;
12894
+ }
12895
+ const stringResourcesFileAbsolutePath = es_extensions_nodejs_1.ImprovedPath.joinPathSegments([this.consumingProjectRootDirectoryAbsolutePath, stringResourcesFileRelativePath], { alwaysForwardSlashSeparators: true });
12896
+ let stringResources;
12897
+ try {
12898
+ stringResources = es_extensions_nodejs_1.ObjectDataFilesProcessor.processFile({
12899
+ filePath: stringResourcesFileAbsolutePath,
12900
+ synchronously: true
12901
+ });
12902
+ }
12903
+ catch (error) {
12904
+ es_extensions_1.Logger.throwErrorAndLog({
12905
+ errorInstance: new es_extensions_1.FileReadingFailedError({
12906
+ customMessage: `Unable to read the file with string resources at "${stringResourcesFileAbsolutePath}".`
12907
+ }),
12908
+ title: es_extensions_1.FileReadingFailedError.localization.defaultTitle,
12909
+ occurrenceLocation: "markupProcessingRawSettingsNormalizer." +
12910
+ "getStringResourcesFromFileIfExist(stringResourcesFileRelativePath)",
12911
+ innerError: error
12912
+ });
12913
+ }
12914
+ if (!(0, es_extensions_1.isArbitraryObject)(stringResources)) {
12915
+ es_extensions_1.Logger.throwErrorAndLog({
12916
+ errorInstance: new es_extensions_1.InvalidExternalDataError({
12917
+ customMessage: `The content of string resources files "${stringResourcesFileAbsolutePath}" is not an object.`
12918
+ }),
12919
+ title: es_extensions_1.InvalidExternalDataError.localization.defaultTitle,
12920
+ occurrenceLocation: "markupProcessingRawSettingsNormalizer." +
12921
+ "getStringResourcesFromFileIfExist(stringResourcesFileRelativePath)",
12922
+ });
12923
+ }
12924
+ return stringResources;
12925
+ }
12895
12926
  normalizeLoggingSettings() {
12896
12927
  return {
12897
12928
  filesPaths: this.markupProcessingSettings__fromFile__rawValid.logging?.filesPaths ??
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yamato-daiwa/automation",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
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",
@@ -94,11 +94,13 @@
94
94
  "@types/pa11y": "5.3.7",
95
95
  "@types/probe-image-size": "7.2.5",
96
96
  "@types/pug": "2.0.10",
97
+ "@types/vnu-jar": "17.11.2",
97
98
  "@types/webpack-node-externals": "3.0.4",
98
99
  "@types/webpack-stream": "3.2.15",
99
100
  "eslint-webpack-plugin": "4.2.0",
100
101
  "ts-node": "10.9.2",
101
102
  "typescript": "5.7.3",
103
+ "vnu-jar": "24.10.17",
102
104
  "webpack-cli": "6.0.1"
103
105
  },
104
106
  "scripts": {