@kontur.candy/tools 2.254.0 → 2.256.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 (76) 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/CommonConstants/DefaultServicesUrls.js +1 -3
  5. package/distr/Common/CommonConstants/DefaultServicesUrls.js.map +1 -1
  6. package/distr/Common/IntRangeUtils.js +4 -0
  7. package/distr/Common/IntRangeUtils.js.map +1 -1
  8. package/distr/Common/TypingUtils.js +4 -0
  9. package/distr/Common/TypingUtils.js.map +1 -1
  10. package/distr/Common/async/Channel.js +64 -0
  11. package/distr/Common/async/Channel.js.map +1 -0
  12. package/distr/Common/async/pool/AsyncPool.js +145 -0
  13. package/distr/Common/async/pool/AsyncPool.js.map +1 -0
  14. package/distr/Common/async/pool/FixedPool.js +29 -0
  15. package/distr/Common/async/pool/FixedPool.js.map +1 -0
  16. package/distr/Common/async/pool/LimitedPool.js +81 -0
  17. package/distr/Common/async/pool/LimitedPool.js.map +1 -0
  18. package/distr/Common/async/pool/Registry.js +73 -0
  19. package/distr/Common/async/pool/Registry.js.map +1 -0
  20. package/distr/Common/async/pool/index.js +13 -0
  21. package/distr/Common/async/pool/index.js.map +1 -0
  22. package/distr/Common/ds/LinkedList.js +64 -0
  23. package/distr/Common/ds/LinkedList.js.map +1 -0
  24. package/distr/Common/multithread/ThreadPool.js +74 -0
  25. package/distr/Common/multithread/ThreadPool.js.map +1 -0
  26. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +2 -1
  27. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js.map +1 -1
  28. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +0 -3
  29. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js.map +1 -1
  30. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +1 -1
  31. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js.map +1 -1
  32. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +13 -4
  33. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js.map +1 -1
  34. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +29 -107
  35. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js.map +1 -1
  36. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorPool.js +57 -0
  37. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorPool.js.map +1 -0
  38. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +29 -36
  39. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js.map +1 -1
  40. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +29 -36
  41. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js.map +1 -1
  42. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedThreadWorker.js +14 -0
  43. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedThreadWorker.js.map +1 -0
  44. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +1 -1
  45. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js.map +1 -1
  46. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +0 -10
  47. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js.map +1 -1
  48. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +2 -6
  49. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js.map +1 -1
  50. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +0 -22
  51. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js.map +1 -1
  52. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +1 -3
  53. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js.map +1 -1
  54. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +1 -1
  55. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js.map +1 -1
  56. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +2 -5
  57. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js.map +1 -1
  58. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +0 -10
  59. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js.map +1 -1
  60. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +1 -2
  61. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -1
  62. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +1 -1
  63. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js.map +1 -1
  64. package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js +1 -1
  65. package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js.map +1 -1
  66. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  67. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  68. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +13 -14
  69. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  70. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +13 -14
  71. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  72. package/package.json +1 -1
  73. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +0 -40
  74. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js.map +0 -1
  75. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +0 -19
  76. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js.map +0 -1
@@ -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,57 @@
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
+ // Candy always runs from compiled `distr/` where `.js` file exists.
12
+ const WORKER_JS_FILENAME = "ReadSourcesAndProcessSugarWorker.js";
13
+ const defaultWorkerScriptPath = _nodePath.default.join(__dirname, WORKER_JS_FILENAME);
14
+ class GeneratorPool {
15
+ constructor(generatorPath, options = {}) {
16
+ this.pool = void 0;
17
+ const {
18
+ maxWorkers = 1,
19
+ workerPath = defaultWorkerScriptPath
20
+ } = options;
21
+ this.pool = new _ThreadPool.ThreadPool({
22
+ workerPath: workerPath,
23
+ size: Math.max(1, maxWorkers),
24
+ workerOptions: {
25
+ workerData: {
26
+ generatorPath: generatorPath
27
+ }
28
+ }
29
+ });
30
+ }
31
+ async generate(message) {
32
+ if (!this.pool) {
33
+ throw new Error("GeneratorPool: exec on disposed pool");
34
+ }
35
+ const response = await this.pool.exec(message);
36
+ if (response.type === "Error") {
37
+ throw new Error(response.errorText);
38
+ }
39
+ return this.reconstructForm(response.generatedForm);
40
+ }
41
+ async dispose() {
42
+ var _this$pool;
43
+ await ((_this$pool = this.pool) === null || _this$pool === void 0 ? void 0 : _this$pool.dispose());
44
+ this.pool = undefined;
45
+ }
46
+ reconstructForm(formContent) {
47
+ const result = {};
48
+ for (const [key, item] of (0, _IterableUtils.iterateEntries)(formContent)) {
49
+ // Transferred ArrayBuffer -> reconstruct a Buffer (zero-copy view).
50
+ // String values pass through as-is.
51
+ result[key] = item instanceof ArrayBuffer ? Buffer.from(item) : item;
52
+ }
53
+ return result;
54
+ }
55
+ }
56
+ exports.GeneratorPool = GeneratorPool;
57
+ //# sourceMappingURL=GeneratorPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeneratorPool.js","names":["_nodePath","_interopRequireDefault","require","_ThreadPool","_IterableUtils","WORKER_JS_FILENAME","defaultWorkerScriptPath","path","join","__dirname","GeneratorPool","constructor","generatorPath","options","pool","maxWorkers","workerPath","ThreadPool","size","Math","max","workerOptions","workerData","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\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: { workerData: { generatorPath: generatorPath } },\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;AACA,MAAMG,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;QAAEC,UAAU,EAAE;UAAEV,aAAa,EAAEA;QAAc;MAAE;IAClE,CAAC,CAAC;EACN;EAEA,MAAaW,QAAQA,CAACC,OAAoB,EAA0B;IAChE,IAAI,CAAC,IAAI,CAACV,IAAI,EAAE;MACZ,MAAM,IAAIW,KAAK,CAAC,sCAAsC,CAAC;IAC3D;IACA,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACZ,IAAI,CAACa,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,CAACnB,IAAI,cAAAmB,UAAA,uBAATA,UAAA,CAAWD,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAClB,IAAI,GAAGoB,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,CAAAjC,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":[]}
@@ -1,57 +1,50 @@
1
1
  "use strict";
2
2
 
3
+ var _nodeWorker_threads = require("node:worker_threads");
3
4
  var _IterableUtils = require("../../../../../Common/IterableUtils");
4
5
  var _GeneratorRequireUtils = require("./GeneratorRequireUtils");
