ics-builder 4.4.3 → 4.4.10

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/.prettierignore +1 -0
  2. package/.prettierrc +7 -0
  3. package/.vscode/launch.json +15 -0
  4. package/.vscode/settings.json +6 -0
  5. package/Dockerfile +32 -0
  6. package/build/modules.yaml +7 -0
  7. package/build.template.yml +51 -0
  8. package/dist/jest.config.js +4 -0
  9. package/dist/package.json +76 -0
  10. package/{src → dist/src}/builder/ui/webpackUiBuilder.js +30 -0
  11. package/{src → dist/src}/index.js +0 -0
  12. package/dist/src/services/source/assets/hostList.yml +12 -0
  13. package/dist/src/services/source/assets/sourceList.yml +50 -0
  14. package/package.json +4 -1
  15. package/src/app.ts +64 -0
  16. package/src/builder/api/csprojFile.ts +15 -0
  17. package/src/builder/api/dotnetApiBuilder.ts +145 -0
  18. package/src/builder/api/net5Builder.ts +181 -0
  19. package/src/builder/api/webConfigFile.ts +11 -0
  20. package/src/builder/api/xmlFile.ts +24 -0
  21. package/src/builder/baseBuilder.ts +71 -0
  22. package/src/builder/data/dataBuilder.ts +28 -0
  23. package/src/builder/db/dbBuilder.ts +167 -0
  24. package/src/builder/e2e/e2eBuilder.ts +23 -0
  25. package/src/builder/schema/schemaBuilder.ts +156 -0
  26. package/src/builder/ui/customUiBuilder.ts +50 -0
  27. package/src/builder/ui/webpackUiBuilder.ts +497 -0
  28. package/src/builder/uiDependency/dependencyBuilder.ts +38 -0
  29. package/src/builder/winservice/winserviceBuilder.ts +11 -0
  30. package/src/dotnetUtils.ts +41 -0
  31. package/src/exceptions/BuilderException.ts +7 -0
  32. package/src/index.ts +34 -0
  33. package/src/services/buildManager.ts +151 -0
  34. package/src/services/commandManager.ts +78 -0
  35. package/src/services/configManager.ts +82 -0
  36. package/src/services/packageManager.ts +180 -0
  37. package/src/services/packageStructure/legacyPackageStructureManager.ts +34 -0
  38. package/src/services/packageStructure/packageStructureManager.ts +75 -0
  39. package/src/services/packageStructure/structureUtils.ts +66 -0
  40. package/src/services/source/loadPackages.ts +18 -0
  41. package/src/services/source/loaders/baseLoader.ts +28 -0
  42. package/src/services/source/loaders/gitScmProvider.ts +73 -0
  43. package/src/services/source/loaders/hgScmProvider.ts +63 -0
  44. package/src/services/source/sourceManager.ts +95 -0
  45. package/src/services/testManager.ts +27 -0
  46. package/src/testRunners/apiTestRunner.ts +68 -0
  47. package/src/testRunners/baseTestRunner.ts +19 -0
  48. package/src/testRunners/uiTestRunner.ts +8 -0
  49. package/src/utils.ts +228 -0
  50. package/test/sourceManager.test.ts +17 -0
  51. package/tsconfig.json +18 -0
  52. package/wallaby.js +14 -0
  53. /package/{src → dist/src}/app.js +0 -0
  54. /package/{src → dist/src}/builder/api/csprojFile.js +0 -0
  55. /package/{src → dist/src}/builder/api/dotnetApiBuilder.js +0 -0
  56. /package/{src → dist/src}/builder/api/net5Builder.js +0 -0
  57. /package/{src → dist/src}/builder/api/webConfigFile.js +0 -0
  58. /package/{src → dist/src}/builder/api/xmlFile.js +0 -0
  59. /package/{src → dist/src}/builder/baseBuilder.js +0 -0
  60. /package/{src → dist/src}/builder/data/dataBuilder.js +0 -0
  61. /package/{src → dist/src}/builder/db/dbBuilder.js +0 -0
  62. /package/{src → dist/src}/builder/e2e/e2eBuilder.js +0 -0
  63. /package/{src → dist/src}/builder/schema/schemaBuilder.js +0 -0
  64. /package/{src → dist/src}/builder/ui/customUiBuilder.js +0 -0
  65. /package/{src → dist/src}/builder/uiDependency/dependencyBuilder.js +0 -0
  66. /package/{src → dist/src}/builder/winservice/winserviceBuilder.js +0 -0
  67. /package/{src → dist/src}/dotnetUtils.js +0 -0
  68. /package/{src → dist/src}/exceptions/BuilderException.js +0 -0
  69. /package/{src → dist/src}/services/buildManager.js +0 -0
  70. /package/{src → dist/src}/services/commandManager.js +0 -0
  71. /package/{src → dist/src}/services/configManager.js +0 -0
  72. /package/{src → dist/src}/services/packageManager.js +0 -0
  73. /package/{src → dist/src}/services/packageStructure/legacyPackageStructureManager.js +0 -0
  74. /package/{src → dist/src}/services/packageStructure/packageStructureManager.js +0 -0
  75. /package/{src → dist/src}/services/packageStructure/structureUtils.js +0 -0
  76. /package/{src → dist/src}/services/source/loadPackages.js +0 -0
  77. /package/{src → dist/src}/services/source/loaders/baseLoader.js +0 -0
  78. /package/{src → dist/src}/services/source/loaders/gitScmProvider.js +0 -0
  79. /package/{src → dist/src}/services/source/loaders/hgScmProvider.js +0 -0
  80. /package/{src → dist/src}/services/source/sourceManager.js +0 -0
  81. /package/{src → dist/src}/services/testManager.js +0 -0
  82. /package/{src → dist/src}/testRunners/apiTestRunner.js +0 -0
  83. /package/{src → dist/src}/testRunners/baseTestRunner.js +0 -0
  84. /package/{src → dist/src}/testRunners/uiTestRunner.js +0 -0
  85. /package/{src → dist/src}/utils.js +0 -0
