@kontur.candy/tools 2.253.0 → 2.255.0

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 (85) hide show
  1. package/README.md +0 -16
  2. package/distr/Common/AsyncUtils.js +7 -0
  3. package/distr/Common/AsyncUtils.js.map +1 -1
  4. package/distr/Common/CandyApiClient/CandyApiClient.js +37 -5
  5. package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -1
  6. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js.map +1 -1
  7. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +20 -0
  8. package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -1
  9. package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -1
  10. package/distr/Common/CommonConstants/DefaultServicesUrls.js +3 -1
  11. package/distr/Common/CommonConstants/DefaultServicesUrls.js.map +1 -1
  12. package/distr/Common/IntRangeUtils.js +4 -0
  13. package/distr/Common/IntRangeUtils.js.map +1 -1
  14. package/distr/Common/KCLangRuntimeUtils.js +7 -1
  15. package/distr/Common/KCLangRuntimeUtils.js.map +1 -1
  16. package/distr/Common/TypingUtils.js +4 -0
  17. package/distr/Common/TypingUtils.js.map +1 -1
  18. package/distr/Common/async/Channel.js +64 -0
  19. package/distr/Common/async/Channel.js.map +1 -0
  20. package/distr/Common/async/pool/AsyncPool.js +145 -0
  21. package/distr/Common/async/pool/AsyncPool.js.map +1 -0
  22. package/distr/Common/async/pool/FixedPool.js +29 -0
  23. package/distr/Common/async/pool/FixedPool.js.map +1 -0
  24. package/distr/Common/async/pool/LimitedPool.js +81 -0
  25. package/distr/Common/async/pool/LimitedPool.js.map +1 -0
  26. package/distr/Common/async/pool/Registry.js +73 -0
  27. package/distr/Common/async/pool/Registry.js.map +1 -0
  28. package/distr/Common/async/pool/index.js +13 -0
  29. package/distr/Common/async/pool/index.js.map +1 -0
  30. package/distr/Common/ds/LinkedList.js +64 -0
  31. package/distr/Common/ds/LinkedList.js.map +1 -0
  32. package/distr/Common/multithread/ThreadPool.js +74 -0
  33. package/distr/Common/multithread/ThreadPool.js.map +1 -0
  34. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +2 -1
  35. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js.map +1 -1
  36. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +0 -3
  37. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js.map +1 -1
  38. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +1 -1
  39. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js.map +1 -1
  40. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +13 -4
  41. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js.map +1 -1
  42. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +29 -107
  43. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js.map +1 -1
  44. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorPool.js +62 -0
  45. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorPool.js.map +1 -0
  46. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +29 -36
  47. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js.map +1 -1
  48. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +28 -35
  49. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js.map +1 -1
  50. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedThreadWorker.js +14 -0
  51. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedThreadWorker.js.map +1 -0
  52. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +1 -1
  53. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js.map +1 -1
  54. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +0 -10
  55. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js.map +1 -1
  56. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +2 -6
  57. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js.map +1 -1
  58. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +0 -22
  59. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js.map +1 -1
  60. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +1 -3
  61. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js.map +1 -1
  62. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +1 -1
  63. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js.map +1 -1
  64. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +2 -5
  65. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js.map +1 -1
  66. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +0 -10
  67. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js.map +1 -1
  68. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +35 -6
  69. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -1
  70. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +1 -1
  71. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js.map +1 -1
  72. package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js +1 -1
  73. package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js.map +1 -1
  74. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  75. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  76. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  77. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +14 -13
  78. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  79. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +14 -13
  80. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  81. package/package.json +1 -1
  82. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +0 -40
  83. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js.map +0 -1
  84. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +0 -19
  85. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js.map +0 -1
@@ -40,7 +40,7 @@ class AcquirePublishedGeneratorTask extends _ChainableValueProducer.ObservableVa
40
40
  this.logger.log(`Acquiring generator ${this.version}`);
41
41
  await this.execute(generatorDirectory, `npm install @kontur.candy/generator@${this.version}`);
42
42
  }
43
- const result = (0, _CreateAsyncGenerator.createAsyncGenerator)(path.join(generatorDirectory, "node_modules", "@kontur.candy", "generator"), false, false);
43
+ const result = (0, _CreateAsyncGenerator.createAsyncGenerator)(path.join(generatorDirectory, "node_modules", "@kontur.candy", "generator"));
44
44
  this.acquiredGenerator = result;
45
45
  }
46
46
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AcquirePublishedGeneratorTask.js","names":["_child_process","require","path","_interopRequireWildcard","_fsExtra","_pLimit","_interopRequireDefault","_StaticLogger","_ChainableValueProducer","_TypingUtils","_CreateAsyncGenerator","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","AcquirePublishedGeneratorTask","ObservableValueProducerBase","constructor","version","candyModulesDirectory","useVersionFromCache","logger","getLogger","cacheDirectory","acquiredGenerator","acquireLimit","pLimit","withPrefix","getCurrentValue","undefined","generatorDirectory","join","useGeneratorFromCache","pathExists","prepareGeneratorDirectory","log","execute","result","createAsyncGenerator","Error","beginListening","stopListening","ensureDir","outputFile","resolve","command","workingDirectory","executable","executableArguments","split","Promise","rejectPromise","npm_config_registry","_","env","process","watchProcess","spawn","reject","cwd","shell","windowsHide","stdio","stdout","on","data","verbose","toString","stderr","code","exports"],"sources":["../../../../../src/BuildTasks/Generator/AcquirePublishedGeneratorTask.ts"],"sourcesContent":["import { spawn } from \"child_process\";\nimport * as path from \"path\";\n\nimport { ensureDir, outputFile, pathExists } from \"fs-extra\";\nimport pLimit from \"p-limit\";\n\nimport { ILogger } from \"../../Commons/Logging/ILogger\";\nimport { getLogger } from \"../../Commons/Logging/StaticLogger\";\nimport { ObservableValueProducerBase } from \"../../Commons/TasksCore/ChainableValueProducer\";\nimport { FormGenerator } from \"../Form/GenerateForm\";\nimport { reject } from \"../../../../Common/TypingUtils\";\n\nimport { createAsyncGenerator } from \"./GeneratorWorker/CreateAsyncGenerator\";\n\nexport class AcquirePublishedGeneratorTask extends ObservableValueProducerBase<FormGenerator> {\n private readonly logger: ILogger;\n private readonly version: string;\n private readonly cacheDirectory: string;\n private acquiredGenerator?: FormGenerator;\n private readonly useVersionFromCache: boolean;\n private readonly acquireLimit = pLimit(1);\n\n public constructor(\n version: string,\n candyModulesDirectory: string,\n useVersionFromCache: boolean,\n logger: ILogger = getLogger()\n ) {\n super();\n this.logger = logger.withPrefix(\"GENERATOR\");\n this.version = version;\n this.cacheDirectory = candyModulesDirectory;\n this.useVersionFromCache = useVersionFromCache;\n }\n\n public async getCurrentValue(): Promise<FormGenerator> {\n if (this.acquiredGenerator == undefined) {\n await this.acquireLimit(async () => {\n if (this.acquiredGenerator == undefined) {\n const generatorDirectory = path.join(this.cacheDirectory, \"generators\", this.version);\n const useGeneratorFromCache = this.useVersionFromCache && (await pathExists(generatorDirectory));\n\n if (!useGeneratorFromCache) {\n await this.prepareGeneratorDirectory(generatorDirectory);\n this.logger.log(`Acquiring generator ${this.version}`);\n await this.execute(generatorDirectory, `npm install @kontur.candy/generator@${this.version}`);\n }\n\n const result = createAsyncGenerator(\n path.join(generatorDirectory, \"node_modules\", \"@kontur.candy\", \"generator\"),\n false,\n false\n );\n this.acquiredGenerator = result;\n }\n });\n }\n if (this.acquiredGenerator == undefined) {\n throw new Error(\"InvalidProgramState\");\n }\n return this.acquiredGenerator;\n }\n\n protected async beginListening(): Promise<void> {\n // Нет предков и тут нечего наблюдать\n }\n\n protected async stopListening(): Promise<void> {\n // Нет предков и тут нечего наблюдать\n }\n\n private async prepareGeneratorDirectory(generatorDirectory: string): Promise<void> {\n await ensureDir(generatorDirectory);\n await outputFile(\n path.resolve(generatorDirectory, \"package.json\"),\n `{ \"name\": \"generator\", \"version\": \"1.0.0\", \"description\": \"Generator\", \"author\": \"\" }`\n );\n }\n\n private execute(generatorDirectory: string, command: string): Promise<void> {\n const workingDirectory = generatorDirectory;\n const [executable, ...executableArguments] = command.split(\" \");\n return new Promise<void>((resolve, rejectPromise) => {\n const { npm_config_registry: _, ...env } = process.env;\n const watchProcess = spawn(executable ?? reject(), executableArguments, {\n cwd: workingDirectory,\n shell: true,\n windowsHide: true,\n stdio: \"pipe\",\n env: env,\n });\n watchProcess.stdout.on(\"data\", (data: Buffer | string) => {\n this.logger.verbose(data.toString());\n });\n watchProcess.stderr.on(\"data\", (data: Buffer | string) => {\n this.logger.verbose(data.toString());\n });\n watchProcess.on(\"exit\", code => {\n if (code !== 0) {\n rejectPromise(new Error(`Command ${command} exited with code ${code}`));\n } else {\n resolve();\n }\n });\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"AcquirePublishedGeneratorTask.js","names":["_child_process","require","path","_interopRequireWildcard","_fsExtra","_pLimit","_interopRequireDefault","_StaticLogger","_ChainableValueProducer","_TypingUtils","_CreateAsyncGenerator","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","AcquirePublishedGeneratorTask","ObservableValueProducerBase","constructor","version","candyModulesDirectory","useVersionFromCache","logger","getLogger","cacheDirectory","acquiredGenerator","acquireLimit","pLimit","withPrefix","getCurrentValue","undefined","generatorDirectory","join","useGeneratorFromCache","pathExists","prepareGeneratorDirectory","log","execute","result","createAsyncGenerator","Error","beginListening","stopListening","ensureDir","outputFile","resolve","command","workingDirectory","executable","executableArguments","split","Promise","rejectPromise","npm_config_registry","_","env","process","watchProcess","spawn","reject","cwd","shell","windowsHide","stdio","stdout","on","data","verbose","toString","stderr","code","exports"],"sources":["../../../../../src/BuildTasks/Generator/AcquirePublishedGeneratorTask.ts"],"sourcesContent":["import { spawn } from \"child_process\";\nimport * as path from \"path\";\n\nimport { ensureDir, outputFile, pathExists } from \"fs-extra\";\nimport pLimit from \"p-limit\";\n\nimport { ILogger } from \"../../Commons/Logging/ILogger\";\nimport { getLogger } from \"../../Commons/Logging/StaticLogger\";\nimport { ObservableValueProducerBase } from \"../../Commons/TasksCore/ChainableValueProducer\";\nimport { FormGenerator } from \"../Form/GenerateForm\";\nimport { reject } from \"../../../../Common/TypingUtils\";\n\nimport { createAsyncGenerator } from \"./GeneratorWorker/CreateAsyncGenerator\";\n\nexport class AcquirePublishedGeneratorTask extends ObservableValueProducerBase<FormGenerator> {\n private readonly logger: ILogger;\n private readonly version: string;\n private readonly cacheDirectory: string;\n private acquiredGenerator?: FormGenerator;\n private readonly useVersionFromCache: boolean;\n private readonly acquireLimit = pLimit(1);\n\n public constructor(\n version: string,\n candyModulesDirectory: string,\n useVersionFromCache: boolean,\n logger: ILogger = getLogger()\n ) {\n super();\n this.logger = logger.withPrefix(\"GENERATOR\");\n this.version = version;\n this.cacheDirectory = candyModulesDirectory;\n this.useVersionFromCache = useVersionFromCache;\n }\n\n public async getCurrentValue(): Promise<FormGenerator> {\n if (this.acquiredGenerator == undefined) {\n await this.acquireLimit(async () => {\n if (this.acquiredGenerator == undefined) {\n const generatorDirectory = path.join(this.cacheDirectory, \"generators\", this.version);\n const useGeneratorFromCache = this.useVersionFromCache && (await pathExists(generatorDirectory));\n\n if (!useGeneratorFromCache) {\n await this.prepareGeneratorDirectory(generatorDirectory);\n this.logger.log(`Acquiring generator ${this.version}`);\n await this.execute(generatorDirectory, `npm install @kontur.candy/generator@${this.version}`);\n }\n\n const result = createAsyncGenerator(\n path.join(generatorDirectory, \"node_modules\", \"@kontur.candy\", \"generator\")\n );\n this.acquiredGenerator = result;\n }\n });\n }\n if (this.acquiredGenerator == undefined) {\n throw new Error(\"InvalidProgramState\");\n }\n return this.acquiredGenerator;\n }\n\n protected async beginListening(): Promise<void> {\n // Нет предков и тут нечего наблюдать\n }\n\n protected async stopListening(): Promise<void> {\n // Нет предков и тут нечего наблюдать\n }\n\n private async prepareGeneratorDirectory(generatorDirectory: string): Promise<void> {\n await ensureDir(generatorDirectory);\n await outputFile(\n path.resolve(generatorDirectory, \"package.json\"),\n `{ \"name\": \"generator\", \"version\": \"1.0.0\", \"description\": \"Generator\", \"author\": \"\" }`\n );\n }\n\n private execute(generatorDirectory: string, command: string): Promise<void> {\n const workingDirectory = generatorDirectory;\n const [executable, ...executableArguments] = command.split(\" \");\n return new Promise<void>((resolve, rejectPromise) => {\n const { npm_config_registry: _, ...env } = process.env;\n const watchProcess = spawn(executable ?? reject(), executableArguments, {\n cwd: workingDirectory,\n shell: true,\n windowsHide: true,\n stdio: \"pipe\",\n env: env,\n });\n watchProcess.stdout.on(\"data\", (data: Buffer | string) => {\n this.logger.verbose(data.toString());\n });\n watchProcess.stderr.on(\"data\", (data: Buffer | string) => {\n this.logger.verbose(data.toString());\n });\n watchProcess.on(\"exit\", code => {\n if (code !== 0) {\n rejectPromise(new Error(`Command ${command} exited with code ${code}`));\n } else {\n resolve();\n }\n });\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -26,8 +26,11 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
26
26
  this.buildProcess = void 0;