5
- var _TypedProcessWorker = require("./TypedProcessWorker");
6
- _TypedProcessWorker.TypedProcessWorker.start(async ([pathToGeneratorProcessSugar, formSourcesPath, farmDirectory, generationOptions, purgeCache, requestNumber], send) => {
6
+ var _TypedThreadWorker = require("./TypedThreadWorker");
7
+ const {
8
+ generatorPath
9
+ } = _nodeWorker_threads.workerData;
10
+ const generator = (0, _GeneratorRequireUtils.importGenerator)(generatorPath);
11
+ (0, _TypedThreadWorker.startWorker)(async ([formPath, farmPath, options], send) => {
7
12
  let formSource;
8
13
  try {
9
- const importer = new _GeneratorRequireUtils.GeneratorSourcesImporter(pathToGeneratorProcessSugar, purgeCache);
10
- const readSources = await importer.importReadSources();
11
- formSource = await readSources(formSourcesPath, farmDirectory);
12
- const processSugar = await importer.importProcessSugar();
13
- const formContent = await processSugar(formSource.sugarContent, formSource.resources, generationOptions);
14
+ formSource = await generator.readSources(formPath, farmPath);
15
+ const formContent = await generator.processSugar(formSource.sugarContent, formSource.resources, options);
14
16
 
15
17
  // eslint-disable-next-line no-warning-comments
16
- // TODO(2026-06-30): временно отключаем валидацию компиляции Flang на бэкенде (исправить в задаче https://yt.skbkontur.ru/issue/FS-9242)
18
+ // TODO(2026-07-31): временно отключаем валидацию компиляции Flang на бэкенде (исправить в задаче https://yt.skbkontur.ru/issue/FS-9242)
17
19
  // const validator = new GeneratorSourcesValidator(generationOptions);
18
20
  // await validator.validate(formContent);
19
21
 
20
22
  const result = {};
21
-
22
- // NOTE Because only JSON are allowed for IPC we need to convert Buffer -> Base64
23
- // Another solution is use a stream, but formContent still need to convert or send by chunks
23
+ const transferList = [];
24
24
  for (const [key, formContentItem] of (0, _IterableUtils.iterateEntries)(formContent)) {
25
- // @ts-ignore
26
- result[key] = formContentItem instanceof Buffer ? {
27
- payload: formContentItem.toString("base64"),
28
- encoding: "base64"
29
- } : formContentItem;
25
+ if (formContentItem instanceof Buffer) {
26
+ // Buffer.buffer is typed as ArrayBuffer | SharedArrayBuffer,
27
+ // but Node.js Buffers never use SharedArrayBuffer in practice.
28
+ const content = formContentItem.buffer.slice(formContentItem.byteOffset, formContentItem.byteOffset + formContentItem.byteLength);
29
+ result[key] = content;
30
+ transferList.push(content);
31
+ } else {
32
+ result[key] = formContentItem;
33
+ }
30
34
  }
31
35
  send({
32
36
  type: "Result",
33
37
  gfv: formSource.resources.gfv,
34
- generatedForm: result,
35
- requestNumber: requestNumber
36
- });
38
+ generatedForm: result
39
+ }, transferList);
37
40
  } catch (error) {
38
- if (error instanceof Error) {
39
- var _formSource;
40
- send({
41
- type: "Error",
42
- gfv: (_formSource = formSource) === null || _formSource === void 0 ? void 0 : _formSource.resources.gfv,
43
- errorText: `${error.toString()}\n${error.stack}`,
44
- requestNumber: requestNumber
45
- });
46
- } else {
47
- var _formSource2;
48
- send({
49
- type: "Error",
50
- gfv: (_formSource2 = formSource) === null || _formSource2 === void 0 ? void 0 : _formSource2.resources.gfv,
51
- errorText: `${error}`,
52
- requestNumber: requestNumber
53
- });
54
- }
41
+ var _formSource;
42
+ const errorText = error instanceof Error ? `${error.toString()}\n${error.stack}` : `${error}`;
43
+ send({
44
+ type: "Error",
45
+ gfv: (_formSource = formSource) === null || _formSource === void 0 ? void 0 : _formSource.resources.gfv,
46
+ errorText: errorText
47
+ });
55
48
  }
56
49
  });