@@ -0,0 +1 @@
1
+ *.yml
package/.prettierrc ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "printWidth": 120,
3
+ "tabWidth": 4,
4
+ "useTabs": true,
5
+ "trailingComma": "none",
6
+ "arrowParens": "avoid"
7
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "type": "node",
9
+ "request": "launch",
10
+ "name": "Launch Program",
11
+ "runtimeArgs": ["-r", "ts-node/register"],
12
+ "args": ["${workspaceFolder}/src/app.ts", "source"]
13
+ }
14
+ ]
15
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "editor.insertSpaces": false,
3
+ "editor.detectIndentation": false,
4
+ "editor.formatOnSave": true,
5
+ "typescript.tsdk": "node_modules\\typescript\\lib"
6
+ }
package/Dockerfile ADDED
@@ -0,0 +1,32 @@
1
+ ARG CPU_ARCH
2
+
3
+ FROM gitlab.ics-it.ru:4567/devops/oci-images:7.0-sdk-alpine-${CPU_ARCH} AS NET7
4
+ ARG NPM_REGISTRY
5
+ WORKDIR /app/builder
6
+ COPY . .
7
+ RUN npm set registry ${NPM_REGISTRY} && \
8
+ npm install && \
9
+ npx tsc && \
10
+ cp -R ./src/services/source/assets ./dist/src/services/source && \
11
+ cp ./package.json ./dist && \
12
+ cp ./jest.config.js ./dist && \
13
+ cd dist && \
14
+ npm pack && \
15
+ cd ../ && \
16
+ npm install -g ./dist
17
+
18
+ FROM gitlab.ics-it.ru:4567/devops/oci-images:6.0-sdk-alpine-${CPU_ARCH} AS NET6
19
+ ARG NPM_REGISTRY
20
+ COPY --from=NET7 /app/builder /app/builder
21
+ COPY --from=NET7 /root/.npm /root/.npm
22
+ WORKDIR /app/builder
23
+ RUN npm set registry ${NPM_REGISTRY} && \
24
+ npm install -g ./dist
25
+
26
+ FROM gitlab.ics-it.ru:4567/devops/oci-images:5.0-sdk-alpine-${CPU_ARCH} AS NET5
27
+ ARG NPM_REGISTRY
28
+ COPY --from=NET7 /app/builder /app/builder
29
+ COPY --from=NET7 /root/.npm /root/.npm
30
+ WORKDIR /app/builder
31
+ RUN npm set registry ${NPM_REGISTRY} && \
32
+ npm install -g ./dist
@@ -0,0 +1,7 @@
1
+ -
2
+ code: ""
3
+ version: ""
4
+ modules:
5
+ -
6
+ name: ._core
7
+ dir: ._core
@@ -0,0 +1,51 @@
1
+ version: "4.1"
2
+ mode: dev
3
+ using:
4
+ mdt: '#ui-webpack'
5
+ rb: '#RB-978'
6
+ data: default
7
+ ent: default
8
+ paths:
9
+ source: source
10
+ build: build
11
+ modules:
12
+ - mdt.admin
13
+ - mdt.audit
14
+ - mdt.oauth
15
+ - mdt.binding
16
+ - mdt.dataext
17
+ - mdt.dbm
18
+ - mdt.directory
19
+ - mdt.dm
20
+ - mdt.feedback
21
+ - mdt.import
22
+ - mdt.inline
23
+ - mdt.job
24
+ - mdt.log
25
+ - mdt.mapping
26
+ - mdt.password
27
+ - mdt.status
28
+ - mdt.tag
29
+ - mdt.odata
30
+ - mdt.apps
31
+ - ent.em
32
+ - ent.routes
33
+ - data.server.etl
34
+ - data.geo
35
+ - data.dadata
36
+ - data.calendar
37
+ - rb
38
+ - rb.geo
39
+ - rb.dadata
40
+ - rb.mtx
41
+ - rb.pnl
42
+ - rb.qst
43
+ - rb.binding
44
+ ui:
45
+ theme: 'mdt.coffee'
46
+ themes:
47
+ - mdt.coffee
48
+ - mdt.pink
49
+ - mdt.dark-blue
50
+ - mdt.light-blue
51
+ - mdt.modern-blue
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ preset: "ts-jest",
3
+ testEnvironment: "node"
4
+ };
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "ics-builder",
3
+ "version": "4.4.10",
4
+ "description": "",
5
+ "main": "./src/index.js",
6
+ "preferGlobal": true,
7
+ "scripts": {
8
+ "test": "jest",
9
+ "dev": "ts-node ./src/index.ts",
10
+ "copy-assets": "xcopy \"src/services/source/assets\" \"dist/src/services/source/assets\" /e /i",
11
+ "patch": "npx tsc && npm run copy-assets && npm version patch && copy package.json dist && copy jest.config.js dist && cd dist && npm publish",
12
+ "minor": "npx tsc && npm run copy-assets && npm version minor && copy package.json dist && copy jest.config.js dist && cd dist && npm publish",
13
+ "major": "npx tsc && npm run copy-assets && npm version major && copy package.json dist && copy jest.config.js dist && cd dist && npm publish",
14
+ "pack": "npx tsc && npm run copy-assets && copy package.json dist && copy jest.config.js dist && cd dist && npm pack"
15
+ },
16
+ "bin": {
17
+ "builder": "./src/index.js"
18
+ },
19
+ "keywords": [
20
+ "build tool"
21
+ ],
22
+ "repository": {
23
+ "type": "hg",
24
+ "url": "https://bitbucket.org/icsit/builder"
25
+ },
26
+ "author": "Sergey Voinkov <sergey.voinkov@ics-it.ru>",
27
+ "license": "ISC",
28
+ "devDependencies": {
29
+ "@types/jest": "^25.1.2",
30
+ "@types/jest-cli": "^24.3.0",
31
+ "@types/node": "^11.13.5",
32
+ "@types/shelljs": "^0.8.5",
33
+ "@types/webpack": "^4.4.31",
34
+ "@types/webpack-dev-server": "^3.1.5",
35
+ "@types/xml2js": "^0.4.5",
36
+ "@types/yamljs": "^0.2.30",
37
+ "ts-node": "^8.1.0"
38
+ },
39
+ "dependencies": {
40
+ "@babel/core": "^7.12.0",
41
+ "@babel/preset-env": "^7.12.0",
42
+ "autoprefixer": "^9.5.1",
43
+ "babel-loader": "^8.3.0",
44
+ "bundle-loader": "^0.5.6",
45
+ "chokidar": "^4.0.1",
46
+ "copy-webpack-plugin": "^5.0.3",
47
+ "css-loader": "^2.1.1",
48
+ "file-loader": "^3.0.1",
49
+ "html-webpack-plugin": "^3.2.0",
50
+ "jest-cli": "^26.6.3",
51
+ "jest-junit": "^12.0.0",
52
+ "just-task": "^0.9.9",
53
+ "less": "^3.13.1",
54
+ "less-loader": "^5.0.0",
55
+ "mini-css-extract-plugin": "^0.6.0",
56
+ "postcss-loader": "^3.0.0",
57
+ "shelljs": "^0.8.3",
58
+ "strip-bom-buf": "^2.0.0",
59
+ "style-loader": "^0.23.1",
60
+ "svg-inline-loader": "^0.8.0",
61
+ "ts-jest": "^25.5.1",
62
+ "ts-loader": "^6.2.1",
63
+ "tsconfig-paths-webpack-plugin": "^3.2.0",
64
+ "typescript": "^3.8.3",
65
+ "typescript-json-schema": "^0.51.0",
66
+ "virtual-module-webpack-plugin": "^0.4.1",
67
+ "webpack": "^4.42.1",
68
+ "webpack-cli": "^3.3.2",
69
+ "webpack-concat-plugin": "^3.0.0",
70
+ "webpack-dev-server": "^3.10.3",
71
+ "webpack-fix-style-only-entries": "^0.2.1",
72
+ "xml2js": "=0.4.17",
73
+ "yamljs": "^0.3.0",
74
+ "yargs": "^16.2.0"
75
+ }
76
+ }
@@ -247,6 +247,9 @@ var WebpackUiBuilder = /** @class */ (function (_super) {
247
247
  resolveAlias["react"] = path.resolve(basePath, "ui", "./node_modules/react");
248
248
  resolveAlias["react-dom"] = path.resolve(basePath, "ui", "./node_modules/react-dom");
249
249
  }
250
+ // Библиотеки с современным синтаксисом, которые нужно транспилировать для webpack 4
251
+ var packagesToTranspile = ["ics-ui-kit", "zustand-computed"];
252
+ var transpileRegex = new RegExp(packagesToTranspile.join("|"));
250
253
  return {
251
254
  context: path.join(this.config.paths.source, "mdt/ui"),
252
255
  mode: this.isProd() ? "production" : "development",
@@ -279,6 +282,33 @@ var WebpackUiBuilder = /** @class */ (function (_super) {
279
282
  },
280
283
  module: {
281
284
  rules: [
285
+ // Обработка современного JS из библиотеки ics-ui-kit для совместимости со старыми браузерами (IE 10+)
286
+ // Babel транспилирует ES2020+ синтаксис (nullish coalescing ??, optional chaining ?.) в ES5
287
+ {
288
+ test: /\.m?js$/,
289
+ include: transpileRegex,
290
+ use: {
291
+ loader: require.resolve("babel-loader"),
292
+ options: {
293
+ cacheDirectory: true,
294
+ cacheCompression: false,
295
+ presets: [
296
+ [
297
+ require.resolve("@babel/preset-env"),
298
+ {
299
+ targets: {
300
+ browsers: ["IE 10", "Chrome 33", "Firefox 33"]
301
+ },
302
+ exclude: ["transform-async-to-generator", "transform-regenerator"],
303
+ modules: false,
304
+ useBuiltIns: false
305
+ }
306
+ ]
307
+ ],
308
+ compact: this.isProd()
309
+ }
310
+ }
311
+ },
282
312
  {
283
313
  test: /\.tsx?$/,
284
314
  use: {
File without changes
@@ -0,0 +1,12 @@
1
+ gitlab:
2
+ url: "git@gitlab.ics-it.ru:"
3
+ defaultType: git
4
+ defaultGroup: ics
5
+ bitbucket:
6
+ url: ssh://hg@bitbucket.org/
7
+ defaultType: hg
8
+ defaultGroup: icsit
9
+ cartis:
10
+ url: "git@dev.cart.is:"
11
+ defaultType: git
12
+ defaultGroup: CART
@@ -0,0 +1,50 @@
1
+ CART:
2
+ cartis:
3
+ host: cartis
4
+ cartis-mdt:
5
+ host: cartis
6
+ ics:
7
+ ics-components:
8
+ host: gitlab
9
+ data:
10
+ host: gitlab
11
+ ics:
12
+ host: gitlab
13
+ dwh-etl:
14
+ host: gitlab
15
+ sellout:
16
+ host: gitlab
17
+ sellout-connector:
18
+ host: gitlab
19
+ mdt:
20
+ host: gitlab
21
+ ent:
22
+ host: gitlab
23
+ mdlz:
24
+ host: gitlab
25
+ alcon:
26
+ host: gitlab
27
+ libs:
28
+ host: gitlab
29
+ rb:
30
+ host: gitlab
31
+ jacobs:
32
+ host: gitlab
33
+ tasks:
34
+ host: gitlab
35
+ nordfox:
36
+ host: gitlab
37
+ fmd:
38
+ host: gitlab
39
+ etl:
40
+ host: gitlab
41
+ mars:
42
+ host: gitlab
43
+ cloud:
44
+ host: gitlab
45
+ kc:
46
+ host: gitlab
47
+ templates:
48
+ host: gitlab
49
+ valeant:
50
+ host: gitlab
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ics-builder",
3
- "version": "4.4.3",
3
+ "version": "4.4.10",
4
4
  "description": "",
5
5
  "main": "./src/index.js",
6
6
  "preferGlobal": true,
@@ -37,7 +37,10 @@
37
37
  "ts-node": "^8.1.0"
38
38
  },
39
39
  "dependencies": {
40
+ "@babel/core": "^7.12.0",
41
+ "@babel/preset-env": "^7.12.0",
40
42
  "autoprefixer": "^9.5.1",
43
+ "babel-loader": "^8.3.0",
41
44
  "bundle-loader": "^0.5.6",
42
45
  "chokidar": "^4.0.1",
43
46
  "copy-webpack-plugin": "^5.0.3",
package/src/app.ts ADDED
@@ -0,0 +1,64 @@
1
+ import * as path from "path";
2
+ import { ConfigManager } from "./services/configManager";
3
+ import { CommandManager } from "./services/commandManager";
4
+ import * as yargs from "yargs";
5
+ import { Utils } from "./utils";
6
+
7
+ const configs: { name: string; defaultValue: string | Function; alias: string; description: string }[] = [
8
+ {
9
+ name: "c",
10
+ defaultValue: () => path.join(process.cwd(), "build.yml"),
11
+ alias: "configName",
12
+ description: "Build configuration file name"
13
+ },
14
+ {
15
+ name: "w",
16
+ defaultValue: "false",
17
+ alias: "watch",
18
+ description: "Run tests in watch mode"
19
+ },
20
+ {
21
+ name: "m",
22
+ defaultValue: "false",
23
+ alias: "multiple",
24
+ description: "Generate multiple files"
25
+ },
26
+ {
27
+ name: "tbp",
28
+ defaultValue: process.cwd(),
29
+ alias: "testBasePath",
30
+ description: "Path to test files"
31
+ },
32
+ {
33
+ name: "trp",
34
+ defaultValue: () => path.join(process.cwd() + "/result.xml"),
35
+ alias: "testResultPath",
36
+ description: "Path to test output"
37
+ }
38
+ ];
39
+
40
+ let yargsArgs = yargs.usage("Usage: $0 <cmd> [args]");
41
+ configs.forEach(config => {
42
+ yargsArgs = yargsArgs
43
+ .default(config.name, typeof config.defaultValue == "string" ? config.defaultValue : config.defaultValue())
44
+ .alias(config.name, config.alias)
45
+ .describe(config.name, config.description);
46
+ });
47
+
48
+ let args = yargsArgs.argv;
49
+
50
+ let config =
51
+ !Utils.ensurePath(args["c"] as string) && args["_"].findIndex(c => c == "test-api" || c == "test-ui") != -1
52
+ ? null
53
+ : ConfigManager.getConfig(args["c"] as string, args["m"] == "true");
54
+
55
+ let testConfig = {
56
+ basePath: args["tbp"] as string,
57
+ resultPath: args["trp"] as string,
58
+ watch: args["w"] === "true" || args["w"] === true
59
+ };
60
+
61
+ let commandManager = new CommandManager(config, testConfig);
62
+
63
+ commandManager.addTasks(args["_"] as string[]);
64
+ commandManager.runTasks();
@@ -0,0 +1,15 @@
1
+ import {XmlFile} from "./xmlFile"
2
+
3
+ export class CsprojFile extends XmlFile {
4
+ setPublishPath(publishPath: string): void {
5
+ if (!this._xmlObj) this._readFile();
6
+ if (!this._xmlObj.Project)
7
+ this._xmlObj.Project = {};
8
+ if (!this._xmlObj.Project.PropertyGroup)
9
+ this._xmlObj.Project.PropertyGroup = {};
10
+ let propertyGroup = Array.isArray(this._xmlObj.Project.PropertyGroup)
11
+ ? this._xmlObj.Project.PropertyGroup[0]
12
+ : this._xmlObj.Project.PropertyGroup;
13
+ propertyGroup.PublishDir = publishPath;
14
+ }
15
+ }
@@ -0,0 +1,145 @@
1
+ import * as path from "path";
2
+ import * as shell from "shelljs";
3
+ import * as fs from "fs";
4
+
5
+ import { Package, PackageInfoLegacy } from "../../services/configManager";
6
+ import { Utils, Logger } from "../../utils";
7
+ import { BaseBuilder, BuilderConfig } from "../baseBuilder";
8
+ import { Net5ApiBuilder } from "../api/net5Builder";
9
+ import { packageStructureManager } from "../../services/packageStructure/packageStructureManager";
10
+
11
+ export class DotnetApiBuilder extends BaseBuilder {
12
+ constructor(config: BuilderConfig) {
13
+ super(config);
14
+ }
15
+
16
+ run(): void | Promise<void> {
17
+ if (this.config.api && this.config.api.framework && this.config.api.framework === ".net5") {
18
+ new Net5ApiBuilder(this.config).run();
19
+ } else {
20
+ this.config.packages.forEach(pkg => {
21
+ let pkgInfo = pkg.packageInfo as PackageInfoLegacy;
22
+ if (pkgInfo.api && pkgInfo.api.project) {
23
+ let apiSourceDir = path.join(this.config.paths.source, pkg.name, "api");
24
+ this.buildApiModule(path.dirname(path.join(apiSourceDir, pkgInfo.api.project)), pkg.name);
25
+ } else {
26
+ this.buildApiModules(pkg);
27
+ }
28
+ });
29
+ }
30
+
31
+ let buildInfo = this.packageManager.getAllPackages().map(pkg => {
32
+ return {
33
+ name: pkg.name,
34
+ version: pkg.version,
35
+ modules: pkg.modules.map(module => {
36
+ return `${pkg.name}.${module.name}`;
37
+ })
38
+ };
39
+ });
40
+
41
+ let infoDir = path.join(this.config.paths.build, "api");
42
+
43
+ if (Utils.ensurePath(infoDir)) {
44
+ this.writeBuildInfo(
45
+ path.join(this.config.paths.build, "api/settings"),
46
+ {
47
+ version: buildInfo
48
+ .map(pkg => {
49
+ return `${pkg.name} ${pkg.version}`;
50
+ })
51
+ .join(" / ")
52
+ },
53
+ "yml"
54
+ );
55
+ this.writeBuildInfo(path.join(this.config.paths.build, "build"), buildInfo, "json");
56
+ }
57
+ }
58
+
59
+ private buildApiModules(pkg: Package) {
60
+ packageStructureManager.getModuleSourcePaths(pkg, "api", this.config).forEach(({ moduleName, sourcePath }) => {
61
+ this.buildApiModule(sourcePath, `${pkg.name}.${moduleName}`);
62
+ });
63
+ }
64
+
65
+ private buildApiModule(moduleDir: string, moduleName: string) {
66
+ let projectFile = null;
67
+
68
+ let moduleConfig = this.parsePackageInfoLegacy(path.join(moduleDir, "module.yml"));
69
+
70
+ if (moduleConfig && moduleConfig.api && moduleConfig.api.project)
71
+ projectFile = path.join(moduleDir, moduleConfig.api.project);
72
+ else {
73
+ let files = shell.ls(path.join(moduleDir, "*.csproj"));
74
+ if (files.length) projectFile = files[0];
75
+ }
76
+
77
+ let targetDir = path.join(this.config.paths.build, "api");
78
+ let info = Array<string>();
79
+
80
+ if (Utils.ensurePath(projectFile)) {
81
+ let configuration = (this.config.api && this.config.api.configuration) || "debug";
82
+
83
+ moduleDir = path.dirname(projectFile);
84
+ let projectBinDir = path.join(moduleDir, "bin");
85
+ let webAppPath = path.join(moduleDir, "global.asax");
86
+
87
+ this.clearCache(moduleDir);
88
+ if (Utils.ensurePath(webAppPath)) {
89
+ Utils.copyFile(path.join(moduleDir, "web.config.template"), path.join(moduleDir, "web.config"));
90
+ }
91
+
92
+ this.msbuild(
93
+ projectFile,
94
+ ["Clean", "Build"],
95
+ [
96
+ `Configuration=${configuration}`,
97
+ "PostBuildEvent=",
98
+ "PreBuildEvent="
99
+ // "RestoreAdditionalProjectSources=https://stage.ics-it.ru/nuget/nuget"
100
+ ]
101
+ );
102
+ info.push(path.basename(projectFile) + " is built");
103
+
104
+ // web project?
105
+ if (Utils.ensurePath(webAppPath)) {
106
+ Utils.copyFile(path.join(moduleDir, "web.config.template"), path.join(targetDir, "web.config"));
107
+ Utils.copyFile(webAppPath, path.join(targetDir, "global.asax"));
108
+ } else {
109
+ projectBinDir = path.join(projectBinDir, configuration);
110
+ }
111
+
112
+ // remove *.dll.config and *.xml files from BIN
113
+ let files = fs.readdirSync(projectBinDir);
114
+ files.forEach(fileName => {
115
+ if (/(dll\.config|\.xml)$/.test(fileName)) fs.unlinkSync(path.join(projectBinDir, fileName));
116
+ });
117
+
118
+ // copy BIN and content directories
119
+ Utils.copyFolder(projectBinDir, path.join(targetDir, "bin"));
120
+ Utils.copyFolder(path.join(moduleDir, "content"), path.join(targetDir, "content"));
121
+ files = fs.readdirSync(moduleDir);
122
+ files.forEach(fileName => {
123
+ if (/(\.svc)$/.test(fileName))
124
+ Utils.copyFile(path.join(moduleDir, fileName), path.join(targetDir, fileName));
125
+ });
126
+
127
+ const moduleConfigFileName = "app.config";
128
+ this.copyModuleConfig(moduleDir, targetDir, moduleConfigFileName, moduleName + "." +moduleConfigFileName);
129
+ Utils.deleteFiles(targetDir, ["packages.config", "web.config.template"]);
130
+ Logger.info(moduleName.replace("._core", "") + ": " + info.join(", "));
131
+ }
132
+ }
133
+
134
+ private msbuild(project: string, targets: Array<string>, props: Array<string>): void {
135
+ let args = targets.map(t => "/t:" + t).join(" ") + " " + props.map(p => "/p:" + p).join(" ");
136
+ Utils.exec(`msbuild /restore /nologo /clp:ErrorsOnly;WarningsOnly /verbosity:quiet ${project} ${args}`, {
137
+ silent: false
138
+ });
139
+ }
140
+
141
+ private clearCache(folderPath: string): void {
142
+ Utils.deleteAllFoldersRecursively(folderPath, "bin");
143
+ Utils.deleteAllFoldersRecursively(folderPath, "obj");
144
+ }
145
+ }