27
27
  this.buildResultWatcher = void 0;
28
28
  this.handleUpdate = async () => {
29
+ var _this$currentGenerato, _this$currentGenerato2;
29
30
  this.logger.log("Generator sources updated");
30
- await this.emitUpdate((0, _CreateAsyncGenerator.createAsyncGenerator)(_path.default.join(this.pathToEngineSources, "Generator"), this.useWatch, this.useWatch));
31
+ await ((_this$currentGenerato = this.currentGenerator) === null || _this$currentGenerato === void 0 || (_this$currentGenerato2 = _this$currentGenerato.dispose) === null || _this$currentGenerato2 === void 0 ? void 0 : _this$currentGenerato2.call(_this$currentGenerato));
32
+ this.currentGenerator = (0, _CreateAsyncGenerator.createAsyncGenerator)(_path.default.join(this.pathToEngineSources, "Generator"));
33
+ await this.emitUpdate(this.currentGenerator);
31
34
  };
32
35
  this.logger = logger.withPrefix("GENERATOR");
33
36
  this.pathToEngineSources = pathToEngineSources;
@@ -41,7 +44,7 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
41
44
  if (this.buildProcess == undefined) {
42
45
  this.buildProcess = await this.runWatchProcessStarted();
43
46
  this.buildResultWatcher = await this.createBuildResultWatcher(_path.default.join(this.pathToEngineSources, "Generator", "dist"));
44
- this.currentGenerator = (0, _CreateAsyncGenerator.createAsyncGenerator)(_path.default.join(this.pathToEngineSources, "Generator"), this.useWatch, this.useWatch);
47
+ this.currentGenerator = (0, _CreateAsyncGenerator.createAsyncGenerator)(_path.default.join(this.pathToEngineSources, "Generator"));
45
48
  }
46
49
  } else {
47
50
  this.currentGenerator = await this.acquireGeneratorFromSources();
@@ -56,6 +59,7 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
56
59
  this.useWatch = true;
57
60
  }
58
61
  async stopListening() {
62
+ var _this$currentGenerato3, _this$currentGenerato4;
59
63
  if (this.buildProcess != undefined) {
60
64
  try {
61
65
  const buildProcess = this.buildProcess;
@@ -68,6 +72,7 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
68
72
  if (this.buildResultWatcher != undefined) {
69
73
  this.buildResultWatcher.close();
70
74
  }
75
+ await ((_this$currentGenerato3 = this.currentGenerator) === null || _this$currentGenerato3 === void 0 || (_this$currentGenerato4 = _this$currentGenerato3.dispose) === null || _this$currentGenerato4 === void 0 ? void 0 : _this$currentGenerato4.call(_this$currentGenerato3));
71
76
  this.useWatch = false;
72
77
  }
73
78
  async acquireGeneratorFromSources() {
@@ -76,7 +81,7 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
76
81
  await (0, _ExecUtils.execCommandAsync)(this.logger, `npm run generator:build`, {
77
82
  cwd: buildDirectory
78
83
  });
79
- const result = (0, _CreateAsyncGenerator.createAsyncGenerator)(_path.default.join(this.pathToEngineSources, "Generator"), this.useWatch, this.useWatch);
84
+ const result = (0, _CreateAsyncGenerator.createAsyncGenerator)(_path.default.join(this.pathToEngineSources, "Generator"));
80
85
  action.complete();
81
86
  return result;
82
87
  }
@@ -107,7 +112,11 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
107
112
  ignoreInitial: true,
108
113
  cwd: pathToGeneratorOutputDir,
109
114
  ignorePermissionErrors: false,
110
- usePolling: true
115
+ usePolling: true,
116
+ awaitWriteFinish: {
117
+ stabilityThreshold: 200,
118
+ pollInterval: 50
119
+ }
111
120
  });
112
121
  const handleAnyFsEventDebounced = _lodash.default.debounce(() => this.handleUpdate(), 500);
113
122
  watcher.on("all", handleAnyFsEventDebounced);
