@simplysm/sd-cli 12.7.29 → 12.7.30

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.
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export * from "./pkg-builders/client/sd-client.build-runner";
8
8
  export * from "./pkg-builders/client/sd-ng.bundler-context";
9
9
  export * from "./pkg-builders/client/sd-ng.bundler";
10
10
  export * from "./pkg-builders/client/sd-ng.plugin-creator";
11
+ export * from "./pkg-builders/lib/sd-cli-db-context.file-generator";
11
12
  export * from "./pkg-builders/lib/sd-cli-index.file-generator";
12
13
  export * from "./pkg-builders/lib/sd-js-lib.build-runner";
13
14
  export * from "./pkg-builders/lib/sd-ts-lib.build-runner";
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ export * from "./pkg-builders/client/sd-client.build-runner";
8
8
  export * from "./pkg-builders/client/sd-ng.bundler-context";
9
9
  export * from "./pkg-builders/client/sd-ng.bundler";
10
10
  export * from "./pkg-builders/client/sd-ng.plugin-creator";
11
+ export * from "./pkg-builders/lib/sd-cli-db-context.file-generator";
11
12
  export * from "./pkg-builders/lib/sd-cli-index.file-generator";
12
13
  export * from "./pkg-builders/lib/sd-js-lib.build-runner";
13
14
  export * from "./pkg-builders/lib/sd-ts-lib.build-runner";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uDAAuD,CAAC;AACtE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,qCAAqC,CAAC;AACpD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,gDAAgD,CAAC;AAC/D,OAAO,UAAU,CAAC;AAClB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,iCAAiC,CAAC;AAChD,OAAO,+BAA+B,CAAC;AACvC,OAAO,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uDAAuD,CAAC;AACtE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,qCAAqC,CAAC;AACpD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qDAAqD,CAAC;AACpE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,gDAAgD,CAAC;AAC/D,OAAO,UAAU,CAAC;AAClB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,iCAAiC,CAAC;AAChD,OAAO,+BAA+B,CAAC;AACvC,OAAO,yBAAyB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare class SdCliDbContextFileGenerator {
2
+ static watch(pkgPath: string, kebabName: string): void;
3
+ static run(pkgPath: string, kebabName: string, cache?: string): string;
4
+ }
@@ -0,0 +1,73 @@
1
+ import { FsUtils, PathUtils, SdFsWatcher } from "@simplysm/sd-core-node";
2
+ import path from "path";
3
+ import { StringUtils } from "@simplysm/sd-core-common";
4
+ export class SdCliDbContextFileGenerator {
5
+ static watch(pkgPath, kebabName) {
6
+ const targetFilePath = path.resolve(pkgPath, `src/${kebabName}.ts`);
7
+ let cache = FsUtils.exists(targetFilePath) ? FsUtils.readFile(targetFilePath) : undefined;
8
+ SdFsWatcher.watch([path.resolve(pkgPath, "src")]).onChange({ delay: 50 }, () => {
9
+ cache = this.run(pkgPath, kebabName, cache);
10
+ });
11
+ cache = this.run(pkgPath, kebabName, cache);
12
+ }
13
+ static run(pkgPath, kebabName, cache) {
14
+ const npmConfig = FsUtils.readJson(path.resolve(pkgPath, "package.json"));
15
+ const useExt = npmConfig.dependencies?.["@simplysm/sd-orm-common-ext"] != null;
16
+ const targetFilePath = path.resolve(pkgPath, `src/${kebabName}.ts`);
17
+ const importTexts = [
18
+ "import { IDbMigration, Queryable } from \"@simplysm/sd-orm-common\";",
19
+ "import { Type } from \"@simplysm/sd-core-common\";",
20
+ ];
21
+ if (useExt) {
22
+ importTexts.push("import { DbContextExt } from \"@simplysm/sd-orm-common-ext\";");
23
+ }
24
+ else {
25
+ importTexts.push("import { DbContext } from \"@simplysm/sd-orm-common\";");
26
+ }
27
+ // Migrations
28
+ const migTexts = [];
29
+ {
30
+ const filePaths = FsUtils.glob(path.resolve(pkgPath, "src/migrations/**/*.ts"), { nodir: true });
31
+ for (const filePath of filePaths.orderBy()) {
32
+ const requirePath = PathUtils.posix(path.relative(path.dirname(targetFilePath), filePath))
33
+ .replace(/\.tsx?$/, "")
34
+ .replace(/\/index$/, "");
35
+ const className = StringUtils.toPascalCase(path.basename(filePath, path.extname(filePath)));
36
+ importTexts.push(`import { ${className} } from "./${requirePath}";`);
37
+ migTexts.push(className + ",");
38
+ }
39
+ }
40
+ // Models
41
+ const modelTexts = [];
42
+ {
43
+ const filePaths = FsUtils.glob(path.resolve(pkgPath, "src/models/**/*.ts"), { nodir: true });
44
+ for (const filePath of filePaths.orderBy()) {
45
+ const requirePath = PathUtils.posix(path.relative(path.dirname(targetFilePath), filePath))
46
+ .replace(/\.tsx?$/, "")
47
+ .replace(/\/index$/, "");
48
+ const varName = StringUtils.toCamelCase(path.basename(filePath, path.extname(filePath)));
49
+ const className = StringUtils.toPascalCase(path.basename(filePath, path.extname(filePath)));
50
+ importTexts.push(`import { ${className} } from "./${requirePath}";`);
51
+ modelTexts.push(`${varName} = new Queryable(this, ${className})`);
52
+ }
53
+ }
54
+ const content = `
55
+ ${importTexts.join("\n")}
56
+
57
+ export class MainDbContext extends DbContext${useExt ? "Ext" : ""} {
58
+ get migrations(): Type<IDbMigration>[] {
59
+ return [
60
+ ${migTexts.map(item => " " + item).join("\n")}
61
+ ];
62
+ }
63
+
64
+ ${modelTexts.map(item => " " + item).join("\n")}
65
+ }
66
+ `.trim();
67
+ if (content.trim() !== cache?.trim()) {
68
+ FsUtils.writeFile(targetFilePath, content);
69
+ }
70
+ return content;
71
+ }
72
+ }
73
+ //# sourceMappingURL=sd-cli-db-context.file-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sd-cli-db-context.file-generator.js","sourceRoot":"","sources":["../../../src/pkg-builders/lib/sd-cli-db-context.file-generator.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import { FsUtils, SdLogger, PathUtils, SdFsWatcher } from "@simplysm/sd-core-node";
1
+ import { FsUtils, PathUtils, SdFsWatcher, SdLogger } from "@simplysm/sd-core-node";
2
2
  import path from "path";