57
50
  //# sourceMappingURL=ReadSourcesAndProcessSugarWorker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReadSourcesAndProcessSugarWorker.js","names":["_IterableUtils","require","_GeneratorRequireUtils","_TypedProcessWorker","TypedProcessWorker","start","pathToGeneratorProcessSugar","formSourcesPath","farmDirectory","generationOptions","purgeCache","requestNumber","send","formSource","importer","GeneratorSourcesImporter","readSources","importReadSources","processSugar","importProcessSugar","formContent","sugarContent","resources","result","key","formContentItem","iterateEntries","Buffer","payload","toString","encoding","type","gfv","generatedForm","error","Error","_formSource","errorText","stack","_formSource2"],"sources":["../../../../../../src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.ts"],"sourcesContent":["import type { GeneratedForm, GenerationOptions } from \"../../Form/GenerateForm\";\nimport type { FormSource } from \"../../FormSource\";\nimport { iterateEntries } from \"../../../../../Common/IterableUtils\";\n\nimport { GeneratorSourcesImporter } from \"./GeneratorRequireUtils\";\nimport { TypedProcessWorker } from \"./TypedProcessWorker\";\n\nexport interface GeneratedFormInterProcessMessage {\n [relativeFileName: string]: string | { payload: string; encoding: BufferEncoding };\n}\n\nexport type CallMessage = [\n generatorPath: string,\n formPath: string,\n farmPath: string,\n undefined | GenerationOptions,\n purgeCache: boolean,\n requestNumber: number,\n];\n\nexport type CallResponse =\n | { type: \"Result\"; gfv: string; generatedForm: GeneratedFormInterProcessMessage; requestNumber: number }\n | { type: \"Error\"; gfv?: string; errorText: string; requestNumber: number };\n\nTypedProcessWorker.start<CallMessage, CallResponse>(\n async (\n [pathToGeneratorProcessSugar, formSourcesPath, farmDirectory, generationOptions, purgeCache, requestNumber],\n send\n ): Promise<void> => {\n let formSource: FormSource | undefined;\n try {\n const importer = new GeneratorSourcesImporter(pathToGeneratorProcessSugar, purgeCache);\n const readSources = await importer.importReadSources();\n formSource = await readSources(formSourcesPath, farmDirectory);\n\n const processSugar = await importer.importProcessSugar();\n\n const formContent: GeneratedForm = await processSugar(\n formSource.sugarContent,\n formSource.resources,\n generationOptions\n );\n\n // eslint-disable-next-line no-warning-comments\n // TODO(2026-06-30): временно отключаем валидацию компиляции Flang на бэкенде (исправить в задаче https://yt.skbkontur.ru/issue/FS-9242)\n // const validator = new GeneratorSourcesValidator(generationOptions);\n // await validator.validate(formContent);\n\n const result: GeneratedFormInterProcessMessage = {};\n\n // NOTE Because only JSON are allowed for IPC we need to convert Buffer -> Base64\n // Another solution is use a stream, but formContent still need to convert or send by chunks\n for (const [key, formContentItem] of iterateEntries(formContent)) {\n // @ts-ignore\n result[key] =\n formContentItem instanceof Buffer\n ? { payload: formContentItem.toString(\"base64\"), encoding: \"base64\" }\n : formContentItem;\n }\n\n send({\n type: \"Result\",\n gfv: formSource.resources.gfv,\n generatedForm: result,\n requestNumber: requestNumber,\n });\n } catch (error) {\n if (error instanceof Error) {\n send({\n type: \"Error\",\n gfv: formSource?.resources.gfv,\n errorText: `${error.toString()}\\n${error.stack}`,\n requestNumber: requestNumber,\n });\n } else {\n send({\n type: \"Error\",\n gfv: formSource?.resources.gfv,\n errorText: `${error}`,\n requestNumber: requestNumber,\n });\n }\n }\n }\n);\n"],"mappings":";;AAEA,IAAAA,cAAA,GAAAC,OAAA;AAEA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AAmBAG,sCAAkB,CAACC,KAAK,CACpB,OACI,CAACC,2BAA2B,EAAEC,eAAe,EAAEC,aAAa,EAAEC,iBAAiB,EAAEC,UAAU,EAAEC,aAAa,CAAC,EAC3GC,IAAI,KACY;EAChB,IAAIC,UAAkC;EACtC,IAAI;IACA,MAAMC,QAAQ,GAAG,IAAIC,+CAAwB,CAACT,2BAA2B,EAAEI,UAAU,CAAC;IACtF,MAAMM,WAAW,GAAG,MAAMF,QAAQ,CAACG,iBAAiB,CAAC,CAAC;IACtDJ,UAAU,GAAG,MAAMG,WAAW,CAACT,eAAe,EAAEC,aAAa,CAAC;IAE9D,MAAMU,YAAY,GAAG,MAAMJ,QAAQ,CAACK,kBAAkB,CAAC,CAAC;IAExD,MAAMC,WAA0B,GAAG,MAAMF,YAAY,CACjDL,UAAU,CAACQ,YAAY,EACvBR,UAAU,CAACS,SAAS,EACpBb,iBACJ,CAAC;;IAED;IACA;IACA;IACA;;IAEA,MAAMc,MAAwC,GAAG,CAAC,CAAC;;IAEnD;IACA;IACA,KAAK,MAAM,CAACC,GAAG,EAAEC,eAAe,CAAC,IAAI,IAAAC,6BAAc,EAACN,WAAW,CAAC,EAAE;MAC9D;MACAG,MAAM,CAACC,GAAG,CAAC,GACPC,eAAe,YAAYE,MAAM,GAC3B;QAAEC,OAAO,EAAEH,eAAe,CAACI,QAAQ,CAAC,QAAQ,CAAC;QAAEC,QAAQ,EAAE;MAAS,CAAC,GACnEL,eAAe;IAC7B;IAEAb,IAAI,CAAC;MACDmB,IAAI,EAAE,QAAQ;MACdC,GAAG,EAAEnB,UAAU,CAACS,SAAS,CAACU,GAAG;MAC7BC,aAAa,EAAEV,MAAM;MACrBZ,aAAa,EAAEA;IACnB,CAAC,CAAC;EACN,CAAC,CAAC,OAAOuB,KAAK,EAAE;IACZ,IAAIA,KAAK,YAAYC,KAAK,EAAE;MAAA,IAAAC,WAAA;MACxBxB,IAAI,CAAC;QACDmB,IAAI,EAAE,OAAO;QACbC,GAAG,GAAAI,WAAA,GAAEvB,UAAU,cAAAuB,WAAA,uBAAVA,WAAA,CAAYd,SAAS,CAACU,GAAG;QAC9BK,SAAS,EAAE,GAAGH,KAAK,CAACL,QAAQ,CAAC,CAAC,KAAKK,KAAK,CAACI,KAAK,EAAE;QAChD3B,aAAa,EAAEA;MACnB,CAAC,CAAC;IACN,CAAC,MAAM;MAAA,IAAA4B,YAAA;MACH3B,IAAI,CAAC;QACDmB,IAAI,EAAE,OAAO;QACbC,GAAG,GAAAO,YAAA,GAAE1B,UAAU,cAAA0B,YAAA,uBAAVA,YAAA,CAAYjB,SAAS,CAACU,GAAG;QAC9BK,SAAS,EAAE,GAAGH,KAAK,EAAE;QACrBvB,aAAa,EAAEA;MACnB,CAAC,CAAC;IACN;EACJ;AACJ,CACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ReadSourcesAndProcessSugarWorker.js","names":["_nodeWorker_threads","require","_IterableUtils","_GeneratorRequireUtils","_TypedThreadWorker","generatorPath","workerData","generator","importGenerator","startWorker","formPath","farmPath","options","send","formSource","readSources","formContent","processSugar","sugarContent","resources","result","transferList","key","formContentItem","iterateEntries","Buffer","content","buffer","slice","byteOffset","byteLength","push","type","gfv","generatedForm","error","_formSource","errorText","Error","toString","stack"],"sources":["../../../../../../src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.ts"],"sourcesContent":["import { workerData } from \"node:worker_threads\";\n\nimport type { GeneratedForm, GenerationOptions } from \"../../Form/GenerateForm\";\nimport type { FormSource } from \"../../FormSource\";\nimport { iterateEntries } from \"../../../../../Common/IterableUtils\";\n\nimport { importGenerator } from \"./GeneratorRequireUtils\";\nimport { startWorker } from \"./TypedThreadWorker\";\n\nexport interface GeneratedFormWorkerMessage {\n [relativeFileName: string]: string | ArrayBuffer;\n}\n\nexport type CallMessage = [formPath: string, farmPath: string, options: GenerationOptions | undefined];\n\nexport type CallResponse =\n | { type: \"Result\"; gfv: string; generatedForm: GeneratedFormWorkerMessage }\n | { type: \"Error\"; gfv?: string; errorText: string };\n\nconst { generatorPath } = workerData as { generatorPath: string };\nconst generator = importGenerator(generatorPath);\n\nstartWorker<CallMessage, CallResponse>(async ([formPath, farmPath, options], send): Promise<void> => {\n let formSource: FormSource | undefined;\n try {\n formSource = await generator.readSources(formPath, farmPath);\n const formContent: GeneratedForm = await generator.processSugar(\n formSource.sugarContent,\n formSource.resources,\n options\n );\n\n // eslint-disable-next-line no-warning-comments\n // TODO(2026-07-31): временно отключаем валидацию компиляции Flang на бэкенде (исправить в задаче https://yt.skbkontur.ru/issue/FS-9242)\n // const validator = new GeneratorSourcesValidator(generationOptions);\n // await validator.validate(formContent);\n\n const result: GeneratedFormWorkerMessage = {};\n const transferList: ArrayBuffer[] = [];\n\n for (const [key, formContentItem] of iterateEntries(formContent)) {\n if (formContentItem instanceof Buffer) {\n // Buffer.buffer is typed as ArrayBuffer | SharedArrayBuffer,\n // but Node.js Buffers never use SharedArrayBuffer in practice.\n const content = formContentItem.buffer.slice(\n formContentItem.byteOffset,\n formContentItem.byteOffset + formContentItem.byteLength\n ) as ArrayBuffer;\n result[key] = content;\n transferList.push(content);\n } else {\n result[key] = formContentItem as string;\n }\n }\n\n send(\n {\n type: \"Result\",\n gfv: formSource.resources.gfv,\n generatedForm: result,\n },\n transferList\n );\n } catch (error) {\n const errorText = error instanceof Error ? `${error.toString()}\\n${error.stack}` : `${error}`;\n send({\n type: \"Error\",\n gfv: formSource?.resources.gfv,\n errorText: errorText,\n });\n }\n});\n"],"mappings":";;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AAIA,IAAAC,cAAA,GAAAD,OAAA;AAEA,IAAAE,sBAAA,GAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAH,OAAA;AAYA,MAAM;EAAEI;AAAc,CAAC,GAAGC,8BAAuC;AACjE,MAAMC,SAAS,GAAG,IAAAC,sCAAe,EAACH,aAAa,CAAC;AAEhD,IAAAI,8BAAW,EAA4B,OAAO,CAACC,QAAQ,EAAEC,QAAQ,EAAEC,OAAO,CAAC,EAAEC,IAAI,KAAoB;EACjG,IAAIC,UAAkC;EACtC,IAAI;IACAA,UAAU,GAAG,MAAMP,SAAS,CAACQ,WAAW,CAACL,QAAQ,EAAEC,QAAQ,CAAC;IAC5D,MAAMK,WAA0B,GAAG,MAAMT,SAAS,CAACU,YAAY,CAC3DH,UAAU,CAACI,YAAY,EACvBJ,UAAU,CAACK,SAAS,EACpBP,OACJ,CAAC;;IAED;IACA;IACA;IACA;;IAEA,MAAMQ,MAAkC,GAAG,CAAC,CAAC;IAC7C,MAAMC,YAA2B,GAAG,EAAE;IAEtC,KAAK,MAAM,CAACC,GAAG,EAAEC,eAAe,CAAC,IAAI,IAAAC,6BAAc,EAACR,WAAW,CAAC,EAAE;MAC9D,IAAIO,eAAe,YAAYE,MAAM,EAAE;QACnC;QACA;QACA,MAAMC,OAAO,GAAGH,eAAe,CAACI,MAAM,CAACC,KAAK,CACxCL,eAAe,CAACM,UAAU,EAC1BN,eAAe,CAACM,UAAU,GAAGN,eAAe,CAACO,UACjD,CAAgB;QAChBV,MAAM,CAACE,GAAG,CAAC,GAAGI,OAAO;QACrBL,YAAY,CAACU,IAAI,CAACL,OAAO,CAAC;MAC9B,CAAC,MAAM;QACHN,MAAM,CAACE,GAAG,CAAC,GAAGC,eAAyB;MAC3C;IACJ;IAEAV,IAAI,CACA;MACImB,IAAI,EAAE,QAAQ;MACdC,GAAG,EAAEnB,UAAU,CAACK,SAAS,CAACc,GAAG;MAC7BC,aAAa,EAAEd;IACnB,CAAC,EACDC,YACJ,CAAC;EACL,CAAC,CAAC,OAAOc,KAAK,EAAE;IAAA,IAAAC,WAAA;IACZ,MAAMC,SAAS,GAAGF,KAAK,YAAYG,KAAK,GAAG,GAAGH,KAAK,CAACI,QAAQ,CAAC,CAAC,KAAKJ,KAAK,CAACK,KAAK,EAAE,GAAG,GAAGL,KAAK,EAAE;IAC7FtB,IAAI,CAAC;MACDmB,IAAI,EAAE,OAAO;MACbC,GAAG,GAAAG,WAAA,GAAEtB,UAAU,cAAAsB,WAAA,uBAAVA,WAAA,CAAYjB,SAAS,CAACc,GAAG;MAC9BI,SAAS,EAAEA;IACf,CAAC,CAAC;EACN;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.startWorker = void 0;