@@ -1 +1 @@
1
- {"version":3,"file":"BuildGeneratorFromSourcesTask.js","names":["_path","_interopRequireDefault","require","_chokidar","_lodash","_pLimit","_ExecUtils","_ILogger","_StaticLogger","_ChainableValueProducer","_ProcessUtils","_CreateAsyncGenerator","generatorBuildLimit","pLimit","BuildGeneratorFromSourcesTask","ObservableValueProducerBase","constructor","pathToEngineSources","logger","getLogger","useWatch","currentGenerator","buildProcess","buildResultWatcher","handleUpdate","log","emitUpdate","createAsyncGenerator","path","join","withPrefix","getCurrentValue","undefined","runWatchProcessStarted","createBuildResultWatcher","acquireGeneratorFromSources","Error","beginListening","stopListening","kill","error","close","action","buildActionBegin","buildDirectory","getBuildDirectory","execCommandAsync","cwd","result","complete","ProcessUtils","createShellProcess","onStdOut","subscribe","data","verbose","toString","onStdErr","start","waitFirstCompilationCompleted","waitOutputIncludesString","pathToGeneratorOutputDir","maskToObserveGeneratorChanges","watcher","watch","ignoreInitial","ignorePermissionErrors","usePolling","handleAnyFsEventDebounced","_","debounce","on","exports"],"sources":["../../../../../src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.ts"],"sourcesContent":["import { FSWatcher } from \"fs\";\nimport path from \"path\";\n\nimport { watch } from \"chokidar\";\nimport _ from \"lodash\";\nimport pLimit from \"p-limit\";\n\nimport { execCommandAsync } from \"../../Commons/ExecUtils\";\nimport { buildActionBegin, ILogger } from \"../../Commons/Logging/ILogger\";\nimport { getLogger } from \"../../Commons/Logging/StaticLogger\";\nimport { ObservableValueProducerBase } from \"../../Commons/TasksCore/ChainableValueProducer\";\nimport { FormGenerator } from \"../Form/GenerateForm\";\nimport { ProcessUtils } from \"../ProcessUtils/ProcessUtils\";\nimport { ShellProcessHandle } from \"../ProcessUtils/ShellProcessHandle\";\n\nimport { createAsyncGenerator } from \"./GeneratorWorker/CreateAsyncGenerator\";\n\nconst generatorBuildLimit = pLimit(1);\n\nexport class BuildGeneratorFromSourcesTask extends ObservableValueProducerBase<FormGenerator> {\n private readonly pathToEngineSources: string;\n private readonly logger: ILogger;\n private useWatch = false;\n private currentGenerator?: FormGenerator;\n private buildProcess?: ShellProcessHandle;\n private buildResultWatcher?: FSWatcher;\n\n public constructor(pathToEngineSources: string, logger: ILogger = getLogger()) {\n super();\n this.logger = logger.withPrefix(\"GENERATOR\");\n this.pathToEngineSources = pathToEngineSources;\n }\n\n public async getCurrentValue(): Promise<FormGenerator> {\n return generatorBuildLimit(async () => {\n if (this.currentGenerator != undefined) {\n return this.currentGenerator;\n }\n if (this.useWatch) {\n if (this.buildProcess == undefined) {\n this.buildProcess = await this.runWatchProcessStarted();\n this.buildResultWatcher = await this.createBuildResultWatcher(\n path.join(this.pathToEngineSources, \"Generator\", \"dist\")\n );\n this.currentGenerator = createAsyncGenerator(\n path.join(this.pathToEngineSources, \"Generator\"),\n this.useWatch,\n this.useWatch\n );\n }\n } else {\n this.currentGenerator = await this.acquireGeneratorFromSources();\n }\n if (this.currentGenerator == undefined) {\n throw new Error(\"InvalidProgramState\");\n }\n return this.currentGenerator;\n });\n }\n\n protected async beginListening(): Promise<void> {\n this.useWatch = true;\n }\n\n protected async stopListening(): Promise<void> {\n if (this.buildProcess != undefined) {\n try {\n const buildProcess = this.buildProcess;\n this.buildProcess = undefined;\n await buildProcess.kill();\n } catch (error) {\n this.logger.error(`Failed to stop process: ${error}`);\n }\n }\n if (this.buildResultWatcher != undefined) {\n this.buildResultWatcher.close();\n }\n this.useWatch = false;\n }\n\n private readonly handleUpdate = async (): Promise<void> => {\n this.logger.log(\"Generator sources updated\");\n await this.emitUpdate(\n createAsyncGenerator(path.join(this.pathToEngineSources, \"Generator\"), this.useWatch, this.useWatch)\n );\n };\n\n private async acquireGeneratorFromSources(): Promise<FormGenerator> {\n const action = buildActionBegin(this.logger, \"Build generator\");\n const buildDirectory = await this.getBuildDirectory();\n await execCommandAsync(this.logger, `npm run generator:build`, {\n cwd: buildDirectory,\n });\n const result = createAsyncGenerator(\n path.join(this.pathToEngineSources, \"Generator\"),\n this.useWatch,\n this.useWatch\n );\n action.complete();\n return result;\n }\n\n private async getBuildDirectory(): Promise<string> {\n return this.pathToEngineSources;\n }\n\n private async runWatchProcessStarted(): Promise<ShellProcessHandle> {\n this.logger.log(\"Start watch\");\n const buildDirectory = await this.getBuildDirectory();\n const result = ProcessUtils.createShellProcess(\n \"npm\",\n [\"run\", \"generator:build\", \"--\", \"--watch\"],\n buildDirectory\n );\n result.onStdOut.subscribe(data => {\n this.logger.verbose(data.toString());\n });\n result.onStdErr.subscribe(data => {\n this.logger.verbose(data.toString());\n });\n result.start();\n await this.waitFirstCompilationCompleted(result);\n this.logger.log(\"Successfully complied\");\n return result;\n }\n\n private async waitFirstCompilationCompleted(result: ShellProcessHandle): Promise<void> {\n await result.waitOutputIncludesString(\"Successfully compiled\");\n }\n\n private async createBuildResultWatcher(pathToGeneratorOutputDir: string): Promise<FSWatcher> {\n const maskToObserveGeneratorChanges = [\"Generator/src/**/*.js\", \"index.js\"];\n const watcher = watch(maskToObserveGeneratorChanges, {\n ignoreInitial: true,\n cwd: pathToGeneratorOutputDir,\n ignorePermissionErrors: false,\n usePolling: true,\n });\n const handleAnyFsEventDebounced = _.debounce(() => this.handleUpdate(), 500);\n watcher.on(\"all\", handleAnyFsEventDebounced);\n watcher.on(\"error\", handleAnyFsEventDebounced);\n // @ts-ignore\n return watcher;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BuildGeneratorFromSourcesTask.js","names":["_path","_interopRequireDefault","require","_chokidar","_lodash","_pLimit","_ExecUtils","_ILogger","_StaticLogger","_ChainableValueProducer","_ProcessUtils","_CreateAsyncGenerator","generatorBuildLimit","pLimit","BuildGeneratorFromSourcesTask","ObservableValueProducerBase","constructor","pathToEngineSources","logger","getLogger","useWatch","currentGenerator","buildProcess","buildResultWatcher","handleUpdate","_this$currentGenerato","_this$currentGenerato2","log","dispose","call","createAsyncGenerator","path","join","emitUpdate","withPrefix","getCurrentValue","undefined","runWatchProcessStarted","createBuildResultWatcher","acquireGeneratorFromSources","Error","beginListening","stopListening","_this$currentGenerato3","_this$currentGenerato4","kill","error","close","action","buildActionBegin","buildDirectory","getBuildDirectory","execCommandAsync","cwd","result","complete","ProcessUtils","createShellProcess","onStdOut","subscribe","data","verbose","toString","onStdErr","start","waitFirstCompilationCompleted","waitOutputIncludesString","pathToGeneratorOutputDir","maskToObserveGeneratorChanges","watcher","watch","ignoreInitial","ignorePermissionErrors","usePolling","awaitWriteFinish","stabilityThreshold","pollInterval","handleAnyFsEventDebounced","_","debounce","on","exports"],"sources":["../../../../../src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.ts"],"sourcesContent":["import { FSWatcher } from \"fs\";\nimport path from \"path\";\n\nimport { watch } from \"chokidar\";\nimport _ from \"lodash\";\nimport pLimit from \"p-limit\";\n\nimport { execCommandAsync } from \"../../Commons/ExecUtils\";\nimport { buildActionBegin, ILogger } from \"../../Commons/Logging/ILogger\";\nimport { getLogger } from \"../../Commons/Logging/StaticLogger\";\nimport { ObservableValueProducerBase } from \"../../Commons/TasksCore/ChainableValueProducer\";\nimport { FormGenerator } from \"../Form/GenerateForm\";\nimport { ProcessUtils } from \"../ProcessUtils/ProcessUtils\";\nimport { ShellProcessHandle } from \"../ProcessUtils/ShellProcessHandle\";\n\nimport { createAsyncGenerator } from \"./GeneratorWorker/CreateAsyncGenerator\";\n\nconst generatorBuildLimit = pLimit(1);\n\nexport class BuildGeneratorFromSourcesTask extends ObservableValueProducerBase<FormGenerator> {\n private readonly pathToEngineSources: string;\n private readonly logger: ILogger;\n private useWatch = false;\n private currentGenerator?: FormGenerator;\n private buildProcess?: ShellProcessHandle;\n private buildResultWatcher?: FSWatcher;\n\n public constructor(pathToEngineSources: string, logger: ILogger = getLogger()) {\n super();\n this.logger = logger.withPrefix(\"GENERATOR\");\n this.pathToEngineSources = pathToEngineSources;\n }\n\n public async getCurrentValue(): Promise<FormGenerator> {\n return generatorBuildLimit(async () => {\n if (this.currentGenerator != undefined) {\n return this.currentGenerator;\n }\n if (this.useWatch) {\n if (this.buildProcess == undefined) {\n this.buildProcess = await this.runWatchProcessStarted();\n this.buildResultWatcher = await this.createBuildResultWatcher(\n path.join(this.pathToEngineSources, \"Generator\", \"dist\")\n );\n this.currentGenerator = createAsyncGenerator(path.join(this.pathToEngineSources, \"Generator\"));\n }\n } else {\n this.currentGenerator = await this.acquireGeneratorFromSources();\n }\n if (this.currentGenerator == undefined) {\n throw new Error(\"InvalidProgramState\");\n }\n return this.currentGenerator;\n });\n }\n\n protected async beginListening(): Promise<void> {\n this.useWatch = true;\n }\n\n protected async stopListening(): Promise<void> {\n if (this.buildProcess != undefined) {\n try {\n const buildProcess = this.buildProcess;\n this.buildProcess = undefined;\n await buildProcess.kill();\n } catch (error) {\n this.logger.error(`Failed to stop process: ${error}`);\n }\n }\n if (this.buildResultWatcher != undefined) {\n this.buildResultWatcher.close();\n }\n await this.currentGenerator?.dispose?.();\n this.useWatch = false;\n }\n\n private readonly handleUpdate = async (): Promise<void> => {\n this.logger.log(\"Generator sources updated\");\n await this.currentGenerator?.dispose?.();\n this.currentGenerator = createAsyncGenerator(path.join(this.pathToEngineSources, \"Generator\"));\n await this.emitUpdate(this.currentGenerator);\n };\n\n private async acquireGeneratorFromSources(): Promise<FormGenerator> {\n const action = buildActionBegin(this.logger, \"Build generator\");\n const buildDirectory = await this.getBuildDirectory();\n await execCommandAsync(this.logger, `npm run generator:build`, {\n cwd: buildDirectory,\n });\n const result = createAsyncGenerator(path.join(this.pathToEngineSources, \"Generator\"));\n action.complete();\n return result;\n }\n\n private async getBuildDirectory(): Promise<string> {\n return this.pathToEngineSources;\n }\n\n private async runWatchProcessStarted(): Promise<ShellProcessHandle> {\n this.logger.log(\"Start watch\");\n const buildDirectory = await this.getBuildDirectory();\n const result = ProcessUtils.createShellProcess(\n \"npm\",\n [\"run\", \"generator:build\", \"--\", \"--watch\"],\n buildDirectory\n );\n result.onStdOut.subscribe(data => {\n this.logger.verbose(data.toString());\n });\n result.onStdErr.subscribe(data => {\n this.logger.verbose(data.toString());\n });\n result.start();\n await this.waitFirstCompilationCompleted(result);\n this.logger.log(\"Successfully complied\");\n return result;\n }\n\n private async waitFirstCompilationCompleted(result: ShellProcessHandle): Promise<void> {\n await result.waitOutputIncludesString(\"Successfully compiled\");\n }\n\n private async createBuildResultWatcher(pathToGeneratorOutputDir: string): Promise<FSWatcher> {\n const maskToObserveGeneratorChanges = [\"Generator/src/**/*.js\", \"index.js\"];\n const watcher = watch(maskToObserveGeneratorChanges, {\n ignoreInitial: true,\n cwd: pathToGeneratorOutputDir,\n ignorePermissionErrors: false,\n usePolling: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },\n });\n const handleAnyFsEventDebounced = _.debounce(() => this.handleUpdate(), 500);\n watcher.on(\"all\", handleAnyFsEventDebounced);\n watcher.on(\"error\", handleAnyFsEventDebounced);\n // @ts-ignore\n return watcher;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,119 +3,41 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createAsyncGenerator = createAsyncGenerator;
7
- var _child_process = require("child_process");
8
- var _IterableUtils = require("../../../../../Common/IterableUtils");
6
+ exports.createAsyncGenerator = void 0;
9
7
  var _GeneratorRequireUtils = require("./GeneratorRequireUtils");
10
- /* eslint-disable no-console */
11
-
8
+ var _GeneratorPool = require("./GeneratorPool");
12
9
  class GeneratorAsyncProxy {
13
- constructor(pathToGeneratorRootDir, purgeCache, useGeneratorRestarting) {
14
- this.pathToGeneratorRootDir = void 0;
15
- this.generatorSourcesImporter = void 0;
16
- this.purgeCache = void 0;
17
- this.useGeneratorRestarting = void 0;
18
- this.generatorProcess = void 0;
19
- this.maxRequestNumber = 0;
20
- this.processSugarDeferredMap = new Map();
21
- this.useGeneratorRestarting = useGeneratorRestarting;
22
- this.pathToGeneratorRootDir = pathToGeneratorRootDir;
23
- this.purgeCache = purgeCache;
24
- this.generatorSourcesImporter = new _GeneratorRequireUtils.GeneratorSourcesImporter(this.pathToGeneratorRootDir, this.purgeCache);
25
- }
26
- async getLocalizedSugar(sugarFiles, resources) {
27
- const localizationEntryPoint = await this.generatorSourcesImporter.importLocalization();
28
- if (localizationEntryPoint == undefined) {
29
- throw new Error("Данная версия генератора не поддерживает локализацию.");
30
- }
31
- return localizationEntryPoint.getLocalizedSugar(sugarFiles, resources);
32
- }
33
- async getDictionary(sugarFiles, resources) {
34
- const localizationEntryPoint = await this.generatorSourcesImporter.importLocalization();
35
- if (localizationEntryPoint == undefined) {
36
- throw new Error("Данная версия генератора не поддерживает локализацию.");
37
- }
38
- return localizationEntryPoint.getDictionary(sugarFiles, resources);
39
- }
40
- async readSources(formSourcesPath, farmDirectory) {
41
- const readSources = await this.generatorSourcesImporter.importReadSources();
42
- return await readSources(formSourcesPath, farmDirectory);
43
- }
44
- async getSugarTexts(formSourcesPath, farmDirectory) {
45
- const getSugarTexts = await this.generatorSourcesImporter.importGetSugarTexts();
46
- return await getSugarTexts(formSourcesPath, farmDirectory);
47
- }
48
- async getAllDependencies(formSourcesPath, farmDirectory) {
49
- const getAllDependencies = await this.generatorSourcesImporter.importGetAllDependencies();
50
- return await getAllDependencies(formSourcesPath, farmDirectory);
51
- }
52
- async supportsDependenciesExtraction() {
53
- const getAllDependenciesHash = await this.generatorSourcesImporter.importGetAllDependenciesHash();
54
- return getAllDependenciesHash != undefined;
55
- }
56
- async getAllDependenciesHash(formSourcesPath, farmDirectory) {
57
- const getAllDependenciesHash = await this.generatorSourcesImporter.importGetAllDependenciesHash();
58
- return await getAllDependenciesHash(formSourcesPath, farmDirectory);
10
+ constructor(generatorPath) {
11
+ this.generatorPath = void 0;
12
+ this.pool = void 0;
13
+ this.readSources = void 0;
14
+ this.getSugarTexts = void 0;
15
+ this.getAllDependencies = void 0;
16
+ this.getAllDependenciesHash = void 0;
17
+ this.getDictionary = void 0;
18
+ this.getLocalizedSugar = void 0;
19
+ this.generatorPath = generatorPath;
20
+ const generator = (0, _GeneratorRequireUtils.importGenerator)(generatorPath);
21
+ this.readSources = generator.readSources;
22
+ this.getSugarTexts = generator.getSugarTexts;
23
+ this.getAllDependencies = generator.getAllDependencies;
24
+ this.getAllDependenciesHash = generator.getAllDependenciesHash;
25
+ this.getDictionary = generator.getDictionary;
26
+ this.getLocalizedSugar = generator.getLocalizedSugar;
59
27
  }
60
28
  async readSourcesAndProcessSugar(formSourcesPath, farmDirectory, generationOptions) {
61
- this.maxRequestNumber++;
62
- const currentRequestNumber = this.maxRequestNumber;
63
- const promise = new Promise((resolve, reject) => {
64
- this.processSugarDeferredMap.set(currentRequestNumber, {
65
- resolve: resolve,
66
- reject: reject
67
- });
68
- });
69
- if (!this.generatorProcess) {
70
- this.generatorProcess = this.forkReadSourcesAndProcessSugarWorker();
71
- }
72
- if (this.useGeneratorRestarting) {
73
- if (this.maxRequestNumber % 10 === 0) {
74
- console.log("Restarting generator");
75
- this.generatorProcess.kill();
76
- this.generatorProcess = undefined;
77
- this.generatorProcess = this.forkReadSourcesAndProcessSugarWorker();
78
- console.log("Restarted generator");
79
- }
29
+ if (!this.pool) {
30
+ this.pool = new _GeneratorPool.GeneratorPool(this.generatorPath);
80
31
  }
81
- this.generatorProcess.send([this.pathToGeneratorRootDir, formSourcesPath, farmDirectory, generationOptions, this.purgeCache, currentRequestNumber]);
82
- const result = await promise;
83
- this.processSugarDeferredMap.delete(currentRequestNumber);
84
- return result;
32
+ const message = [formSourcesPath, farmDirectory, generationOptions];
33
+ return this.pool.generate(message);
85
34
  }
86
- forkReadSourcesAndProcessSugarWorker() {
87
- const processSugarWorker = (0, _child_process.fork)("./ReadSourcesAndProcessSugarWorker", [], {
88
- cwd: __dirname
89
- });
90
- processSugarWorker.on("message", response => {
91
- const currentDeferred = this.processSugarDeferredMap.get(response.requestNumber);
92
- if (currentDeferred == undefined) {
93
- return;
94
- }
95
- if (response.type === "Error") {
96
- currentDeferred.reject(new Error(response.errorText));
97
- } else {
98
- const formContent = response.generatedForm;
99
- const result = {};
100
- for (const [key, formContentItem] of (0, _IterableUtils.iterateEntries)(formContent)) {
101
- result[key] = typeof formContentItem === "string" ? formContentItem : Buffer.from(formContentItem.payload, formContentItem.encoding);
102
- }
103
- currentDeferred.resolve(result);
104
- }
105
- });
106
- processSugarWorker.on("error", error => {
107
- throw error;
108
- });
109
- return processSugarWorker;
35
+ async dispose() {
36
+ var _this$pool;
37
+ await ((_this$pool = this.pool) === null || _this$pool === void 0 ? void 0 : _this$pool.dispose());
38
+ this.pool = undefined;
110
39
  }
111
40
  }
112
- const generatorsCache = new Map();
113
- function createAsyncGenerator(pathToGeneratorRootDir, purgeCache, useGeneratorRestarting) {
114
- let result = generatorsCache.get(pathToGeneratorRootDir);
115
- if (result == undefined) {
116
- result = new GeneratorAsyncProxy(pathToGeneratorRootDir, purgeCache, useGeneratorRestarting);
117
- generatorsCache.set(pathToGeneratorRootDir, result);
118
- }
119
- return result;
120
- }
41
+ const createAsyncGenerator = generatorPath => new GeneratorAsyncProxy(generatorPath);
42
+ exports.createAsyncGenerator = createAsyncGenerator;
121
43
  //# sourceMappingURL=CreateAsyncGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateAsyncGenerator.js","names":["_child_process","require","_IterableUtils","_GeneratorRequireUtils","GeneratorAsyncProxy","constructor","pathToGeneratorRootDir","purgeCache","useGeneratorRestarting","generatorSourcesImporter","generatorProcess","maxRequestNumber","processSugarDeferredMap","Map","GeneratorSourcesImporter","getLocalizedSugar","sugarFiles","resources","localizationEntryPoint","importLocalization","undefined","Error","getDictionary","readSources","formSourcesPath","farmDirectory","importReadSources","getSugarTexts","importGetSugarTexts","getAllDependencies","importGetAllDependencies","supportsDependenciesExtraction","getAllDependenciesHash","importGetAllDependenciesHash","readSourcesAndProcessSugar","generationOptions","currentRequestNumber","promise","Promise","resolve","reject","set","forkReadSourcesAndProcessSugarWorker","console","log","kill","send","result","delete","processSugarWorker","fork","cwd","__dirname","on","response","currentDeferred","get","requestNumber","type","errorText","formContent","generatedForm","key","formContentItem","iterateEntries","Buffer","from","payload","encoding","error","generatorsCache","createAsyncGenerator"],"sources":["../../../../../../src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { ChildProcess, fork } from \"child_process\";\n\nimport {\n FormGenerator,\n GeneratedForm,\n GenerationOptions,\n LocalizationDictionaryContent,\n} from \"../../Form/GenerateForm\";\nimport { FormResources, FormSource, SugarContent } from \"../../FormSource\";\nimport { iterateEntries } from \"../../../../../Common/IterableUtils\";\nimport { ExtractorResult } from \"../../../../../Common/TextExtractor/TextExtractorTypes\";\n\nimport { GeneratorSourcesImporter } from \"./GeneratorRequireUtils\";\nimport type { CallResponse } from \"./ReadSourcesAndProcessSugarWorker\";\n\ninterface ProcessSugarDeferred {\n resolve: (result: GeneratedForm) => void;\n reject: (error: unknown) => void;\n}\n\nclass GeneratorAsyncProxy implements FormGenerator {\n private readonly pathToGeneratorRootDir: string;\n private readonly generatorSourcesImporter: GeneratorSourcesImporter;\n private readonly purgeCache: boolean;\n private readonly useGeneratorRestarting: boolean;\n private generatorProcess?: ChildProcess;\n private maxRequestNumber = 0;\n private readonly processSugarDeferredMap: Map<number, ProcessSugarDeferred> = new Map();\n\n public constructor(pathToGeneratorRootDir: string, purgeCache: boolean, useGeneratorRestarting: boolean) {\n this.useGeneratorRestarting = useGeneratorRestarting;\n this.pathToGeneratorRootDir = pathToGeneratorRootDir;\n this.purgeCache = purgeCache;\n this.generatorSourcesImporter = new GeneratorSourcesImporter(this.pathToGeneratorRootDir, this.purgeCache);\n }\n\n public async getLocalizedSugar(sugarFiles: SugarContent, resources: FormResources): Promise<SugarContent> {\n const localizationEntryPoint = await this.generatorSourcesImporter.importLocalization();\n if (localizationEntryPoint == undefined) {\n throw new Error(\"Данная версия генератора не поддерживает локализацию.\");\n }\n return localizationEntryPoint.getLocalizedSugar(sugarFiles, resources);\n }\n\n public async getDictionary(\n sugarFiles: SugarContent,\n resources: FormResources\n ): Promise<LocalizationDictionaryContent> {\n const localizationEntryPoint = await this.generatorSourcesImporter.importLocalization();\n if (localizationEntryPoint == undefined) {\n throw new Error(\"Данная версия генератора не поддерживает локализацию.\");\n }\n return localizationEntryPoint.getDictionary(sugarFiles, resources);\n }\n\n public async readSources(formSourcesPath: string, farmDirectory: string): Promise<FormSource> {\n const readSources: FormGenerator[\"readSources\"] = await this.generatorSourcesImporter.importReadSources();\n return await readSources(formSourcesPath, farmDirectory);\n }\n\n public async getSugarTexts(formSourcesPath: string, farmDirectory: string): Promise<ExtractorResult> {\n const getSugarTexts: FormGenerator[\"getSugarTexts\"] = await this.generatorSourcesImporter.importGetSugarTexts();\n return await getSugarTexts(formSourcesPath, farmDirectory);\n }\n\n public async getAllDependencies(formSourcesPath: string, farmDirectory: string): Promise<string[]> {\n const getAllDependencies = await this.generatorSourcesImporter.importGetAllDependencies();\n return await getAllDependencies(formSourcesPath, farmDirectory);\n }\n\n public async supportsDependenciesExtraction(): Promise<boolean> {\n const getAllDependenciesHash = await this.generatorSourcesImporter.importGetAllDependenciesHash();\n return getAllDependenciesHash != undefined;\n }\n\n public async getAllDependenciesHash(formSourcesPath: string, farmDirectory: string): Promise<string> {\n const getAllDependenciesHash = await this.generatorSourcesImporter.importGetAllDependenciesHash();\n return await getAllDependenciesHash(formSourcesPath, farmDirectory);\n }\n\n public async readSourcesAndProcessSugar(\n formSourcesPath: string,\n farmDirectory: string,\n generationOptions?: GenerationOptions\n ): Promise<GeneratedForm> {\n this.maxRequestNumber++;\n const currentRequestNumber = this.maxRequestNumber;\n const promise = new Promise<GeneratedForm>((resolve, reject) => {\n this.processSugarDeferredMap.set(currentRequestNumber, {\n resolve: resolve,\n reject: reject,\n });\n });\n\n if (!this.generatorProcess) {\n this.generatorProcess = this.forkReadSourcesAndProcessSugarWorker();\n }\n if (this.useGeneratorRestarting) {\n if (this.maxRequestNumber % 10 === 0) {\n console.log(\"Restarting generator\");\n this.generatorProcess.kill();\n this.generatorProcess = undefined;\n this.generatorProcess = this.forkReadSourcesAndProcessSugarWorker();\n console.log(\"Restarted generator\");\n }\n }\n\n this.generatorProcess.send([\n this.pathToGeneratorRootDir,\n formSourcesPath,\n farmDirectory,\n generationOptions,\n this.purgeCache,\n currentRequestNumber,\n ]);\n\n const result = await promise;\n this.processSugarDeferredMap.delete(currentRequestNumber);\n return result;\n }\n\n private forkReadSourcesAndProcessSugarWorker(): ChildProcess {\n const processSugarWorker = fork(\"./ReadSourcesAndProcessSugarWorker\", [], {\n cwd: __dirname,\n });\n\n processSugarWorker.on(\"message\", (response: CallResponse) => {\n const currentDeferred = this.processSugarDeferredMap.get(response.requestNumber);\n if (currentDeferred == undefined) {\n return;\n }\n if (response.type === \"Error\") {\n currentDeferred.reject(new Error(response.errorText));\n } else {\n const formContent = response.generatedForm;\n const result: GeneratedForm = {};\n\n for (const [key, formContentItem] of iterateEntries(formContent)) {\n result[key] =\n typeof formContentItem === \"string\"\n ? formContentItem\n : Buffer.from(formContentItem.payload, formContentItem.encoding);\n }\n\n currentDeferred.resolve(result);\n }\n });\n\n processSugarWorker.on(\"error\", error => {\n throw error;\n });\n\n return processSugarWorker;\n }\n}\n\nconst generatorsCache: Map<string, GeneratorAsyncProxy> = new Map();\n\nexport function createAsyncGenerator(\n pathToGeneratorRootDir: string,\n purgeCache: boolean,\n useGeneratorRestarting: boolean\n): FormGenerator {\n let result = generatorsCache.get(pathToGeneratorRootDir);\n if (result == undefined) {\n result = new GeneratorAsyncProxy(pathToGeneratorRootDir, purgeCache, useGeneratorRestarting);\n generatorsCache.set(pathToGeneratorRootDir, result);\n }\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CreateAsyncGenerator.js","names":["_GeneratorRequireUtils","require","_GeneratorPool","GeneratorAsyncProxy","constructor","generatorPath","pool","readSources","getSugarTexts","getAllDependencies","getAllDependenciesHash","getDictionary","getLocalizedSugar","generator","importGenerator","readSourcesAndProcessSugar","formSourcesPath","farmDirectory","generationOptions","GeneratorPool","message","generate","dispose","_this$pool","undefined","createAsyncGenerator","exports"],"sources":["../../../../../../src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.ts"],"sourcesContent":["import { FormGenerator, GeneratedForm, GenerationOptions } from \"../../Form/GenerateForm\";\n\nimport { importGenerator } from \"./GeneratorRequireUtils\";\nimport { GeneratorPool } from \"./GeneratorPool\";\nimport type { CallMessage } from \"./ReadSourcesAndProcessSugarWorker\";\n\nclass GeneratorAsyncProxy implements FormGenerator {\n private readonly generatorPath: string;\n private pool?: GeneratorPool;\n\n public readonly readSources: FormGenerator[\"readSources\"];\n\n public readonly getSugarTexts: FormGenerator[\"getSugarTexts\"];\n public readonly getAllDependencies: FormGenerator[\"getAllDependencies\"];\n public readonly getAllDependenciesHash: FormGenerator[\"getAllDependenciesHash\"];\n public readonly getDictionary: FormGenerator[\"getDictionary\"];\n public readonly getLocalizedSugar: FormGenerator[\"getLocalizedSugar\"];\n\n public constructor(generatorPath: string) {\n this.generatorPath = generatorPath;\n const generator = importGenerator(generatorPath);\n this.readSources = generator.readSources;\n this.getSugarTexts = generator.getSugarTexts;\n this.getAllDependencies = generator.getAllDependencies;\n this.getAllDependenciesHash = generator.getAllDependenciesHash;\n this.getDictionary = generator.getDictionary;\n this.getLocalizedSugar = generator.getLocalizedSugar;\n }\n\n public async readSourcesAndProcessSugar(\n formSourcesPath: string,\n farmDirectory: string,\n generationOptions?: GenerationOptions\n ): Promise<GeneratedForm> {\n if (!this.pool) {\n this.pool = new GeneratorPool(this.generatorPath);\n }\n const message: CallMessage = [formSourcesPath, farmDirectory, generationOptions];\n return this.pool.generate(message);\n }\n\n public async dispose(): Promise<void> {\n await this.pool?.dispose();\n this.pool = undefined;\n }\n}\n\nexport const createAsyncGenerator = (generatorPath: string): FormGenerator => new GeneratorAsyncProxy(generatorPath);\n"],"mappings":";;;;;;AAEA,IAAAA,sBAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAGA,MAAME,mBAAmB,CAA0B;EAYxCC,WAAWA,CAACC,aAAqB,EAAE;IAAA,KAXzBA,aAAa;IAAA,KACtBC,IAAI;IAAA,KAEIC,WAAW;IAAA,KAEXC,aAAa;IAAA,KACbC,kBAAkB;IAAA,KAClBC,sBAAsB;IAAA,KACtBC,aAAa;IAAA,KACbC,iBAAiB;IAG7B,IAAI,CAACP,aAAa,GAAGA,aAAa;IAClC,MAAMQ,SAAS,GAAG,IAAAC,sCAAe,EAACT,aAAa,CAAC;IAChD,IAAI,CAACE,WAAW,GAAGM,SAAS,CAACN,WAAW;IACxC,IAAI,CAACC,aAAa,GAAGK,SAAS,CAACL,aAAa;IAC5C,IAAI,CAACC,kBAAkB,GAAGI,SAAS,CAACJ,kBAAkB;IACtD,IAAI,CAACC,sBAAsB,GAAGG,SAAS,CAACH,sBAAsB;IAC9D,IAAI,CAACC,aAAa,GAAGE,SAAS,CAACF,aAAa;IAC5C,IAAI,CAACC,iBAAiB,GAAGC,SAAS,CAACD,iBAAiB;EACxD;EAEA,MAAaG,0BAA0BA,CACnCC,eAAuB,EACvBC,aAAqB,EACrBC,iBAAqC,EACf;IACtB,IAAI,CAAC,IAAI,CAACZ,IAAI,EAAE;MACZ,IAAI,CAACA,IAAI,GAAG,IAAIa,4BAAa,CAAC,IAAI,CAACd,aAAa,CAAC;IACrD;IACA,MAAMe,OAAoB,GAAG,CAACJ,eAAe,EAAEC,aAAa,EAAEC,iBAAiB,CAAC;IAChF,OAAO,IAAI,CAACZ,IAAI,CAACe,QAAQ,CAACD,OAAO,CAAC;EACtC;EAEA,MAAaE,OAAOA,CAAA,EAAkB;IAAA,IAAAC,UAAA;IAClC,QAAAA,UAAA,GAAM,IAAI,CAACjB,IAAI,cAAAiB,UAAA,uBAATA,UAAA,CAAWD,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAChB,IAAI,GAAGkB,SAAS;EACzB;AACJ;AAEO,MAAMC,oBAAoB,GAAIpB,aAAqB,IAAoB,IAAIF,mBAAmB,CAACE,aAAa,CAAC;AAACqB,OAAA,CAAAD,oBAAA,GAAAA,oBAAA","ignoreList":[]}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.GeneratorPool = void 0;
8
+ var _nodePath = _interopRequireDefault(require("node:path"));
9
+ var _ThreadPool = require("../../../../../Common/multithread/ThreadPool");
10
+ var _IterableUtils = require("../../../../../Common/IterableUtils");
11
+ const WORKER_MAX_OLD_GENERATION_MB = 512;
12
+
13
+ // Candy always runs from compiled `distr/` where `.js` file exists.
14
+ const WORKER_JS_FILENAME = "ReadSourcesAndProcessSugarWorker.js";
15
+ const defaultWorkerScriptPath = _nodePath.default.join(__dirname, WORKER_JS_FILENAME);
16
+ class GeneratorPool {
17
+ constructor(generatorPath, options = {}) {
18
+ this.pool = void 0;
19
+ const {
20
+ maxWorkers = 1,
21
+ workerPath = defaultWorkerScriptPath
22
+ } = options;
23
+ this.pool = new _ThreadPool.ThreadPool({
24
+ workerPath: workerPath,
25
+ size: Math.max(1, maxWorkers),
26
+ workerOptions: {
27
+ workerData: {
28
+ generatorPath: generatorPath
29
+ },
30
+ resourceLimits: {
31
+ maxOldGenerationSizeMb: WORKER_MAX_OLD_GENERATION_MB
32
+ }
33
+ }
34
+ });
35
+ }
36
+ async generate(message) {
37
+ if (!this.pool) {
38
+ throw new Error("GeneratorPool: exec on disposed pool");
39
+ }
40
+ const response = await this.pool.exec(message);
41
+ if (response.type === "Error") {
42
+ throw new Error(response.errorText);
43
+ }
44
+ return this.reconstructForm(response.generatedForm);
45
+ }
46
+ async dispose() {
47
+ var _this$pool;
48
+ await ((_this$pool = this.pool) === null || _this$pool === void 0 ? void 0 : _this$pool.dispose());
49
+ this.pool = undefined;
50
+ }
51
+ reconstructForm(formContent) {
52
+ const result = {};
53
+ for (const [key, item] of (0, _IterableUtils.iterateEntries)(formContent)) {
54
+ // Transferred ArrayBuffer -> reconstruct a Buffer (zero-copy view).
55
+ // String values pass through as-is.
56
+ result[key] = item instanceof ArrayBuffer ? Buffer.from(item) : item;
57
+ }
58
+ return result;
59
+ }
60
+ }
61
+ exports.GeneratorPool = GeneratorPool;
62
+ //# sourceMappingURL=GeneratorPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeneratorPool.js","names":["_nodePath","_interopRequireDefault","require","_ThreadPool","_IterableUtils","WORKER_MAX_OLD_GENERATION_MB","WORKER_JS_FILENAME","defaultWorkerScriptPath","path","join","__dirname","GeneratorPool","constructor","generatorPath","options","pool","maxWorkers","workerPath","ThreadPool","size","Math","max","workerOptions","workerData","resourceLimits","maxOldGenerationSizeMb","generate","message","Error","response","exec","type","errorText","reconstructForm","generatedForm","dispose","_this$pool","undefined","formContent","result","key","item","iterateEntries","ArrayBuffer","Buffer","from","exports"],"sources":["../../../../../../src/BuildTasks/Generator/GeneratorWorker/GeneratorPool.ts"],"sourcesContent":["import path from \"node:path\";\n\nimport { ThreadPool } from \"../../../../../Common/multithread/ThreadPool\";\nimport { GeneratedForm } from \"../../Form/GenerateForm\";\nimport { iterateEntries } from \"../../../../../Common/IterableUtils\";\n\nimport type { CallMessage, CallResponse, GeneratedFormWorkerMessage } from \"./ReadSourcesAndProcessSugarWorker\";\n\nconst WORKER_MAX_OLD_GENERATION_MB = 512;\n\n// Candy always runs from compiled `distr/` where `.js` file exists.\nconst WORKER_JS_FILENAME = \"ReadSourcesAndProcessSugarWorker.js\";\nconst defaultWorkerScriptPath = path.join(__dirname, WORKER_JS_FILENAME);\n\ninterface Options {\n workerPath?: string;\n maxWorkers?: number;\n}\n\nexport class GeneratorPool {\n private pool?: ThreadPool;\n\n public constructor(generatorPath: string, options: Options = {}) {\n const { maxWorkers = 1, workerPath = defaultWorkerScriptPath } = options;\n this.pool = new ThreadPool({\n workerPath: workerPath,\n size: Math.max(1, maxWorkers),\n workerOptions: {\n workerData: { generatorPath: generatorPath },\n resourceLimits: { maxOldGenerationSizeMb: WORKER_MAX_OLD_GENERATION_MB },\n },\n });\n }\n\n public async generate(message: CallMessage): Promise<GeneratedForm> {\n if (!this.pool) {\n throw new Error(\"GeneratorPool: exec on disposed pool\");\n }\n const response = await this.pool.exec<CallMessage, CallResponse>(message);\n if (response.type === \"Error\") {\n throw new Error(response.errorText);\n }\n return this.reconstructForm(response.generatedForm);\n }\n\n public async dispose(): Promise<void> {\n await this.pool?.dispose();\n this.pool = undefined;\n }\n\n private reconstructForm(formContent: GeneratedFormWorkerMessage): GeneratedForm {\n const result: GeneratedForm = {};\n for (const [key, item] of iterateEntries(formContent)) {\n // Transferred ArrayBuffer -> reconstruct a Buffer (zero-copy view).\n // String values pass through as-is.\n result[key] = item instanceof ArrayBuffer ? Buffer.from(item) : item;\n }\n return result;\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,cAAA,GAAAF,OAAA;AAIA,MAAMG,4BAA4B,GAAG,GAAG;;AAExC;AACA,MAAMC,kBAAkB,GAAG,qCAAqC;AAChE,MAAMC,uBAAuB,GAAGC,iBAAI,CAACC,IAAI,CAACC,SAAS,EAAEJ,kBAAkB,CAAC;AAOjE,MAAMK,aAAa,CAAC;EAGhBC,WAAWA,CAACC,aAAqB,EAAEC,OAAgB,GAAG,CAAC,CAAC,EAAE;IAAA,KAFzDC,IAAI;IAGR,MAAM;MAAEC,UAAU,GAAG,CAAC;MAAEC,UAAU,GAAGV;IAAwB,CAAC,GAAGO,OAAO;IACxE,IAAI,CAACC,IAAI,GAAG,IAAIG,sBAAU,CAAC;MACvBD,UAAU,EAAEA,UAAU;MACtBE,IAAI,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEL,UAAU,CAAC;MAC7BM,aAAa,EAAE;QACXC,UAAU,EAAE;UAAEV,aAAa,EAAEA;QAAc,CAAC;QAC5CW,cAAc,EAAE;UAAEC,sBAAsB,EAAEpB;QAA6B;MAC3E;IACJ,CAAC,CAAC;EACN;EAEA,MAAaqB,QAAQA,CAACC,OAAoB,EAA0B;IAChE,IAAI,CAAC,IAAI,CAACZ,IAAI,EAAE;MACZ,MAAM,IAAIa,KAAK,CAAC,sCAAsC,CAAC;IAC3D;IACA,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACd,IAAI,CAACe,IAAI,CAA4BH,OAAO,CAAC;IACzE,IAAIE,QAAQ,CAACE,IAAI,KAAK,OAAO,EAAE;MAC3B,MAAM,IAAIH,KAAK,CAACC,QAAQ,CAACG,SAAS,CAAC;IACvC;IACA,OAAO,IAAI,CAACC,eAAe,CAACJ,QAAQ,CAACK,aAAa,CAAC;EACvD;EAEA,MAAaC,OAAOA,CAAA,EAAkB;IAAA,IAAAC,UAAA;IAClC,QAAAA,UAAA,GAAM,IAAI,CAACrB,IAAI,cAAAqB,UAAA,uBAATA,UAAA,CAAWD,OAAO,CAAC,CAAC;IAC1B,IAAI,CAACpB,IAAI,GAAGsB,SAAS;EACzB;EAEQJ,eAAeA,CAACK,WAAuC,EAAiB;IAC5E,MAAMC,MAAqB,GAAG,CAAC,CAAC;IAChC,KAAK,MAAM,CAACC,GAAG,EAAEC,IAAI,CAAC,IAAI,IAAAC,6BAAc,EAACJ,WAAW,CAAC,EAAE;MACnD;MACA;MACAC,MAAM,CAACC,GAAG,CAAC,GAAGC,IAAI,YAAYE,WAAW,GAAGC,MAAM,CAACC,IAAI,CAACJ,IAAI,CAAC,GAAGA,IAAI;IACxE;IACA,OAAOF,MAAM;EACjB;AACJ;AAACO,OAAA,CAAAnC,aAAA,GAAAA,aAAA","ignoreList":[]}
@@ -3,44 +3,37 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.GeneratorSourcesValidator = exports.GeneratorSourcesImporter = void 0;
6
+ exports.importGenerator = exports.GeneratorSourcesValidator = void 0;
7
7
  var _ToolsApiClient = require("../../../Commons/ApiClient/ToolsApiClient");
8
- var _RequireUncached = require("./RequireUncached");
9
- /* eslint-disable @typescript-eslint/no-unsafe-return */
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
9
 
11
- class GeneratorSourcesImporter {
12
- constructor(generatorPath, purgeCache) {
13
- this.generatorPath = void 0;
14
- this.purgeCache = void 0;
15
- this.generatorPath = generatorPath;
16
- this.purgeCache = purgeCache;
17
- }
18
- async importReadSources() {
19
- return this.require("readSources");
20
- }
21
- async importGetSugarTexts() {
22
- return this.require("getSugarTexts");
23
- }
24
- async importGetAllDependencies() {
25
- return this.require("getAllDependencies");
26
- }
27
- async importGetAllDependenciesHash() {
28
- return this.require("getAllDependenciesHash");
29
- }
30
- async importProcessSugar() {
31
- return this.require("processSugar");
32
- }
33
- async importLocalization() {
34
- return this.require("localization");
35
- }
36
- async require(name) {
37
- return this.requireUncachedAllNamed(this.generatorPath)[name];
38
- }
39
- requireUncachedAllNamed(module) {
40
- return (0, _RequireUncached.requireUncachedAllNamed)(module, this.purgeCache);
41
- }
42
- }
43
- exports.GeneratorSourcesImporter = GeneratorSourcesImporter;
10
+ const isEsModule = obj => Boolean(obj && obj.__esModule);
11
+ const interopRequireDefault = obj => isEsModule(obj) ? obj : {
12
+ default: obj
13
+ };
14
+ // eslint-disable-next-line no-warning-comments
15
+ // TODO(04-06-2027) -- избавиться от этой обертки, импортировать движок напрямую
16
+ /**
17
+ * Эта обертка существует для сохранения обратной совместимости
18
+ * между Tools и движками, экспортирующими `getDictionary` и `getLocalizedSugar`
19
+ * единым объектом `localization`
20
+ */
21
+ const importGenerator = path => {
22
+ var _generator$getDiction, _generator$getLocaliz;
23
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
24
+ const generator = interopRequireDefault(require(path));
25
+ const legacyLocalization = generator.localization;
26
+ return {
27
+ processSugar: generator.processSugar,
28
+ readSources: generator.readSources,
29
+ getSugarTexts: generator.getSugarTexts,
30
+ getAllDependencies: generator.getAllDependencies,
31
+ getAllDependenciesHash: generator.getAllDependenciesHash,
32
+ getDictionary: (_generator$getDiction = generator.getDictionary) !== null && _generator$getDiction !== void 0 ? _generator$getDiction : legacyLocalization.getDictionary,
33
+ getLocalizedSugar: (_generator$getLocaliz = generator.getLocalizedSugar) !== null && _generator$getLocaliz !== void 0 ? _generator$getLocaliz : legacyLocalization.getLocalizedSugar
34
+ };
35
+ };
36
+ exports.importGenerator = importGenerator;
44
37
  class GeneratorSourcesValidator {
45
38
  constructor(generationOptions) {
46
39
  this.isLocalDebug = void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"GeneratorRequireUtils.js","names":["_ToolsApiClient","require","_RequireUncached","GeneratorSourcesImporter","constructor","generatorPath","purgeCache","importReadSources","importGetSugarTexts","importGetAllDependencies","importGetAllDependenciesHash","importProcessSugar","importLocalization","name","requireUncachedAllNamed","module","exports","GeneratorSourcesValidator","generationOptions","isLocalDebug","apiClient","validate","formContent","compileNormalizationRulesOrDie","_compileResult$diagno","_compileResult$diagno2","normalizationRules","compileResult","compileNormalizationRules","diagnosticMessages","length","Error","JSON","stringify","sourceText","resourcesHash","ToolsApiClient"],"sources":["../../../../../../src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-return */\nimport { FormGenerator, GeneratedForm, GenerationOptions, LocalizationEntryPoint } from \"../../Form/GenerateForm\";\nimport { FormResources, SugarContent } from \"../../FormSource\";\nimport { ToolsApiClient } from \"../../../Commons/ApiClient/ToolsApiClient\";\n\nimport { RequireDefaultResult, requireUncachedAllNamed } from \"./RequireUncached\";\n\ntype ProcessSugarFunc = (\n sugarFiles: SugarContent,\n resources: FormResources,\n generationOptions?: GenerationOptions\n) => GeneratedForm | Promise<GeneratedForm>;\n\nexport class GeneratorSourcesImporter {\n private readonly generatorPath: string;\n private readonly purgeCache: boolean;\n\n public constructor(generatorPath: string, purgeCache: boolean) {\n this.generatorPath = generatorPath;\n this.purgeCache = purgeCache;\n }\n\n public async importReadSources(): Promise<FormGenerator[\"readSources\"]> {\n return this.require(\"readSources\");\n }\n\n public async importGetSugarTexts(): Promise<FormGenerator[\"getSugarTexts\"]> {\n return this.require(\"getSugarTexts\");\n }\n\n public async importGetAllDependencies(): Promise<FormGenerator[\"getAllDependencies\"]> {\n return this.require(\"getAllDependencies\");\n }\n\n public async importGetAllDependenciesHash(): Promise<FormGenerator[\"getAllDependenciesHash\"]> {\n return this.require(\"getAllDependenciesHash\");\n }\n\n public async importProcessSugar(): Promise<ProcessSugarFunc> {\n return this.require(\"processSugar\");\n }\n\n public async importLocalization(): Promise<LocalizationEntryPoint> {\n return this.require(\"localization\");\n }\n\n private async require(name: string) {\n return this.requireUncachedAllNamed(this.generatorPath)[name];\n }\n\n private requireUncachedAllNamed(module: string): RequireDefaultResult {\n return requireUncachedAllNamed(module, this.purgeCache);\n }\n}\n\nexport class GeneratorSourcesValidator {\n private readonly isLocalDebug: boolean;\n private readonly apiClient: ToolsApiClient;\n\n public constructor(generationOptions: GenerationOptions | undefined) {\n this.isLocalDebug = generationOptions?.resourcesHash == \"local-hash\";\n this.apiClient = new ToolsApiClient();\n }\n\n public validate = async (formContent: GeneratedForm): Promise<void> => {\n if (!this.isLocalDebug) {\n return;\n }\n await this.compileNormalizationRulesOrDie(formContent);\n };\n\n private readonly compileNormalizationRulesOrDie = async (formContent: GeneratedForm): Promise<void> => {\n const normalizationRules = formContent[\"ServerSide.normalize\"];\n if (!normalizationRules || typeof normalizationRules !== \"string\") {\n return;\n }\n const compileResult = await this.apiClient.compileNormalizationRules(normalizationRules, \"formulas\");\n if (!compileResult || (compileResult?.diagnosticMessages?.length ?? 0) == 0) {\n return;\n }\n\n throw Error(\n `Invalid ServerSide.normalize:\\r\\n\n ${JSON.stringify(compileResult.diagnosticMessages)}\\r\\n\n ${compileResult.sourceText}`\n );\n };\n}\n"],"mappings":";;;;;;AAGA,IAAAA,eAAA,GAAAC,OAAA;AAEA,IAAAC,gBAAA,GAAAD,OAAA;AALA;;AAaO,MAAME,wBAAwB,CAAC;EAI3BC,WAAWA,CAACC,aAAqB,EAAEC,UAAmB,EAAE;IAAA,KAH9CD,aAAa;IAAA,KACbC,UAAU;IAGvB,IAAI,CAACD,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACC,UAAU,GAAGA,UAAU;EAChC;EAEA,MAAaC,iBAAiBA,CAAA,EAA0C;IACpE,OAAO,IAAI,CAACN,OAAO,CAAC,aAAa,CAAC;EACtC;EAEA,MAAaO,mBAAmBA,CAAA,EAA4C;IACxE,OAAO,IAAI,CAACP,OAAO,CAAC,eAAe,CAAC;EACxC;EAEA,MAAaQ,wBAAwBA,CAAA,EAAiD;IAClF,OAAO,IAAI,CAACR,OAAO,CAAC,oBAAoB,CAAC;EAC7C;EAEA,MAAaS,4BAA4BA,CAAA,EAAqD;IAC1F,OAAO,IAAI,CAACT,OAAO,CAAC,wBAAwB,CAAC;EACjD;EAEA,MAAaU,kBAAkBA,CAAA,EAA8B;IACzD,OAAO,IAAI,CAACV,OAAO,CAAC,cAAc,CAAC;EACvC;EAEA,MAAaW,kBAAkBA,CAAA,EAAoC;IAC/D,OAAO,IAAI,CAACX,OAAO,CAAC,cAAc,CAAC;EACvC;EAEA,MAAcA,OAAOA,CAACY,IAAY,EAAE;IAChC,OAAO,IAAI,CAACC,uBAAuB,CAAC,IAAI,CAACT,aAAa,CAAC,CAACQ,IAAI,CAAC;EACjE;EAEQC,uBAAuBA,CAACC,MAAc,EAAwB;IAClE,OAAO,IAAAD,wCAAuB,EAACC,MAAM,EAAE,IAAI,CAACT,UAAU,CAAC;EAC3D;AACJ;AAACU,OAAA,CAAAb,wBAAA,GAAAA,wBAAA;AAEM,MAAMc,yBAAyB,CAAC;EAI5Bb,WAAWA,CAACc,iBAAgD,EAAE;IAAA,KAHpDC,YAAY;IAAA,KACZC,SAAS;IAAA,KAOnBC,QAAQ,GAAG,MAAOC,WAA0B,IAAoB;MACnE,IAAI,CAAC,IAAI,CAACH,YAAY,EAAE;QACpB;MACJ;MACA,MAAM,IAAI,CAACI,8BAA8B,CAACD,WAAW,CAAC;IAC1D,CAAC;IAAA,KAEgBC,8BAA8B,GAAG,MAAOD,WAA0B,IAAoB;MAAA,IAAAE,qBAAA,EAAAC,sBAAA;MACnG,MAAMC,kBAAkB,GAAGJ,WAAW,CAAC,sBAAsB,CAAC;MAC9D,IAAI,CAACI,kBAAkB,IAAI,OAAOA,kBAAkB,KAAK,QAAQ,EAAE;QAC/D;MACJ;MACA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACP,SAAS,CAACQ,yBAAyB,CAACF,kBAAkB,EAAE,UAAU,CAAC;MACpG,IAAI,CAACC,aAAa,IAAI,EAAAH,qBAAA,GAACG,aAAa,aAAbA,aAAa,gBAAAF,sBAAA,GAAbE,aAAa,CAAEE,kBAAkB,cAAAJ,sBAAA,uBAAjCA,sBAAA,CAAmCK,MAAM,cAAAN,qBAAA,cAAAA,qBAAA,GAAI,CAAC,KAAK,CAAC,EAAE;QACzE;MACJ;MAEA,MAAMO,KAAK,CACP;AACZ,eAAeC,IAAI,CAACC,SAAS,CAACN,aAAa,CAACE,kBAAkB,CAAC;AAC/D,eAAeF,aAAa,CAACO,UAAU,EAC/B,CAAC;IACL,CAAC;IA1BG,IAAI,CAACf,YAAY,GAAG,CAAAD,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAEiB,aAAa,KAAI,YAAY;IACpE,IAAI,CAACf,SAAS,GAAG,IAAIgB,8BAAc,CAAC,CAAC;EACzC;AAyBJ;AAACpB,OAAA,CAAAC,yBAAA,GAAAA,yBAAA","ignoreList":[]}
1
+ {"version":3,"file":"GeneratorRequireUtils.js","names":["_ToolsApiClient","require","isEsModule","obj","Boolean","__esModule","interopRequireDefault","default","importGenerator","path","_generator$getDiction","_generator$getLocaliz","generator","legacyLocalization","localization","processSugar","readSources","getSugarTexts","getAllDependencies","getAllDependenciesHash","getDictionary","getLocalizedSugar","exports","GeneratorSourcesValidator","constructor","generationOptions","isLocalDebug","apiClient","validate","formContent","compileNormalizationRulesOrDie","_compileResult$diagno","_compileResult$diagno2","normalizationRules","compileResult","compileNormalizationRules","diagnosticMessages","length","Error","JSON","stringify","sourceText","resourcesHash","ToolsApiClient"],"sources":["../../../../../../src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.ts"],"sourcesContent":["import { FormGenerator, GeneratedForm, GenerationOptions } from \"../../Form/GenerateForm\";\nimport { FormResources, SugarContent } from \"../../FormSource\";\nimport { ToolsApiClient } from \"../../../Commons/ApiClient/ToolsApiClient\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RequireResult = any;\nconst isEsModule = (obj: RequireResult): boolean => Boolean(obj && obj.__esModule);\nconst interopRequireDefault = (obj: RequireResult): RequireResult => (isEsModule(obj) ? obj : { default: obj });\n\ntype ProcessSugarFunc = (\n sugarFiles: SugarContent,\n resources: FormResources,\n generationOptions?: GenerationOptions\n) => GeneratedForm | Promise<GeneratedForm>;\n\ntype LocalizationEntryPoint = Pick<FormGenerator, \"getLocalizedSugar\" | \"getDictionary\">;\n\nexport interface Generator {\n readSources: FormGenerator[\"readSources\"];\n processSugar: ProcessSugarFunc;\n getSugarTexts: FormGenerator[\"getSugarTexts\"];\n getAllDependencies: FormGenerator[\"getAllDependencies\"];\n getAllDependenciesHash: FormGenerator[\"getAllDependenciesHash\"];\n getDictionary: FormGenerator[\"getDictionary\"];\n getLocalizedSugar: FormGenerator[\"getLocalizedSugar\"];\n}\n\n// eslint-disable-next-line no-warning-comments\n// TODO(04-06-2027) -- избавиться от этой обертки, импортировать движок напрямую\n/**\n * Эта обертка существует для сохранения обратной совместимости\n * между Tools и движками, экспортирующими `getDictionary` и `getLocalizedSugar`\n * единым объектом `localization`\n */\nexport const importGenerator = (path: string): Generator => {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const generator = interopRequireDefault(require(path));\n const legacyLocalization = generator.localization as LocalizationEntryPoint;\n return {\n processSugar: generator.processSugar,\n readSources: generator.readSources,\n getSugarTexts: generator.getSugarTexts,\n getAllDependencies: generator.getAllDependencies,\n getAllDependenciesHash: generator.getAllDependenciesHash,\n getDictionary: generator.getDictionary ?? legacyLocalization.getDictionary,\n getLocalizedSugar: generator.getLocalizedSugar ?? legacyLocalization.getLocalizedSugar,\n };\n};\n\nexport class GeneratorSourcesValidator {\n private readonly isLocalDebug: boolean;\n private readonly apiClient: ToolsApiClient;\n\n public constructor(generationOptions: GenerationOptions | undefined) {\n this.isLocalDebug = generationOptions?.resourcesHash == \"local-hash\";\n this.apiClient = new ToolsApiClient();\n }\n\n public validate = async (formContent: GeneratedForm): Promise<void> => {\n if (!this.isLocalDebug) {\n return;\n }\n await this.compileNormalizationRulesOrDie(formContent);\n };\n\n private readonly compileNormalizationRulesOrDie = async (formContent: GeneratedForm): Promise<void> => {\n const normalizationRules = formContent[\"ServerSide.normalize\"];\n if (!normalizationRules || typeof normalizationRules !== \"string\") {\n return;\n }\n const compileResult = await this.apiClient.compileNormalizationRules(normalizationRules, \"formulas\");\n if (!compileResult || (compileResult?.diagnosticMessages?.length ?? 0) == 0) {\n return;\n }\n\n throw Error(\n `Invalid ServerSide.normalize:\\r\\n\n ${JSON.stringify(compileResult.diagnosticMessages)}\\r\\n\n ${compileResult.sourceText}`\n );\n };\n}\n"],"mappings":";;;;;;AAEA,IAAAA,eAAA,GAAAC,OAAA;AAEA;;AAEA,MAAMC,UAAU,GAAIC,GAAkB,IAAcC,OAAO,CAACD,GAAG,IAAIA,GAAG,CAACE,UAAU,CAAC;AAClF,MAAMC,qBAAqB,GAAIH,GAAkB,IAAqBD,UAAU,CAACC,GAAG,CAAC,GAAGA,GAAG,GAAG;EAAEI,OAAO,EAAEJ;AAAI,CAAE;AAoB/G;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMK,eAAe,GAAIC,IAAY,IAAgB;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EACxD;EACA,MAAMC,SAAS,GAAGN,qBAAqB,CAACL,OAAO,CAACQ,IAAI,CAAC,CAAC;EACtD,MAAMI,kBAAkB,GAAGD,SAAS,CAACE,YAAsC;EAC3E,OAAO;IACHC,YAAY,EAAEH,SAAS,CAACG,YAAY;IACpCC,WAAW,EAAEJ,SAAS,CAACI,WAAW;IAClCC,aAAa,EAAEL,SAAS,CAACK,aAAa;IACtCC,kBAAkB,EAAEN,SAAS,CAACM,kBAAkB;IAChDC,sBAAsB,EAAEP,SAAS,CAACO,sBAAsB;IACxDC,aAAa,GAAAV,qBAAA,GAAEE,SAAS,CAACQ,aAAa,cAAAV,qBAAA,cAAAA,qBAAA,GAAIG,kBAAkB,CAACO,aAAa;IAC1EC,iBAAiB,GAAAV,qBAAA,GAAEC,SAAS,CAACS,iBAAiB,cAAAV,qBAAA,cAAAA,qBAAA,GAAIE,kBAAkB,CAACQ;EACzE,CAAC;AACL,CAAC;AAACC,OAAA,CAAAd,eAAA,GAAAA,eAAA;AAEK,MAAMe,yBAAyB,CAAC;EAI5BC,WAAWA,CAACC,iBAAgD,EAAE;IAAA,KAHpDC,YAAY;IAAA,KACZC,SAAS;IAAA,KAOnBC,QAAQ,GAAG,MAAOC,WAA0B,IAAoB;MACnE,IAAI,CAAC,IAAI,CAACH,YAAY,EAAE;QACpB;MACJ;MACA,MAAM,IAAI,CAACI,8BAA8B,CAACD,WAAW,CAAC;IAC1D,CAAC;IAAA,KAEgBC,8BAA8B,GAAG,MAAOD,WAA0B,IAAoB;MAAA,IAAAE,qBAAA,EAAAC,sBAAA;MACnG,MAAMC,kBAAkB,GAAGJ,WAAW,CAAC,sBAAsB,CAAC;MAC9D,IAAI,CAACI,kBAAkB,IAAI,OAAOA,kBAAkB,KAAK,QAAQ,EAAE;QAC/D;MACJ;MACA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACP,SAAS,CAACQ,yBAAyB,CAACF,kBAAkB,EAAE,UAAU,CAAC;MACpG,IAAI,CAACC,aAAa,IAAI,EAAAH,qBAAA,GAACG,aAAa,aAAbA,aAAa,gBAAAF,sBAAA,GAAbE,aAAa,CAAEE,kBAAkB,cAAAJ,sBAAA,uBAAjCA,sBAAA,CAAmCK,MAAM,cAAAN,qBAAA,cAAAA,qBAAA,GAAI,CAAC,KAAK,CAAC,EAAE;QACzE;MACJ;MAEA,MAAMO,KAAK,CACP;AACZ,eAAeC,IAAI,CAACC,SAAS,CAACN,aAAa,CAACE,kBAAkB,CAAC;AAC/D,eAAeF,aAAa,CAACO,UAAU,EAC/B,CAAC;IACL,CAAC;IA1BG,IAAI,CAACf,YAAY,GAAG,CAAAD,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAEiB,aAAa,KAAI,YAAY;IACpE,IAAI,CAACf,SAAS,GAAG,IAAIgB,8BAAc,CAAC,CAAC;EACzC;AAyBJ;AAACrB,OAAA,CAAAC,yBAAA,GAAAA,yBAAA","ignoreList":[]}