3
3
  import { EventEmitter } from "events";
4
4
  import { SdCliIndexFileGenerator } from "./sd-cli-index.file-generator";
5
5
  import { SdTsLibBuilder } from "./sd-ts-lib.builder";
6
+ import { SdCliDbContextFileGenerator } from "./sd-cli-db-context.file-generator";
6
7
  export class SdTsLibBuildRunner extends EventEmitter {
7
8
  constructor(projConf, pkgPath) {
8
9
  super();
@@ -24,6 +25,10 @@ export class SdTsLibBuildRunner extends EventEmitter {
24
25
  this._debug("GEN index.ts...");
25
26
  SdCliIndexFileGenerator.run(this._pkgPath, this._pkgConf.polyfills);
26
27
  }
28
+ if (this._pkgConf.dbContext != null) {
29
+ this._debug("WATCH GEN index.ts...");
30
+ SdCliDbContextFileGenerator.run(this._pkgPath, this._pkgConf.dbContext);
31
+ }
27
32
  const result = await this._runAsync(false, new Set());
28
33
  return {
29
34
  affectedFilePathSet: result.affectedFileSet,
@@ -39,6 +44,10 @@ export class SdTsLibBuildRunner extends EventEmitter {
39
44
  this._debug("WATCH GEN index.ts...");
40
45
  SdCliIndexFileGenerator.watch(this._pkgPath, this._pkgConf.polyfills);
41
46
  }
47
+ if (this._pkgConf.dbContext != null) {
48
+ this._debug("WATCH GEN index.ts...");
49
+ SdCliDbContextFileGenerator.watch(this._pkgPath, this._pkgConf.dbContext);
50
+ }
42
51
  const result = await this._runAsync(true, new Set());
43
52
  const res = {
44
53
  affectedFilePathSet: result.affectedFileSet,
@@ -48,7 +57,8 @@ export class SdTsLibBuildRunner extends EventEmitter {
48
57
  this.emit("complete", res);
49
58
  this._debug("WATCH...");
50
59
  let lastWatchFileSet = result.watchFileSet;
51
- SdFsWatcher.watch(Array.from(this._watchScopePathSet)).onChange({ delay: 100 }, async (changeInfos) => {
60
+ SdFsWatcher.watch(Array.from(this._watchScopePathSet))
61
+ .onChange({ delay: 100 }, async (changeInfos) => {
52
62
  const currentChangeInfos = changeInfos.filter((item) => lastWatchFileSet.has(item.path));
53
63
  if (currentChangeInfos.length < 1)
54
64
  return;
@@ -69,7 +79,10 @@ export class SdTsLibBuildRunner extends EventEmitter {
69
79
  .mapMany((key) => FsUtils.glob(path.resolve(this._pkgPath, "../../node_modules", key)))
70
80
  .map((item) => PathUtils.norm(item));
71
81
  this._debug(`BUILD...`);
72
- this._builder ??= new SdTsLibBuilder(PathUtils.norm(this._pkgPath), dev, [PathUtils.norm(this._pkgPath, "../"), ...localUpdatePaths].map((item) => PathUtils.norm(item)));
82
+ this._builder ??= new SdTsLibBuilder(PathUtils.norm(this._pkgPath), dev, [
83
+ PathUtils.norm(this._pkgPath, "../"),
84
+ ...localUpdatePaths,
85
+ ].map((item) => PathUtils.norm(item)));
73
86
  const buildResult = await this._builder.buildAsync(modifiedFileSet);
74
87
  this._debug(`빌드 완료`);
75
88
  const watchFileSet = new Set(Array.from(buildResult.watchFileSet).filter((item) => PathUtils.isChildPath(item, path.resolve(this._pkgPath, "../")) ||
@@ -1 +1 @@
1
- {"version":3,"file":"sd-ts-lib.build-runner.js","sourceRoot":"","sources":["../../../src/pkg-builders/lib/sd-ts-lib.build-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-ts-lib.build-runner.js","sourceRoot":"","sources":["../../../src/pkg-builders/lib/sd-ts-lib.build-runner.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export interface ISdLibPackageConfig {
10
10
  publish?: "npm";
11
11
  polyfills?: string[];
12
12
  noGenIndex?: boolean;
13
+ dbContext?: string;
13
14
  }
14
15
  export interface ISdServerPackageConfig {
15
16
  type: "server";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/sd-cli",
3
- "version": "12.7.29",
3
+ "version": "12.7.30",
4
4
  "description": "심플리즘 패키지 - CLI",
5
5
  "author": "김석래",
6
6
  "repository": {
@@ -22,10 +22,10 @@
22
22
  "@angular/compiler-cli": "^19.2.5",
23
23
  "@anthropic-ai/sdk": "^0.39.0",
24
24
  "@electron/rebuild": "^3.7.1",
25
- "@simplysm/sd-core-common": "12.7.29",
26
- "@simplysm/sd-core-node": "12.7.29",
27
- "@simplysm/sd-service-server": "12.7.29",
28
- "@simplysm/sd-storage": "12.7.29",
25
+ "@simplysm/sd-core-common": "12.7.30",
26
+ "@simplysm/sd-core-node": "12.7.30",
27
+ "@simplysm/sd-service-server": "12.7.30",
28
+ "@simplysm/sd-storage": "12.7.30",
29
29
  "browserslist": "^4.24.4",
30
30
  "cordova": "^12.0.0",
31
31
  "css-has-pseudo": "^7.0.2",
package/src/index.ts CHANGED
@@ -8,6 +8,7 @@ export * from "./pkg-builders/client/sd-client.build-runner";
8
8
  export * from "./pkg-builders/client/sd-ng.bundler-context";
9
9
  export * from "./pkg-builders/client/sd-ng.bundler";
10
10
  export * from "./pkg-builders/client/sd-ng.plugin-creator";
11
+ export * from "./pkg-builders/lib/sd-cli-db-context.file-generator";
11
12
  export * from "./pkg-builders/lib/sd-cli-index.file-generator";
12
13
  export * from "./pkg-builders/lib/sd-js-lib.build-runner";
13
14
  export * from "./pkg-builders/lib/sd-ts-lib.build-runner";
@@ -0,0 +1,100 @@
1
+ import { FsUtils, PathUtils, SdFsWatcher } from "@simplysm/sd-core-node";
2
+ import path from "path";
3
+ import { StringUtils } from "@simplysm/sd-core-common";
4
+ import { INpmConfig } from "../../types/common-configs.types";
5
+
6
+ export class SdCliDbContextFileGenerator {
7
+ static watch(pkgPath: string, kebabName: string) {
8
+ const targetFilePath = path.resolve(pkgPath, `src/${kebabName}.ts`);
9
+ let cache = FsUtils.exists(targetFilePath) ? FsUtils.readFile(targetFilePath) : undefined;
10
+
11
+ SdFsWatcher.watch([path.resolve(pkgPath, "src")]).onChange({ delay: 50 }, () => {
12
+ cache = this.run(pkgPath, kebabName, cache);
13
+ });
14
+
15
+ cache = this.run(pkgPath, kebabName, cache);
16
+ }
17
+
18
+ static run(pkgPath: string, kebabName: string, cache?: string): string {
19
+ const npmConfig = FsUtils.readJson(path.resolve(pkgPath, "package.json")) as INpmConfig;
20
+ const useExt = npmConfig.dependencies?.["@simplysm/sd-orm-common-ext"] != null;
21
+
22
+ const targetFilePath = path.resolve(pkgPath, `src/${kebabName}.ts`);
23
+
24
+ const importTexts: string[] = [
25
+ "import { IDbMigration, Queryable } from \"@simplysm/sd-orm-common\";",
26
+ "import { Type } from \"@simplysm/sd-core-common\";",
27
+ ];
28
+
29
+ if (useExt) {
30
+ importTexts.push("import { DbContextExt } from \"@simplysm/sd-orm-common-ext\";");
31
+ }
32
+ else {
33
+ importTexts.push("import { DbContext } from \"@simplysm/sd-orm-common\";");
34
+ }
35
+
36
+ // Migrations
37
+ const migTexts: string[] = [];
38
+ {
39
+ const filePaths = FsUtils.glob(
40
+ path.resolve(pkgPath, "src/migrations/**/*.ts"),
41
+ { nodir: true },
42
+ );
43
+
44
+ for (const filePath of filePaths.orderBy()) {
45
+ const requirePath = PathUtils.posix(path.relative(path.dirname(targetFilePath), filePath))
46
+ .replace(/\.tsx?$/, "")
47
+ .replace(/\/index$/, "");
48
+ const className = StringUtils.toPascalCase(path.basename(
49
+ filePath,
50
+ path.extname(filePath),
51
+ ));
52
+ importTexts.push(`import { ${className} } from "./${requirePath}";`);
53
+ migTexts.push(className + ",");
54
+ }
55
+ }
56
+
57
+ // Models
58
+ const modelTexts: string[] = [];
59
+ {
60
+ const filePaths = FsUtils.glob(
61
+ path.resolve(pkgPath, "src/models/**/*.ts"),
62
+ { nodir: true },
63
+ );
64
+
65
+ for (const filePath of filePaths.orderBy()) {
66
+ const requirePath = PathUtils.posix(path.relative(path.dirname(targetFilePath), filePath))
67
+ .replace(/\.tsx?$/, "")
68
+ .replace(/\/index$/, "");
69
+ const varName = StringUtils.toCamelCase(path.basename(
70
+ filePath,
71
+ path.extname(filePath),
72
+ ));
73
+ const className = StringUtils.toPascalCase(path.basename(
74
+ filePath,
75
+ path.extname(filePath),
76
+ ));
77
+ importTexts.push(`import { ${className} } from "./${requirePath}";`);
78
+ modelTexts.push(`${varName} = new Queryable(this, ${className})`);
79
+ }
80
+ }
81
+
82
+ const content = `
83
+ ${importTexts.join("\n")}
84
+
85
+ export class MainDbContext extends DbContext${useExt ? "Ext" : ""} {
86
+ get migrations(): Type<IDbMigration>[] {
87
+ return [
88
+ ${migTexts.map(item => " " + item).join("\n")}
89
+ ];
90
+ }
91
+
92
+ ${modelTexts.map(item => " " + item).join("\n")}
93
+ }
94
+ `.trim();
95
+ if (content.trim() !== cache?.trim()) {
96
+ FsUtils.writeFile(targetFilePath, content);
97
+ }
98
+ return content;
99
+ }
100
+ }
@@ -1,10 +1,11 @@
1
- import { FsUtils, SdLogger, PathUtils, SdFsWatcher, TNormPath } from "@simplysm/sd-core-node";
1
+ import { FsUtils, PathUtils, SdFsWatcher, SdLogger, TNormPath } from "@simplysm/sd-core-node";
2
2
  import path from "path";
3
3
  import { EventEmitter } from "events";
4
4
  import { SdCliIndexFileGenerator } from "./sd-cli-index.file-generator";
5
5
  import { SdTsLibBuilder } from "./sd-ts-lib.builder";
6
6
  import { ISdLibPackageConfig, ISdProjectConfig } from "../../types/config.types";
7
7
  import { ISdBuildMessage, ISdBuildRunnerResult } from "../../types/build.types";
8
+ import { SdCliDbContextFileGenerator } from "./sd-cli-db-context.file-generator";
8
9
 
9
10
  export class SdTsLibBuildRunner extends EventEmitter {
10
11
  private _logger = SdLogger.get(["simplysm", "sd-cli", "SdCliTsLibBuilder"]);
@@ -47,6 +48,11 @@ export class SdTsLibBuildRunner extends EventEmitter {
47
48
  SdCliIndexFileGenerator.run(this._pkgPath, this._pkgConf.polyfills);
48
49
  }
49
50
 
51
+ if (this._pkgConf.dbContext != null) {
52
+ this._debug("WATCH GEN index.ts...");
53
+ SdCliDbContextFileGenerator.run(this._pkgPath, this._pkgConf.dbContext);
54
+ }
55
+
50
56
  const result = await this._runAsync(false, new Set<TNormPath>());
51
57
  return {
52
58
  affectedFilePathSet: result.affectedFileSet,
@@ -66,6 +72,11 @@ export class SdTsLibBuildRunner extends EventEmitter {
66
72
  SdCliIndexFileGenerator.watch(this._pkgPath, this._pkgConf.polyfills);
67
73
  }
68
74
 
75
+ if (this._pkgConf.dbContext != null) {
76
+ this._debug("WATCH GEN index.ts...");
77
+ SdCliDbContextFileGenerator.watch(this._pkgPath, this._pkgConf.dbContext);
78
+ }
79
+
69
80
  const result = await this._runAsync(true, new Set<TNormPath>());
70
81
  const res: ISdBuildRunnerResult = {
71
82
  affectedFilePathSet: result.affectedFileSet,
@@ -76,25 +87,26 @@ export class SdTsLibBuildRunner extends EventEmitter {
76
87
 
77
88
  this._debug("WATCH...");
78
89
  let lastWatchFileSet = result.watchFileSet;
79
- SdFsWatcher.watch(Array.from(this._watchScopePathSet)).onChange({ delay: 100 }, async (changeInfos) => {
80
- const currentChangeInfos = changeInfos.filter((item) => lastWatchFileSet.has(item.path));
81
- if (currentChangeInfos.length < 1) return;
90
+ SdFsWatcher.watch(Array.from(this._watchScopePathSet))
91
+ .onChange({ delay: 100 }, async (changeInfos) => {
92
+ const currentChangeInfos = changeInfos.filter((item) => lastWatchFileSet.has(item.path));
93
+ if (currentChangeInfos.length < 1) return;
82
94
 
83
- this.emit("change");
95
+ this.emit("change");
84
96
 
85
- const changeFileSet = new Set(currentChangeInfos.map((item) => PathUtils.norm(item.path)));
97
+ const changeFileSet = new Set(currentChangeInfos.map((item) => PathUtils.norm(item.path)));
86
98
 
87
- const watchResult = await this._runAsync(true, changeFileSet);
88
- const watchRes: ISdBuildRunnerResult = {
89
- affectedFilePathSet: watchResult.affectedFileSet,
90
- buildMessages: watchResult.buildMessages,
91
- emitFileSet: watchResult.emitFileSet,
92
- };
99
+ const watchResult = await this._runAsync(true, changeFileSet);
100
+ const watchRes: ISdBuildRunnerResult = {
101
+ affectedFilePathSet: watchResult.affectedFileSet,
102
+ buildMessages: watchResult.buildMessages,
103
+ emitFileSet: watchResult.emitFileSet,
104
+ };
93
105
 
94
- this.emit("complete", watchRes);
106
+ this.emit("complete", watchRes);
95
107
 
96
- lastWatchFileSet = watchResult.watchFileSet;
97
- });
108
+ lastWatchFileSet = watchResult.watchFileSet;
109
+ });
98
110
  }
99
111
 
100
112
  private async _runAsync(
@@ -114,7 +126,10 @@ export class SdTsLibBuildRunner extends EventEmitter {
114
126
  this._builder ??= new SdTsLibBuilder(
115
127
  PathUtils.norm(this._pkgPath),
116
128
  dev,
117
- [PathUtils.norm(this._pkgPath, "../"), ...localUpdatePaths].map((item) => PathUtils.norm(item)),
129
+ [
130
+ PathUtils.norm(this._pkgPath, "../"),
131
+ ...localUpdatePaths,
132
+ ].map((item) => PathUtils.norm(item)),
118
133
  );
119
134
  const buildResult = await this._builder.buildAsync(modifiedFileSet);
120
135
 
@@ -14,6 +14,7 @@ export interface ISdLibPackageConfig {
14
14
  publish?: "npm";
15
15
  polyfills?: string[];
16
16
  noGenIndex?: boolean;
17
+ dbContext?: string;
17
18
  }
18
19
 
19
20
  export interface ISdServerPackageConfig {