7
+ var _nodeWorker_threads = require("node:worker_threads");
8
+ const startWorker = handle => {
9
+ _nodeWorker_threads.parentPort === null || _nodeWorker_threads.parentPort === void 0 || _nodeWorker_threads.parentPort.on("message", async msg => {
10
+ await handle(msg, (out, transfer) => _nodeWorker_threads.parentPort === null || _nodeWorker_threads.parentPort === void 0 ? void 0 : _nodeWorker_threads.parentPort.postMessage(out, transfer));
11
+ });
12
+ };
13
+ exports.startWorker = startWorker;
14
+ //# sourceMappingURL=TypedThreadWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypedThreadWorker.js","names":["_nodeWorker_threads","require","startWorker","handle","parentPort","on","msg","out","transfer","postMessage","exports"],"sources":["../../../../../../src/BuildTasks/Generator/GeneratorWorker/TypedThreadWorker.ts"],"sourcesContent":["import { parentPort, TransferListItem } from \"node:worker_threads\";\n\ntype Send<Out> = (out: Out, transfer?: TransferListItem[]) => void;\ntype Handle<In, Out> = (msg: In, send: Send<Out>) => Promise<void>;\n\nexport const startWorker = <In, Out>(handle: Handle<In, Out>): void => {\n parentPort?.on(\"message\", async (msg: In) => {\n await handle(msg, (out, transfer) => parentPort?.postMessage(out, transfer));\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AAKO,MAAMC,WAAW,GAAaC,MAAuB,IAAW;EACnEC,8BAAU,aAAVA,8BAAU,eAAVA,8BAAU,CAAEC,EAAE,CAAC,SAAS,EAAE,MAAOC,GAAO,IAAK;IACzC,MAAMH,MAAM,CAACG,GAAG,EAAE,CAACC,GAAG,EAAEC,QAAQ,KAAKJ,8BAAU,aAAVA,8BAAU,uBAAVA,8BAAU,CAAEK,WAAW,CAACF,GAAG,EAAEC,QAAQ,CAAC,CAAC;EAChF,CAAC,CAAC;AACN,CAAC;AAACE,OAAA,CAAAR,WAAA,GAAAA,WAAA","ignoreList":[]}
@@ -20,7 +20,7 @@ let FormBuildMode = exports.FormBuildMode = /*#__PURE__*/function (FormBuildMode
20
20
  FormBuildMode[FormBuildMode["NoEditor"] = 1] = "NoEditor";
21
21
  return FormBuildMode;
22
22
  }({});
23
- async function resolveFormInfo(formJsonFile, pathToForm, _engineDirectory, logger = (0, _StaticLogger.getLogger)(), upgradeFormJson = false, useLastStableVersion = false, usePrereleaseVersion, nightly = false) {
23
+ async function resolveFormInfo(formJsonFile, pathToForm, logger = (0, _StaticLogger.getLogger)(), upgradeFormJson = false, useLastStableVersion = false, usePrereleaseVersion, nightly = false) {
24
24
  var _formConfig$dependenc, _formConfig$dependenc2, _formConfig$settings$;
25
25
  const formConfig = await readFormConfig(formJsonFile);
26
26
  if (useLastStableVersion && usePrereleaseVersion != undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"ResolveFormInfo.js","names":["_fsExtra","require","_lodash","_FsUtils","_StaticLogger","_FormPathUtils","_PublishedVersionUtils","_Version","FormBuildMode","exports","resolveFormInfo","formJsonFile","pathToForm","_engineDirectory","logger","getLogger","upgradeFormJson","useLastStableVersion","usePrereleaseVersion","nightly","_formConfig$dependenc","_formConfig$dependenc2","_formConfig$settings$","formConfig","readFormConfig","undefined","Error","dependencies","engine","getLastStableEngineVersion","generator","getLastStableGeneratorVersion","log","writeFileAsync","JSON","stringify","prereleaseVersionFormJson","getPrereleaseVersionFormJson","generatorVersion","parseCandyVersionSpec","engineVersion","type","preId","themes","mode","NoEditor","NormalBuild","formName","extractGfvFromFormPath","formSourcesPath","useServerSideNormalization","settings","useServerSideFLangNormalization","isNewFormJsonFormat","readJson","getFormConfigFromSource","_formConfig$dependenc3","_formConfig$dependenc4","_formConfig$settings","_formConfig$mode","isValidSemVerVersionRange","pickBy","x","build"],"sources":["../../../../src/BuildTasks/ResolveFormInfo.ts"],"sourcesContent":["import { readJson } from \"fs-extra\";\nimport { pickBy } from \"lodash\";\n\nimport { writeFileAsync } from \"../Commons/FsUtils\";\nimport { ILogger } from \"../Commons/Logging/ILogger\";\nimport { getLogger } from \"../Commons/Logging/StaticLogger\";\nimport { extractGfvFromFormPath } from \"../../../Common/FormPathUtils\";\n\nimport {\n getLastStableEngineVersion,\n getLastStableGeneratorVersion,\n getPrereleaseVersionFormJson,\n} from \"./PublishedVersionUtils\";\nimport { CandyVersionSpec, isValidSemVerVersionRange, parseCandyVersionSpec } from \"./Version\";\n\nexport enum FormBuildMode {\n NormalBuild,\n NoEditor,\n}\n\nexport interface FormInfo {\n themes?: string[];\n mode: FormBuildMode;\n formName: string;\n formSourcesPath: string;\n generatorVersion: undefined | CandyVersionSpec;\n engineVersion: undefined | CandyVersionSpec;\n useServerSideNormalization: boolean;\n}\n\nexport interface FormConfigContent {\n themes?: string[];\n build?: \"ci\" | \"manual\";\n mode?: \"no-editor\";\n dependencies?: {\n generator?: string;\n engine?: string;\n };\n settings?: {\n useServerSideFLangNormalization?: boolean;\n autoCalculationCalculatorImpl?: \"calculator2\";\n disableFlangRulesForEnableAutoFieldFeature?: boolean;\n disableFlangRulesForFormulaAndInitNormalizer?: boolean;\n };\n}\n\ninterface FormConfig {\n themes?: string[];\n build?: \"ci\" | \"manual\";\n mode?: \"no-editor\" | \"normal-build\";\n dependencies?: {\n generator: undefined | string;\n engine: undefined | string;\n };\n settings: {\n useServerSideFLangNormalization: boolean;\n autoCalculationCalculatorImpl?: \"calculator2\" | \"default\";\n disableFlangRulesForEnableAutoFieldFeature?: boolean;\n disableFlangRulesForFormulaAndInitNormalizer?: boolean;\n };\n}\n\nexport async function resolveFormInfo(\n formJsonFile: string,\n pathToForm: string,\n _engineDirectory: undefined | string,\n logger: ILogger = getLogger(),\n upgradeFormJson: boolean = false,\n useLastStableVersion: boolean = false,\n usePrereleaseVersion?: string,\n nightly: boolean = false\n): Promise<FormInfo> {\n const formConfig = await readFormConfig(formJsonFile);\n if (useLastStableVersion && usePrereleaseVersion != undefined) {\n throw new Error(\"Необходимо использовать либо флаг useLastStableVersion либо usePrereleaseVersion\");\n }\n if (useLastStableVersion) {\n formConfig.dependencies = {\n engine: await getLastStableEngineVersion(),\n generator: await getLastStableGeneratorVersion(),\n };\n logger.log(`Updated to last stable version ${formConfig.dependencies.engine}`);\n await writeFileAsync(formJsonFile, JSON.stringify(formConfig, undefined, \" \"), \"utf8\");\n }\n if (usePrereleaseVersion != undefined) {\n const prereleaseVersionFormJson = await getPrereleaseVersionFormJson(usePrereleaseVersion);\n if (prereleaseVersionFormJson != undefined) {\n formConfig.dependencies = {\n engine: prereleaseVersionFormJson,\n generator: prereleaseVersionFormJson,\n };\n logger.log(`Updated to last prerelease version ${formConfig.dependencies.engine}`);\n }\n await writeFileAsync(formJsonFile, JSON.stringify(formConfig, undefined, \" \"), \"utf8\");\n }\n let generatorVersion =\n formConfig.dependencies?.generator != undefined\n ? parseCandyVersionSpec(formConfig.dependencies.generator)\n : undefined;\n let engineVersion =\n formConfig.dependencies?.engine != undefined\n ? parseCandyVersionSpec(formConfig.dependencies.engine)\n : undefined;\n if (nightly) {\n generatorVersion = { type: \"pre\", preId: \"nightly\" };\n engineVersion = { type: \"pre\", preId: \"nightly\" };\n }\n if (upgradeFormJson) {\n await writeFileAsync(formJsonFile, JSON.stringify(formConfig, undefined, \" \"), \"utf8\");\n }\n return {\n themes: formConfig.themes,\n mode: formConfig.mode === \"no-editor\" ? FormBuildMode.NoEditor : FormBuildMode.NormalBuild,\n formName: extractGfvFromFormPath(pathToForm),\n formSourcesPath: pathToForm,\n generatorVersion: generatorVersion,\n engineVersion: engineVersion,\n useServerSideNormalization: formConfig.settings.useServerSideFLangNormalization ?? false,\n };\n}\n\nexport async function isNewFormJsonFormat(formJsonFile: string): Promise<boolean> {\n const formConfig: FormConfigContent = await readJson(formJsonFile);\n return formConfig.dependencies != undefined;\n}\n\nexport async function readFormConfig(formJsonFile: string): Promise<FormConfig> {\n const formConfig: FormConfigContent = await readJson(formJsonFile);\n return getFormConfigFromSource(formConfig);\n}\n\nexport function getFormConfigFromSource(formConfig: FormConfigContent): FormConfig {\n if (\n formConfig.dependencies?.generator != undefined &&\n !isValidSemVerVersionRange(formConfig.dependencies.generator)\n ) {\n throw new Error(`${formConfig.dependencies.generator} is not valid version format`);\n }\n\n if (formConfig.dependencies?.engine != undefined && !isValidSemVerVersionRange(formConfig.dependencies.engine)) {\n throw new Error(`${formConfig.dependencies.engine} is not valid version format`);\n }\n\n const settings = {\n useServerSideFLangNormalization: false,\n ...pickBy(formConfig.settings ?? {}, x => x !== undefined),\n };\n\n return {\n themes: formConfig.themes,\n build: formConfig.build || \"manual\",\n mode: formConfig.mode ?? \"normal-build\",\n settings: settings,\n dependencies:\n formConfig.dependencies != undefined\n ? {\n generator: formConfig.dependencies.generator,\n engine: formConfig.dependencies.engine,\n }\n : undefined,\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ResolveFormInfo.js","names":["_fsExtra","require","_lodash","_FsUtils","_StaticLogger","_FormPathUtils","_PublishedVersionUtils","_Version","FormBuildMode","exports","resolveFormInfo","formJsonFile","pathToForm","logger","getLogger","upgradeFormJson","useLastStableVersion","usePrereleaseVersion","nightly","_formConfig$dependenc","_formConfig$dependenc2","_formConfig$settings$","formConfig","readFormConfig","undefined","Error","dependencies","engine","getLastStableEngineVersion","generator","getLastStableGeneratorVersion","log","writeFileAsync","JSON","stringify","prereleaseVersionFormJson","getPrereleaseVersionFormJson","generatorVersion","parseCandyVersionSpec","engineVersion","type","preId","themes","mode","NoEditor","NormalBuild","formName","extractGfvFromFormPath","formSourcesPath","useServerSideNormalization","settings","useServerSideFLangNormalization","isNewFormJsonFormat","readJson","getFormConfigFromSource","_formConfig$dependenc3","_formConfig$dependenc4","_formConfig$settings","_formConfig$mode","isValidSemVerVersionRange","pickBy","x","build"],"sources":["../../../../src/BuildTasks/ResolveFormInfo.ts"],"sourcesContent":["import { readJson } from \"fs-extra\";\nimport { pickBy } from \"lodash\";\n\nimport { writeFileAsync } from \"../Commons/FsUtils\";\nimport { ILogger } from \"../Commons/Logging/ILogger\";\nimport { getLogger } from \"../Commons/Logging/StaticLogger\";\nimport { extractGfvFromFormPath } from \"../../../Common/FormPathUtils\";\n\nimport {\n getLastStableEngineVersion,\n getLastStableGeneratorVersion,\n getPrereleaseVersionFormJson,\n} from \"./PublishedVersionUtils\";\nimport { CandyVersionSpec, isValidSemVerVersionRange, parseCandyVersionSpec } from \"./Version\";\n\nexport enum FormBuildMode {\n NormalBuild,\n NoEditor,\n}\n\nexport interface FormInfo {\n themes?: string[];\n mode: FormBuildMode;\n formName: string;\n formSourcesPath: string;\n generatorVersion: undefined | CandyVersionSpec;\n engineVersion: undefined | CandyVersionSpec;\n useServerSideNormalization: boolean;\n}\n\nexport interface FormConfigContent {\n themes?: string[];\n build?: \"ci\" | \"manual\";\n mode?: \"no-editor\";\n dependencies?: {\n generator?: string;\n engine?: string;\n };\n settings?: {\n useServerSideFLangNormalization?: boolean;\n autoCalculationCalculatorImpl?: \"calculator2\";\n disableFlangRulesForEnableAutoFieldFeature?: boolean;\n disableFlangRulesForFormulaAndInitNormalizer?: boolean;\n };\n}\n\ninterface FormConfig {\n themes?: string[];\n build?: \"ci\" | \"manual\";\n mode?: \"no-editor\" | \"normal-build\";\n dependencies?: {\n generator: undefined | string;\n engine: undefined | string;\n };\n settings: {\n useServerSideFLangNormalization: boolean;\n autoCalculationCalculatorImpl?: \"calculator2\" | \"default\";\n disableFlangRulesForEnableAutoFieldFeature?: boolean;\n disableFlangRulesForFormulaAndInitNormalizer?: boolean;\n };\n}\n\nexport async function resolveFormInfo(\n formJsonFile: string,\n pathToForm: string,\n logger: ILogger = getLogger(),\n upgradeFormJson: boolean = false,\n useLastStableVersion: boolean = false,\n usePrereleaseVersion?: string,\n nightly: boolean = false\n): Promise<FormInfo> {\n const formConfig = await readFormConfig(formJsonFile);\n if (useLastStableVersion && usePrereleaseVersion != undefined) {\n throw new Error(\"Необходимо использовать либо флаг useLastStableVersion либо usePrereleaseVersion\");\n }\n if (useLastStableVersion) {\n formConfig.dependencies = {\n engine: await getLastStableEngineVersion(),\n generator: await getLastStableGeneratorVersion(),\n };\n logger.log(`Updated to last stable version ${formConfig.dependencies.engine}`);\n await writeFileAsync(formJsonFile, JSON.stringify(formConfig, undefined, \" \"), \"utf8\");\n }\n if (usePrereleaseVersion != undefined) {\n const prereleaseVersionFormJson = await getPrereleaseVersionFormJson(usePrereleaseVersion);\n if (prereleaseVersionFormJson != undefined) {\n formConfig.dependencies = {\n engine: prereleaseVersionFormJson,\n generator: prereleaseVersionFormJson,\n };\n logger.log(`Updated to last prerelease version ${formConfig.dependencies.engine}`);\n }\n await writeFileAsync(formJsonFile, JSON.stringify(formConfig, undefined, \" \"), \"utf8\");\n }\n let generatorVersion =\n formConfig.dependencies?.generator != undefined\n ? parseCandyVersionSpec(formConfig.dependencies.generator)\n : undefined;\n let engineVersion =\n formConfig.dependencies?.engine != undefined\n ? parseCandyVersionSpec(formConfig.dependencies.engine)\n : undefined;\n if (nightly) {\n generatorVersion = { type: \"pre\", preId: \"nightly\" };\n engineVersion = { type: \"pre\", preId: \"nightly\" };\n }\n if (upgradeFormJson) {\n await writeFileAsync(formJsonFile, JSON.stringify(formConfig, undefined, \" \"), \"utf8\");\n }\n return {\n themes: formConfig.themes,\n mode: formConfig.mode === \"no-editor\" ? FormBuildMode.NoEditor : FormBuildMode.NormalBuild,\n formName: extractGfvFromFormPath(pathToForm),\n formSourcesPath: pathToForm,\n generatorVersion: generatorVersion,\n engineVersion: engineVersion,\n useServerSideNormalization: formConfig.settings.useServerSideFLangNormalization ?? false,\n };\n}\n\nexport async function isNewFormJsonFormat(formJsonFile: string): Promise<boolean> {\n const formConfig: FormConfigContent = await readJson(formJsonFile);\n return formConfig.dependencies != undefined;\n}\n\nexport async function readFormConfig(formJsonFile: string): Promise<FormConfig> {\n const formConfig: FormConfigContent = await readJson(formJsonFile);\n return getFormConfigFromSource(formConfig);\n}\n\nexport function getFormConfigFromSource(formConfig: FormConfigContent): FormConfig {\n if (\n formConfig.dependencies?.generator != undefined &&\n !isValidSemVerVersionRange(formConfig.dependencies.generator)\n ) {\n throw new Error(`${formConfig.dependencies.generator} is not valid version format`);\n }\n\n if (formConfig.dependencies?.engine != undefined && !isValidSemVerVersionRange(formConfig.dependencies.engine)) {\n throw new Error(`${formConfig.dependencies.engine} is not valid version format`);\n }\n\n const settings = {\n useServerSideFLangNormalization: false,\n ...pickBy(formConfig.settings ?? {}, x => x !== undefined),\n };\n\n return {\n themes: formConfig.themes,\n build: formConfig.build || \"manual\",\n mode: formConfig.mode ?? \"normal-build\",\n settings: settings,\n dependencies:\n formConfig.dependencies != undefined\n ? {\n generator: formConfig.dependencies.generator,\n engine: formConfig.dependencies.engine,\n }\n : undefined,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -75,16 +75,6 @@ const buildFormsOptionsDefinition = exports.buildFormsOptionsDefinition = (0, _C
75
75
  usePrereleaseVersion: input
76
76
  }),
77
77
  description: "Устанавливает версию движка в файла form.json в последнюю пререлизную версию в заданным preid. В файле версии генератора и движка будут установлены в pre:some-preid."
78
- }, {
79
- name: "no-reformat",
80
- doesNotRequireValue: true,
81
- defaultValue: {
82
- skipGeneratedCodeReformatting: true
83
- },
84
- parse: input => ({
85
- skipGeneratedCodeReformatting: input
86
- }),
87
- description: "Отлючает форматирование генерируемого кода. Работает, только если версия генератора поддерживает эту опцию. Используется для ускорения сборки форм. (default: true)"
88
78
  }, {
89
79
  alias: "g",
90
80
  name: "gfvs",
@@ -1 +1 @@
1
- {"version":3,"file":"BuildFormsOptions.js","names":["_CommandBasedOptionsParser","require","_CommonOptionDefintions","_BuildCacheMode","buildFormsOptionsDefinition","exports","commandDefinition","optionsDefinition","alias","name","defaultValue","watch","parse","input","doesNotRequireValue","description","clean","mode","upgradeFormJson","buildCacheMode","BuildCacheMode","ReadOnly","parseBuildCacheMode","useLastStableVersion","usePrereleaseVersion","undefined","skipGeneratedCodeReformatting","formGlobs","defaultOption","multiple","useVersionFromCache","buildCandyWidget","devModeOption","logVerbosityOption","detailedDescription","trim","examples","extendedDetails"],"sources":["../../../../../src/CLICommands/BuildForms/BuildFormsOptions.ts"],"sourcesContent":["import { commandDefinition, optionsDefinition } from \"../../Commons/Options/CommandBasedOptionsParser\";\nimport { CommonOptions } from \"../CommonOptions/CommonOptions\";\nimport { devModeOption, logVerbosityOption } from \"../CommonOptions/CommonOptionDefintions\";\n\nimport { BuildCacheMode, parseBuildCacheMode } from \"./BuildCacheMode\";\n\nexport interface BuildFormsOptions extends CommonOptions {\n watch: boolean;\n clean: boolean;\n formGlobs: string[];\n upgradeFormJson: boolean;\n useLastStableVersion: boolean;\n usePrereleaseVersion?: string;\n skipGeneratedCodeReformatting: boolean;\n useVersionFromCache: boolean;\n mode: \"development\" | \"production\";\n buildCacheMode: BuildCacheMode;\n buildCandyWidget: boolean;\n}\n\nexport const buildFormsOptionsDefinition = commandDefinition<\"build\", BuildFormsOptions>(\n \"build\",\n \"build\",\n optionsDefinition(\n {\n alias: \"w\",\n name: \"watch\",\n defaultValue: { watch: false },\n parse: input => ({ watch: input }),\n doesNotRequireValue: true,\n description:\n \"Watch-режим. Выполняет сборку форм, а затем пересобирает при изменениях. В том числе движка, генератора и статических ресурсов.\",\n },\n {\n name: \"clean\",\n defaultValue: { clean: false },\n parse: input => ({ clean: input }),\n doesNotRequireValue: true,\n description:\n \"Полностью очищает целевой каталог ресурсов. Используется при полной сборке форм для продакшена\",\n },\n {\n name: \"mode\",\n defaultValue: { mode: \"development\" },\n parse: (input: string) => ({ mode: input }),\n description:\n \"Разделение сборок на продовую (mode=production) и не продовую (mode=development). По умолчанию development\",\n },\n {\n name: \"upgrade-form-json\",\n defaultValue: { upgradeFormJson: false },\n parse: input => ({ upgradeFormJson: input }),\n doesNotRequireValue: true,\n description: \"Форсирует изменение формата файла form.json на новый\",\n },\n {\n name: \"build-cache\",\n defaultValue: { buildCacheMode: BuildCacheMode.ReadOnly },\n parse: (input: string) => ({ buildCacheMode: parseBuildCacheMode(input) }),\n description:\n \"Задаёт режим использования кэша сборки. Возможные значения:\\n\" +\n \" disabled - не использовать кэш\\n\" +\n \" readonly - использовать кэш для сборки, но не обновляет его (значение по умолчанию)\\n\" +\n \" update - использовать кэш для сборки и презаписывать, если не совпадает\\n\" +\n \" force-update - всегда выполнять сборку и обновить значения в кэше\\n\" +\n \"Отключается при использовании watch-режима\",\n },\n {\n name: \"use-last-stable-version\",\n defaultValue: { useLastStableVersion: false },\n parse: input => ({ useLastStableVersion: input }),\n doesNotRequireValue: true,\n description:\n \"Устанавливает версию движка в файла `form.json` в последнюю стабильную версию. Аналогичен запуску candy-build с параметром -ge master\",\n },\n {\n name: \"use-prerelease-version\",\n defaultValue: { usePrereleaseVersion: undefined as undefined | string },\n parse: (input: string) => ({ usePrereleaseVersion: input }),\n description:\n \"Устанавливает версию движка в файла form.json в последнюю пререлизную версию в заданным preid. В файле версии генератора и движка будут установлены в pre:some-preid.\",\n },\n {\n name: \"no-reformat\",\n doesNotRequireValue: true,\n defaultValue: { skipGeneratedCodeReformatting: true },\n parse: (input: boolean) => ({ skipGeneratedCodeReformatting: input }),\n description:\n \"Отлючает форматирование генерируемого кода. Работает, только если версия генератора поддерживает эту опцию. Используется для ускорения сборки форм. (default: true)\",\n },\n {\n alias: \"g\",\n name: \"gfvs\",\n defaultValue: { formGlobs: [] },\n parse: (input: string[]) => ({ formGlobs: input }),\n defaultOption: true,\n multiple: true,\n description: \"Одна или несколько GFV или GFV-масок для пересборки. Может содержать значки `?` и `*`.\",\n },\n {\n name: \"use-version-from-cache\",\n defaultValue: { useVersionFromCache: false },\n parse: (input: boolean) => ({ useVersionFromCache: input }),\n description: \"Использовать версию движка и генератора из файловой системы\",\n doesNotRequireValue: true,\n },\n {\n name: \"build-candy-widget\",\n doesNotRequireValue: true,\n defaultValue: { buildCandyWidget: false },\n parse: (input: boolean) => ({ buildCandyWidget: input }),\n description: \"Собирать candy-виджет\",\n },\n devModeOption,\n logVerbosityOption\n ),\n {\n description:\n \"Выполняет сборку одной или нескольких форм.\\n\" +\n \"Подробнее: https://git.skbkontur.ru/forms/candy/-/blob/master/Tools/README.md#candy-build\",\n\n detailedDescription: `\nОсновной сценарий: выполняет сборку форм в каталог с ресурсами. Действия, которые выполняет команда:\n\n* Получение движка форм версии указанной в \\`form.json\\`,\n* получение генератора форм версии указанной в \\`form.json\\`,\n* генерация и компиляция формы в каталог ресурсов,\n* создание файлов \\`{gfv}.metas.json\\` в каталоге ресурсов\n* копирование конвертеров в каталог ресурсов,\n* копирование схемы в каталог ресурсов.\n`.trim(),\n\n examples: `\n\\`\\`\\`\n# Сборка формы 104816\ncandy build 104816\n\\`\\`\\`\n\n\\`\\`\\`\n# Сборка все формы группы 1\ncandy build 1?????\n\\`\\`\\`\n\n\\`\\`\\`\n# Собрать форму 104816 и следить за изменениями\ncandy build 104816 -w\n\\`\\`\\`\n\n\\`\\`\\`\n# Использовать последнюю пререлизную версию движка с preid=bso\ncandy build 104816 --use-prerelease-version bso\n\\`\\`\\`\n`.trim(),\n\n extendedDetails: `\n### Версионирование\n\nПри сборке форм, учитывается версия движка и генератора указанные файле form.json. Версии могут указывать не на конкретную версию, а адресовать диапазон в соответствии с [semver](https://semver.org/lang/ru/).\nВ этом случае будет выбрана последняя подходящая версия.\n\nФайл form.json должен выглядеть следующим образом:\n\\`\\`\\`\n{\n // Опционально\n \"themes\": [\"имя-темы\", ...],\n \"dependencies\": {\n \"engine\": \"[версия-движка]\",\n \"generator\": \"[версия-генератора]\"\n }\n}\n\\`\\`\\`\n\n\\`версия-движка\\`, \\`версия-генератора\\` - Соответственно, диапазоны версий. На данный момент всегда совпадают.\n\nДопустимые варианты версий:\n* Версия в формате [semver](https://semver.org/lang/ru/).\n* Версия с префиксом pre. Например, \\`pre:my-stange-branch-name\\`, где \\`my-stange-branch-name\\` - название предрелизной версии, выпускаемой разработчиками Candy, для предварительного выпуска форм.\nВерсия с префиксом pre используются для движков, которые не являются стабильными и используются для предварительных сборок форм.\n`.trim(),\n }\n);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BuildFormsOptions.js","names":["_CommandBasedOptionsParser","require","_CommonOptionDefintions","_BuildCacheMode","buildFormsOptionsDefinition","exports","commandDefinition","optionsDefinition","alias","name","defaultValue","watch","parse","input","doesNotRequireValue","description","clean","mode","upgradeFormJson","buildCacheMode","BuildCacheMode","ReadOnly","parseBuildCacheMode","useLastStableVersion","usePrereleaseVersion","undefined","formGlobs","defaultOption","multiple","useVersionFromCache","buildCandyWidget","devModeOption","logVerbosityOption","detailedDescription","trim","examples","extendedDetails"],"sources":["../../../../../src/CLICommands/BuildForms/BuildFormsOptions.ts"],"sourcesContent":["import { commandDefinition, optionsDefinition } from \"../../Commons/Options/CommandBasedOptionsParser\";\nimport { CommonOptions } from \"../CommonOptions/CommonOptions\";\nimport { devModeOption, logVerbosityOption } from \"../CommonOptions/CommonOptionDefintions\";\n\nimport { BuildCacheMode, parseBuildCacheMode } from \"./BuildCacheMode\";\n\nexport interface BuildFormsOptions extends CommonOptions {\n watch: boolean;\n clean: boolean;\n formGlobs: string[];\n upgradeFormJson: boolean;\n useLastStableVersion: boolean;\n usePrereleaseVersion?: string;\n useVersionFromCache: boolean;\n mode: \"development\" | \"production\";\n buildCacheMode: BuildCacheMode;\n buildCandyWidget: boolean;\n}\n\nexport const buildFormsOptionsDefinition = commandDefinition<\"build\", BuildFormsOptions>(\n \"build\",\n \"build\",\n optionsDefinition(\n {\n alias: \"w\",\n name: \"watch\",\n defaultValue: { watch: false },\n parse: input => ({ watch: input }),\n doesNotRequireValue: true,\n description:\n \"Watch-режим. Выполняет сборку форм, а затем пересобирает при изменениях. В том числе движка, генератора и статических ресурсов.\",\n },\n {\n name: \"clean\",\n defaultValue: { clean: false },\n parse: input => ({ clean: input }),\n doesNotRequireValue: true,\n description:\n \"Полностью очищает целевой каталог ресурсов. Используется при полной сборке форм для продакшена\",\n },\n {\n name: \"mode\",\n defaultValue: { mode: \"development\" },\n parse: (input: string) => ({ mode: input }),\n description:\n \"Разделение сборок на продовую (mode=production) и не продовую (mode=development). По умолчанию development\",\n },\n {\n name: \"upgrade-form-json\",\n defaultValue: { upgradeFormJson: false },\n parse: input => ({ upgradeFormJson: input }),\n doesNotRequireValue: true,\n description: \"Форсирует изменение формата файла form.json на новый\",\n },\n {\n name: \"build-cache\",\n defaultValue: { buildCacheMode: BuildCacheMode.ReadOnly },\n parse: (input: string) => ({ buildCacheMode: parseBuildCacheMode(input) }),\n description:\n \"Задаёт режим использования кэша сборки. Возможные значения:\\n\" +\n \" disabled - не использовать кэш\\n\" +\n \" readonly - использовать кэш для сборки, но не обновляет его (значение по умолчанию)\\n\" +\n \" update - использовать кэш для сборки и презаписывать, если не совпадает\\n\" +\n \" force-update - всегда выполнять сборку и обновить значения в кэше\\n\" +\n \"Отключается при использовании watch-режима\",\n },\n {\n name: \"use-last-stable-version\",\n defaultValue: { useLastStableVersion: false },\n parse: input => ({ useLastStableVersion: input }),\n doesNotRequireValue: true,\n description:\n \"Устанавливает версию движка в файла `form.json` в последнюю стабильную версию. Аналогичен запуску candy-build с параметром -ge master\",\n },\n {\n name: \"use-prerelease-version\",\n defaultValue: { usePrereleaseVersion: undefined as undefined | string },\n parse: (input: string) => ({ usePrereleaseVersion: input }),\n description:\n \"Устанавливает версию движка в файла form.json в последнюю пререлизную версию в заданным preid. В файле версии генератора и движка будут установлены в pre:some-preid.\",\n },\n {\n alias: \"g\",\n name: \"gfvs\",\n defaultValue: { formGlobs: [] },\n parse: (input: string[]) => ({ formGlobs: input }),\n defaultOption: true,\n multiple: true,\n description: \"Одна или несколько GFV или GFV-масок для пересборки. Может содержать значки `?` и `*`.\",\n },\n {\n name: \"use-version-from-cache\",\n defaultValue: { useVersionFromCache: false },\n parse: (input: boolean) => ({ useVersionFromCache: input }),\n description: \"Использовать версию движка и генератора из файловой системы\",\n doesNotRequireValue: true,\n },\n {\n name: \"build-candy-widget\",\n doesNotRequireValue: true,\n defaultValue: { buildCandyWidget: false },\n parse: (input: boolean) => ({ buildCandyWidget: input }),\n description: \"Собирать candy-виджет\",\n },\n devModeOption,\n logVerbosityOption\n ),\n {\n description:\n \"Выполняет сборку одной или нескольких форм.\\n\" +\n \"Подробнее: https://git.skbkontur.ru/forms/candy/-/blob/master/Tools/README.md#candy-build\",\n\n detailedDescription: `\nОсновной сценарий: выполняет сборку форм в каталог с ресурсами. Действия, которые выполняет команда:\n\n* Получение движка форм версии указанной в \\`form.json\\`,\n* получение генератора форм версии указанной в \\`form.json\\`,\n* генерация и компиляция формы в каталог ресурсов,\n* создание файлов \\`{gfv}.metas.json\\` в каталоге ресурсов\n* копирование конвертеров в каталог ресурсов,\n* копирование схемы в каталог ресурсов.\n`.trim(),\n\n examples: `\n\\`\\`\\`\n# Сборка формы 104816\ncandy build 104816\n\\`\\`\\`\n\n\\`\\`\\`\n# Сборка все формы группы 1\ncandy build 1?????\n\\`\\`\\`\n\n\\`\\`\\`\n# Собрать форму 104816 и следить за изменениями\ncandy build 104816 -w\n\\`\\`\\`\n\n\\`\\`\\`\n# Использовать последнюю пререлизную версию движка с preid=bso\ncandy build 104816 --use-prerelease-version bso\n\\`\\`\\`\n`.trim(),\n\n extendedDetails: `\n### Версионирование\n\nПри сборке форм, учитывается версия движка и генератора указанные файле form.json. Версии могут указывать не на конкретную версию, а адресовать диапазон в соответствии с [semver](https://semver.org/lang/ru/).\nВ этом случае будет выбрана последняя подходящая версия.\n\nФайл form.json должен выглядеть следующим образом:\n\\`\\`\\`\n{\n // Опционально\n \"themes\": [\"имя-темы\", ...],\n \"dependencies\": {\n \"engine\": \"[версия-движка]\",\n \"generator\": \"[версия-генератора]\"\n }\n}\n\\`\\`\\`\n\n\\`версия-движка\\`, \\`версия-генератора\\` - Соответственно, диапазоны версий. На данный момент всегда совпадают.\n\nДопустимые варианты версий:\n* Версия в формате [semver](https://semver.org/lang/ru/).\n* Версия с префиксом pre. Например, \\`pre:my-stange-branch-name\\`, где \\`my-stange-branch-name\\` - название предрелизной версии, выпускаемой разработчиками Candy, для предварительного выпуска форм.\nВерсия с префиксом pre используются для движков, которые не являются стабильными и используются для предварительных сборок форм.\n`.trim(),\n }\n);\n"],"mappings":"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","ignoreList":[]}
@@ -76,7 +76,7 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
76
76
  if (await (0, _fsExtra.pathExists)(_path.default.join(formDirPath, "presentations.json"))) {
77
77
  throw new Error(`presentations.json больше не используется, удали его из ${formDirPath} или используй команду candy rename ${gfv} в каталоге candy.farm`);
78
78
  }
79
- return _Observe.Observe.file(_path.default.join(formDirPath, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName)).transform(formJsonFile => (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, formDirPath, engineDirectory, context.logger.withPrefix(`FORM:${gfv}`), options.upgradeFormJson, options.useLastStableVersion, options.usePrereleaseVersion)).transform(async fi => {
79
+ return _Observe.Observe.file(_path.default.join(formDirPath, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName)).transform(formJsonFile => (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, formDirPath, context.logger.withPrefix(`FORM:${gfv}`), options.upgradeFormJson, options.useLastStableVersion, options.usePrereleaseVersion)).transform(async fi => {
80
80
  if (fi.mode === _ResolveFormInfo.FormBuildMode.NormalBuild) {
81
81
  if (fi.generatorVersion == undefined) {
82
82
  throw new Error("generatorVersion is not defined");
@@ -116,16 +116,13 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
116
116
  }
117
117
  });
118
118
  }, async fi => fi, async fi => fi.engineSource != undefined ? (0, _EngineSource.getEngineSourceKey)(fi.engineSource) : "NullEngine").attach(async fi => buildOptions.watch ? _Observe.Observe.files(fi.formSourcesPath, "../../controls/**/*", "../../xsltTemplates/**/*", "../../jsHelpers/**/*", `./${_WellKnownDirectories.WellKnownDirectories.FormJsonFileName}`, "schemas/**/*", "sugar/**/*", "controls/**/*", "autocalc/**/*", "helpers/**/*", "normalizers/**/*", "validations/**/*", "localization/**/*") : _Observe.Observe.value(fi.formSourcesPath)).transform(async fi => {
119
- let dependenciesHash;
120
119
  if (fi.mode !== _ResolveFormInfo.FormBuildMode.NormalBuild) {
121
120
  return {
122
121
  ...fi,
123
122
  dependenciesHash: undefined
124
123
  };
125
124
  }
126
- if (await fi.generator.supportsDependenciesExtraction()) {
127
- dependenciesHash = await fi.generator.getAllDependenciesHash(formDirPath, farmDirectory);
128
- }
125
+ const dependenciesHash = await fi.generator.getAllDependenciesHash(formDirPath, farmDirectory);
129
126
  return {
130
127
  ...fi,
131
128
  dependenciesHash: dependenciesHash
@@ -149,7 +146,6 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
149
146
  return undefined;
150
147
  }
151
148
  return (0, _GenerateForm.generateForm)(fi.formSourcesPath, farmDirectory, fi.generator, undefined, {
152
- skipCodeReformatting: options.skipGeneratedCodeReformatting,
153
149
  resourcesHash: (_fi$dependenciesHash = fi.dependenciesHash) !== null && _fi$dependenciesHash !== void 0 ? _fi$dependenciesHash : "UndefinedResourcesHash"
154
150
  });
155
151
  }).attach(async () => buildOptions.watch ? _Observe.Observe.files(_path.default.join(formDirPath, "form"), "**/*") : _Observe.Observe.value(_path.default.join(formDirPath, "form"))).do(async fi => {