@simplysm/sd-cli 7.0.66 → 7.0.77
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/.eslintrc.cjs +3 -0
- package/dist/bin/sd-cli.mjs +62 -6
- package/dist/build-tool/SdCliCordova.d.ts +1 -1
- package/dist/build-tool/SdCliCordova.mjs +40 -27
- package/dist/build-tool/SdCliNgCacheCompilerHost.d.ts +1 -0
- package/dist/build-tool/SdCliNgCacheCompilerHost.mjs +11 -4
- package/dist/build-tool/SdCliPackageLinter.mjs +9 -5
- package/dist/builder/SdCliClientBuilder.d.ts +1 -0
- package/dist/builder/SdCliClientBuilder.mjs +45 -37
- package/dist/builder/SdCliJsLibBuilder.mjs +3 -3
- package/dist/builder/SdCliServerBuilder.d.ts +0 -1
- package/dist/builder/SdCliServerBuilder.mjs +39 -54
- package/dist/builder/SdCliTsLibBuilder.d.ts +1 -0
- package/dist/builder/SdCliTsLibBuilder.mjs +19 -7
- package/dist/commons.d.ts +18 -4
- package/dist/entry-points/SdCliFileCrypto.d.ts +7 -0
- package/dist/entry-points/SdCliFileCrypto.mjs +72 -0
- package/dist/entry-points/SdCliLocalUpdate.mjs +3 -3
- package/dist/entry-points/SdCliPrepare.mjs +3 -3
- package/dist/entry-points/SdCliWorkspace.d.ts +3 -0
- package/dist/entry-points/SdCliWorkspace.mjs +57 -37
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +2 -1
- package/dist/ng-tools/SdCliNgModuleGenerator.d.ts +2 -0
- package/dist/ng-tools/SdCliNgModuleGenerator.mjs +97 -18
- package/dist/ng-tools/babel/SdCliBbFileMetadata.d.ts +1 -1
- package/dist/ng-tools/babel/SdCliBbFileMetadata.mjs +4 -4
- package/dist/ng-tools/babel/TSdCliBbNgMetadata.mjs +6 -6
- package/dist/ng-tools/typescript/SdCliTsFileMetadata.mjs +2 -3
- package/dist/packages/SdCliPackage.mjs +52 -5
- package/dist/utils/SdCliBuildResultUtil.mjs +4 -1
- package/package.json +7 -9
- package/src/bin/sd-cli.ts +77 -6
- package/src/build-tool/SdCliCordova.ts +43 -26
- package/src/build-tool/SdCliNgCacheCompilerHost.ts +19 -11
- package/src/build-tool/SdCliPackageLinter.ts +8 -4
- package/src/builder/SdCliClientBuilder.ts +42 -32
- package/src/builder/SdCliJsLibBuilder.ts +2 -2
- package/src/builder/SdCliServerBuilder.ts +37 -51
- package/src/builder/SdCliTsLibBuilder.ts +22 -6
- package/src/commons.ts +21 -2
- package/src/entry-points/SdCliFileCrypto.ts +87 -0
- package/src/entry-points/SdCliLocalUpdate.ts +2 -2
- package/src/entry-points/SdCliPrepare.ts +2 -2
- package/src/entry-points/SdCliWorkspace.ts +59 -41
- package/src/index.ts +1 -0
- package/src/ng-tools/SdCliNgModuleGenerator.ts +119 -17
- package/src/ng-tools/babel/SdCliBbFileMetadata.ts +5 -5
- package/src/ng-tools/babel/TSdCliBbNgMetadata.ts +5 -5
- package/src/ng-tools/typescript/SdCliTsFileMetadata.ts +1 -2
- package/src/packages/SdCliPackage.ts +55 -4
- package/src/utils/SdCliBuildResultUtil.ts +4 -0
- package/tsconfig.json +3 -0
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import path from "path";
|
|
2
|
-
import { FsUtil, SdProcess } from "@simplysm/sd-core-node";
|
|
2
|
+
import { FsUtil, PathUtil, SdProcess } from "@simplysm/sd-core-node";
|
|
3
3
|
import { EventEmitter } from "events";
|
|
4
|
-
import { ObjectUtil } from "@simplysm/sd-core-common";
|
|
4
|
+
import { NeverEntryError, ObjectUtil, StringUtil } from "@simplysm/sd-core-common";
|
|
5
5
|
import { SdCliTsLibBuilder } from "../builder/SdCliTsLibBuilder";
|
|
6
6
|
import { SdCliJsLibBuilder } from "../builder/SdCliJsLibBuilder";
|
|
7
7
|
import { SdCliServerBuilder } from "../builder/SdCliServerBuilder";
|
|
8
8
|
import { SdCliNpmConfigUtil } from "../utils/SdCliNpmConfigUtil";
|
|
9
9
|
import { SdCliClientBuilder } from "../builder/SdCliClientBuilder";
|
|
10
|
+
import { SdStorage } from "@simplysm/sd-storage";
|
|
11
|
+
import ts from "typescript";
|
|
10
12
|
export class SdCliPackage extends EventEmitter {
|
|
11
13
|
constructor(_workspaceRootPath, rootPath, config) {
|
|
12
14
|
super();
|
|
@@ -66,8 +68,53 @@ export class SdCliPackage extends EventEmitter {
|
|
|
66
68
|
return await (await this._createBuilderAsync()).buildAsync();
|
|
67
69
|
}
|
|
68
70
|
async publishAsync() {
|
|
69
|
-
if (this.config.
|
|
70
|
-
|
|
71
|
+
if (this.config.publish !== undefined) {
|
|
72
|
+
if (this.config.type === "library") {
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
74
|
+
if (this.config.publish === "npm") {
|
|
75
|
+
await SdProcess.spawnAsync("npm publish --quiet --access public", { cwd: this.rootPath });
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
throw new NeverEntryError();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
if (this.config.publish.type === "ftp" || this.config.publish.type === "ftps" || this.config.publish.type === "sftp") {
|
|
83
|
+
const tsconfigPath = path.resolve(this.rootPath, "tsconfig-build.json");
|
|
84
|
+
const tsconfig = FsUtil.readJson(tsconfigPath);
|
|
85
|
+
const parsedTsconfig = ts.parseJsonConfigFileContent(tsconfig, ts.sys, this.rootPath, tsconfig.angularCompilerOptions);
|
|
86
|
+
const ftp = await SdStorage.connectAsync(this.config.publish.type, {
|
|
87
|
+
host: this.config.publish.host,
|
|
88
|
+
port: this.config.publish.port,
|
|
89
|
+
user: this.config.publish.user,
|
|
90
|
+
pass: this.config.publish.pass
|
|
91
|
+
});
|
|
92
|
+
await ftp.uploadDirAsync(parsedTsconfig.options.outDir, this.config.publish.path);
|
|
93
|
+
await ftp.closeAsync();
|
|
94
|
+
}
|
|
95
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
96
|
+
else if (this.config.publish.type === "local-directory") {
|
|
97
|
+
const tsconfigPath = path.resolve(this.rootPath, "tsconfig-build.json");
|
|
98
|
+
const tsconfig = FsUtil.readJson(tsconfigPath);
|
|
99
|
+
const parsedTsconfig = ts.parseJsonConfigFileContent(tsconfig, ts.sys, this.rootPath, tsconfig.angularCompilerOptions);
|
|
100
|
+
const targetRootPath = this.config.publish.path.replace(/%([^%]*)%/g, (item) => {
|
|
101
|
+
const envName = item.replace(/%/g, "");
|
|
102
|
+
if (!StringUtil.isNullOrEmpty(this._npmConfig.version) && envName === "SD_VERSION") {
|
|
103
|
+
return this._npmConfig.version;
|
|
104
|
+
}
|
|
105
|
+
return process.env[envName] ?? item;
|
|
106
|
+
});
|
|
107
|
+
const filePaths = await FsUtil.globAsync(path.resolve(this.rootPath, "**", "*"), {
|
|
108
|
+
dot: true,
|
|
109
|
+
nodir: true
|
|
110
|
+
});
|
|
111
|
+
await filePaths.parallelAsync(async (filePath) => {
|
|
112
|
+
const relativeFilePath = path.relative(parsedTsconfig.options.outDir, filePath);
|
|
113
|
+
const targetPath = PathUtil.posix(targetRootPath, relativeFilePath);
|
|
114
|
+
await FsUtil.copyAsync(filePath, targetPath);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
71
118
|
}
|
|
72
119
|
}
|
|
73
120
|
async _createBuilderAsync() {
|
|
@@ -97,4 +144,4 @@ export class SdCliPackage extends EventEmitter {
|
|
|
97
144
|
await FsUtil.writeJsonAsync(buildTsconfigFilePath, buildTsconfig, { space: 2 });
|
|
98
145
|
}
|
|
99
146
|
}
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlQYWNrYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhY2thZ2VzL1NkQ2xpUGFja2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTVCLE1BQU0sT0FBTyxZQUFhLFNBQVEsWUFBWTtJQXNCNUMsWUFBb0Msa0JBQTBCLEVBQzNCLFFBQWdCLEVBQ2hCLE1BQTJCO1FBQzVELEtBQUssRUFBRSxDQUFDO1FBSDBCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQXFCO1FBRzVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUExQkQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE9BQU87WUFDTCxHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUTtZQUMvRCxHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUztTQUNqRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQWFlLEVBQUUsQ0FBQyxLQUFzQixFQUFFLFFBQWtDO1FBQzNFLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxVQUFrQixFQUFFLFFBQWtCO1FBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztRQUVyQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBd0MsRUFBUSxFQUFFO1lBQzFFLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFDbEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxVQUFVLENBQUM7aUJBQzVCO2FBQ0Y7UUFDSCxDQUFDLENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2RCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVuRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN0RSxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVTtRQUNyQixPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2FBQzVDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDO2FBQ0QsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQzthQUNELFVBQVUsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVTtRQUNyQixPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO2dCQUNsQyx1RUFBdUU7Z0JBQ3ZFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO29CQUNqQyxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMscUNBQXFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7aUJBQzNGO3FCQUNJO29CQUNILE1BQU0sSUFBSSxlQUFlLEVBQUUsQ0FBQztpQkFDN0I7YUFDRjtpQkFDSTtnQkFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO29CQUNwSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztvQkFDeEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDL0MsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7b0JBRXZILE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7d0JBQ2pFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJO3dCQUM5QixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSTt3QkFDOUIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUk7d0JBQzlCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJO3FCQUMvQixDQUFDLENBQUM7b0JBQ0gsTUFBTSxHQUFHLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNuRixNQUFNLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztpQkFDeEI7Z0JBQ0QsdUVBQXVFO3FCQUNsRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRTtvQkFDdkQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUM7b0JBQ3hFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQy9DLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO29CQUV2SCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUM3RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLEtBQUssWUFBWSxFQUFFOzRCQUNsRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO3lCQUNoQzt3QkFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO29CQUN0QyxDQUFDLENBQUMsQ0FBQztvQkFFSCxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTt3QkFDL0UsR0FBRyxFQUFFLElBQUk7d0JBQ1QsS0FBSyxFQUFFLElBQUk7cUJBQ1osQ0FBQyxDQUFDO29CQUVILE1BQU0sU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUU7d0JBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDakYsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDcEUsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDL0MsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUI7UUFDL0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUV6RSxJQUFJLElBQUksRUFBRTtZQUNSLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDckM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2pJO2FBQ0ksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDdEMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNwRjthQUNJO1lBQ0gsT0FBTyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNwRjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCO1FBQ2xDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sWUFBWSxHQUFjLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWpGLE1BQU0sYUFBYSxHQUFjLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEUsYUFBYSxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztRQUNwRSxPQUFPLGFBQWEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO1FBQzdDLE9BQU8sYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7UUFFM0MsYUFBYSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0UsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUNqRixNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEYsQ0FBQztDQUNGIn0=
|
|
@@ -46,6 +46,9 @@ export class SdCliBuildResultUtil {
|
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
static getMessage(result) {
|
|
49
|
+
if (result.code === "ESLintError") {
|
|
50
|
+
return result.message;
|
|
51
|
+
}
|
|
49
52
|
let str = "";
|
|
50
53
|
if (result.filePath !== undefined) {
|
|
51
54
|
str += `${result.filePath}(${result.line ?? 0}, ${result.char ?? 0}): `;
|
|
@@ -57,4 +60,4 @@ export class SdCliBuildResultUtil {
|
|
|
57
60
|
return str;
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlCdWlsZFJlc3VsdFV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvU2RDbGlCdWlsZFJlc3VsdFV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFJeEIsTUFBTSxPQUFPLG9CQUFvQjtJQUN4QixNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBbUI7UUFDakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQzNELENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUVoQyxNQUFNLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFHMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIs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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.77",
|
|
4
4
|
"description": "심플리즘 패키지 - CLI",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"repository": {
|
|
@@ -49,10 +49,14 @@
|
|
|
49
49
|
"chokidar": "^3.5.3",
|
|
50
50
|
"@babel/parser": "^7.17.0",
|
|
51
51
|
"@babel/types": "^7.17.0",
|
|
52
|
-
"babel-loader": "^8.2.3",
|
|
53
52
|
"jsdom": "^19.0.0",
|
|
54
53
|
"cordova": "^11.0.0",
|
|
55
|
-
"jszip": "^3.7.1"
|
|
54
|
+
"jszip": "^3.7.1",
|
|
55
|
+
"@simplysm/sd-core-common": "7.0.77",
|
|
56
|
+
"@simplysm/sd-core-node": "7.0.77",
|
|
57
|
+
"@simplysm/sd-service-common": "7.0.77",
|
|
58
|
+
"@simplysm/sd-service-server": "7.0.77",
|
|
59
|
+
"@simplysm/sd-storage": "7.0.77"
|
|
56
60
|
},
|
|
57
61
|
"devDependencies": {
|
|
58
62
|
"@types/semver": "^7.3.9",
|
|
@@ -61,11 +65,5 @@
|
|
|
61
65
|
"@types/connect": "^3.4.35",
|
|
62
66
|
"@types/source-map-support": "^0.5.4",
|
|
63
67
|
"@types/jsdom": "^16.2.14"
|
|
64
|
-
},
|
|
65
|
-
"peerDependencies": {
|
|
66
|
-
"@simplysm/sd-core-common": "7.0.66",
|
|
67
|
-
"@simplysm/sd-core-node": "7.0.66",
|
|
68
|
-
"@simplysm/sd-service-common": "7.0.66",
|
|
69
|
-
"@simplysm/sd-service-server": "7.0.66"
|
|
70
68
|
}
|
|
71
69
|
}
|
package/src/bin/sd-cli.ts
CHANGED
|
@@ -5,11 +5,10 @@ import { hideBin } from "yargs/helpers";
|
|
|
5
5
|
import { Logger, LoggerSeverity } from "@simplysm/sd-core-node";
|
|
6
6
|
import { SdCliWorkspace } from "../entry-points/SdCliWorkspace";
|
|
7
7
|
import { SdCliLocalUpdate } from "../entry-points/SdCliLocalUpdate";
|
|
8
|
-
// import sourceMapSupport from "source-map-support";
|
|
9
8
|
import { SdCliNpm } from "../entry-points/SdCliNpm";
|
|
10
9
|
import { SdCliPrepare } from "../entry-points/SdCliPrepare";
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
import { SdCliFileCrypto } from "../entry-points/SdCliFileCrypto";
|
|
11
|
+
import { SdCliCordova } from "../build-tool/SdCliCordova";
|
|
13
12
|
|
|
14
13
|
Error.stackTraceLimit = Infinity;
|
|
15
14
|
|
|
@@ -58,9 +57,34 @@ const argv = yargs(hideBin(process.argv))
|
|
|
58
57
|
type: "string",
|
|
59
58
|
array: true,
|
|
60
59
|
describe: "옵션 설정 (설정파일에서 @로 시작하는 부분)"
|
|
60
|
+
},
|
|
61
|
+
packages: {
|
|
62
|
+
type: "string",
|
|
63
|
+
array: true,
|
|
64
|
+
describe: "수행할 패키지 설정"
|
|
61
65
|
}
|
|
62
66
|
})
|
|
63
67
|
)
|
|
68
|
+
.command(
|
|
69
|
+
"run-device <cordovaPath> <platform> <url>",
|
|
70
|
+
"변경감지중인 플랫폼을 디바이스에 앱 형태로 띄웁니다.",
|
|
71
|
+
(cmd) => cmd
|
|
72
|
+
.positional("cordovaPath", {
|
|
73
|
+
type: "string",
|
|
74
|
+
describe: "CORDOVA 프로젝트 경로",
|
|
75
|
+
demandOption: true
|
|
76
|
+
})
|
|
77
|
+
.positional("platform", {
|
|
78
|
+
type: "string",
|
|
79
|
+
describe: "빌드 플랫폼(android,...)",
|
|
80
|
+
demandOption: true
|
|
81
|
+
})
|
|
82
|
+
.positional("url", {
|
|
83
|
+
type: "string",
|
|
84
|
+
describe: "Webview로 오픈할 URL",
|
|
85
|
+
demandOption: true
|
|
86
|
+
})
|
|
87
|
+
)
|
|
64
88
|
.command(
|
|
65
89
|
"build",
|
|
66
90
|
"프로젝트의 각 패키지에 대한 빌드를 수행합니다.",
|
|
@@ -74,6 +98,11 @@ const argv = yargs(hideBin(process.argv))
|
|
|
74
98
|
type: "string",
|
|
75
99
|
array: true,
|
|
76
100
|
describe: "옵션 설정 (설정파일에서 @로 시작하는 부분)"
|
|
101
|
+
},
|
|
102
|
+
packages: {
|
|
103
|
+
type: "string",
|
|
104
|
+
array: true,
|
|
105
|
+
describe: "수행할 패키지 설정"
|
|
77
106
|
}
|
|
78
107
|
})
|
|
79
108
|
)
|
|
@@ -95,9 +124,32 @@ const argv = yargs(hideBin(process.argv))
|
|
|
95
124
|
type: "string",
|
|
96
125
|
array: true,
|
|
97
126
|
describe: "옵션 설정 (설정파일에서 @로 시작하는 부분)"
|
|
127
|
+
},
|
|
128
|
+
packages: {
|
|
129
|
+
type: "string",
|
|
130
|
+
array: true,
|
|
131
|
+
describe: "수행할 패키지 설정"
|
|
98
132
|
}
|
|
99
133
|
})
|
|
100
134
|
)
|
|
135
|
+
.command(
|
|
136
|
+
"enc-file <file>",
|
|
137
|
+
"파일을 암호화 합니다.",
|
|
138
|
+
(cmd) => cmd.version(false)
|
|
139
|
+
.positional("file", {
|
|
140
|
+
type: "string",
|
|
141
|
+
describe: "암호화할 파일명"
|
|
142
|
+
})
|
|
143
|
+
)
|
|
144
|
+
.command(
|
|
145
|
+
"dec-file <file>",
|
|
146
|
+
"파일을 복호화 합니다.",
|
|
147
|
+
(cmd) => cmd.version(false)
|
|
148
|
+
.positional("file", {
|
|
149
|
+
type: "string",
|
|
150
|
+
describe: "암호화된 파일명"
|
|
151
|
+
})
|
|
152
|
+
)
|
|
101
153
|
.parseSync();
|
|
102
154
|
|
|
103
155
|
if (argv.debug) {
|
|
@@ -136,14 +188,23 @@ const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
|
|
|
136
188
|
await new SdCliWorkspace(process.cwd())
|
|
137
189
|
.watchAsync({
|
|
138
190
|
confFileRelPath: argv.config ?? "simplysm.json",
|
|
139
|
-
optNames: argv.options ?? []
|
|
191
|
+
optNames: argv.options ?? [],
|
|
192
|
+
pkgs: argv.packages ?? []
|
|
140
193
|
});
|
|
141
194
|
}
|
|
195
|
+
else if (argv._[0] === "run-device") {
|
|
196
|
+
await SdCliCordova.runWebviewOnDeviceAsync(
|
|
197
|
+
argv.cordovaPath,
|
|
198
|
+
argv.platform as "browser" | "ios" | "android" | "electron",
|
|
199
|
+
argv.url
|
|
200
|
+
);
|
|
201
|
+
}
|
|
142
202
|
else if (argv._[0] === "build") {
|
|
143
203
|
await new SdCliWorkspace(process.cwd())
|
|
144
204
|
.buildAsync({
|
|
145
205
|
confFileRelPath: argv.config ?? "simplysm.json",
|
|
146
|
-
optNames: argv.options ?? []
|
|
206
|
+
optNames: argv.options ?? [],
|
|
207
|
+
pkgs: argv.packages ?? []
|
|
147
208
|
});
|
|
148
209
|
process.exit(0);
|
|
149
210
|
}
|
|
@@ -152,8 +213,18 @@ const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
|
|
|
152
213
|
.publishAsync({
|
|
153
214
|
noBuild: argv.noBuild,
|
|
154
215
|
confFileRelPath: argv.config ?? "simplysm.json",
|
|
155
|
-
optNames: argv.options ?? []
|
|
216
|
+
optNames: argv.options ?? [],
|
|
217
|
+
pkgs: argv.packages ?? []
|
|
156
218
|
});
|
|
219
|
+
if (!argv.noBuild) {
|
|
220
|
+
process.exit(0);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else if (argv._[0] === "enc-file") {
|
|
224
|
+
await new SdCliFileCrypto().encryptAsync(argv.file!);
|
|
225
|
+
}
|
|
226
|
+
else if (argv._[0] === "dec-file") {
|
|
227
|
+
await new SdCliFileCrypto().decryptAsync(argv.file!);
|
|
157
228
|
}
|
|
158
229
|
else {
|
|
159
230
|
throw new Error(`명령어가 잘못 되었습니다.\n\t${argv._[0]}\n`);
|
|
@@ -29,7 +29,7 @@ export class SdCliCordova {
|
|
|
29
29
|
|
|
30
30
|
public async initializeAsync(): Promise<void> {
|
|
31
31
|
if (FsUtil.exists(this.cordovaPath)) {
|
|
32
|
-
this._logger.log("
|
|
32
|
+
this._logger.log("이미 생성되어있는 '.cordova'를 사용합니다.");
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
35
35
|
await this._execAsync(`${this._binPath} telemetry on`, this._rootPath);
|
|
@@ -54,9 +54,13 @@ export class SdCliCordova {
|
|
|
54
54
|
|
|
55
55
|
// 미설치 플러그인들 설치
|
|
56
56
|
if (this._config.plugins) {
|
|
57
|
-
const pluginsFetch =
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
const pluginsFetch = FsUtil.exists(path.resolve(this.cordovaPath, "plugins/fetch.json"))
|
|
58
|
+
? await FsUtil.readJsonAsync(path.resolve(this.cordovaPath, "plugins/fetch.json"))
|
|
59
|
+
: undefined;
|
|
60
|
+
const alreadyPlugins = pluginsFetch != undefined
|
|
61
|
+
? Object.values(pluginsFetch)
|
|
62
|
+
.map((item: any) => (item.source.id !== undefined ? item.source.id.replace(/@.*$/, "") : item.source.url))
|
|
63
|
+
: [];
|
|
60
64
|
|
|
61
65
|
for (const plugin of this._config.plugins.distinct()) {
|
|
62
66
|
if (!alreadyPlugins.includes(plugin)) {
|
|
@@ -91,26 +95,38 @@ export class SdCliCordova {
|
|
|
91
95
|
}
|
|
92
96
|
|
|
93
97
|
// CONFIG: ANDROID usesCleartextTraffic 설정
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
98
|
+
if (this._config.platforms.includes("android")) {
|
|
99
|
+
if (!configFileContent.includes("xmlns:android=\"http://schemas.android.com/apk/res/android\"")) {
|
|
100
|
+
configFileContent = configFileContent.replace(
|
|
101
|
+
"xmlns=\"http://www.w3.org/ns/widgets\"",
|
|
102
|
+
`xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android"`
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
if (!configFileContent.includes("application android:usesCleartextTraffic=\"true\" />")) {
|
|
106
|
+
if (configFileContent.includes("<platform name=\"android\">")) {
|
|
107
|
+
configFileContent = configFileContent.replace("<platform name=\"android\">", `<platform name="android">
|
|
108
|
+
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
|
|
109
|
+
<application android:usesCleartextTraffic="true" />
|
|
110
|
+
</edit-config>`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
configFileContent = configFileContent.replace("<content src=\"index.html\" />", `<content src="index.html" />
|
|
114
|
+
<platform name="android">
|
|
115
|
+
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
|
|
116
|
+
<application android:usesCleartextTraffic="true" />
|
|
117
|
+
</edit-config>
|
|
118
|
+
</platform>`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
108
122
|
|
|
109
123
|
// CONFIG: 파일쓰기
|
|
110
124
|
await FsUtil.writeFileAsync(configFilePath, configFileContent);
|
|
111
125
|
}
|
|
112
126
|
|
|
113
127
|
public async buildAsync(outPath: string): Promise<void> {
|
|
128
|
+
const packageType = this._config.buildOption?.bundle ? "bundle" : "apk";
|
|
129
|
+
|
|
114
130
|
// ANDROID 서명 처리
|
|
115
131
|
if (this._config.buildOption?.sign?.android) {
|
|
116
132
|
await FsUtil.copyAsync(
|
|
@@ -126,7 +142,8 @@ export class SdCliCordova {
|
|
|
126
142
|
storePassword: this._config.buildOption.sign.android.storePassword,
|
|
127
143
|
alias: this._config.buildOption.sign.android.alias,
|
|
128
144
|
password: this._config.buildOption.sign.android.password,
|
|
129
|
-
keystoreType: this._config.buildOption.sign.android.keystoreType
|
|
145
|
+
keystoreType: this._config.buildOption.sign.android.keystoreType,
|
|
146
|
+
packageType
|
|
130
147
|
}
|
|
131
148
|
}
|
|
132
149
|
}
|
|
@@ -149,7 +166,6 @@ export class SdCliCordova {
|
|
|
149
166
|
|
|
150
167
|
// 실행
|
|
151
168
|
const buildType = this._config.buildOption?.debug ? "debug" : "release";
|
|
152
|
-
const packageType = this._config.buildOption?.bundle ? "bundle" : "apk";
|
|
153
169
|
for (const platform of this.platforms) {
|
|
154
170
|
await this._execAsync(`${this._binPath} build ${platform} --${buildType} --packageType=${packageType}`, this.cordovaPath);
|
|
155
171
|
}
|
|
@@ -194,13 +210,13 @@ export class SdCliCordova {
|
|
|
194
210
|
await FsUtil.writeFileAsync(path.resolve(outPath, "updates/", zipFileName), resultBuffer);
|
|
195
211
|
}
|
|
196
212
|
|
|
197
|
-
public async runWebviewOnDeviceAsync(platform: TSdCliCordovaPlatform, url: string): Promise<void> {
|
|
198
|
-
await FsUtil.removeAsync(path.resolve(
|
|
199
|
-
await FsUtil.mkdirsAsync(path.resolve(
|
|
200
|
-
await FsUtil.writeFileAsync(path.resolve(
|
|
213
|
+
public static async runWebviewOnDeviceAsync(cordovaPath: string, platform: TSdCliCordovaPlatform, url: string): Promise<void> {
|
|
214
|
+
await FsUtil.removeAsync(path.resolve(cordovaPath, "www"));
|
|
215
|
+
await FsUtil.mkdirsAsync(path.resolve(cordovaPath, "www"));
|
|
216
|
+
await FsUtil.writeFileAsync(path.resolve(cordovaPath, "www/index.html"), `'${url}'로 이동중... <script>setTimeout(function () {window.location.href = "${url}"}, 3000);</script>`.trim());
|
|
201
217
|
|
|
202
218
|
// CONFIG
|
|
203
|
-
const configFilePath = path.resolve(
|
|
219
|
+
const configFilePath = path.resolve(cordovaPath, "config.xml");
|
|
204
220
|
let configFileContent = await FsUtil.readFileAsync(configFilePath);
|
|
205
221
|
|
|
206
222
|
// CONFIG: 접근허용 일단 모두 지우기
|
|
@@ -214,6 +230,7 @@ export class SdCliCordova {
|
|
|
214
230
|
// CONFIG: 파일쓰기
|
|
215
231
|
await FsUtil.writeFileAsync(configFilePath, configFileContent);
|
|
216
232
|
|
|
217
|
-
|
|
233
|
+
const binPath = path.resolve(process.cwd(), "node_modules/.bin/cordova.cmd");
|
|
234
|
+
await SdProcess.spawnAsync(`${binPath} run ${platform} --device`, { cwd: cordovaPath }, true);
|
|
218
235
|
}
|
|
219
236
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
import { PathUtil } from "@simplysm/sd-core-node";
|
|
3
3
|
import sass from "sass";
|
|
4
|
-
import { pathToFileURL, URL } from "url";
|
|
4
|
+
import { fileURLToPath, pathToFileURL, URL } from "url";
|
|
5
5
|
|
|
6
6
|
export class SdCliNgCacheCompilerHost {
|
|
7
7
|
public static wrap(compilerHost: ts.CompilerHost,
|
|
@@ -23,17 +23,24 @@ export class SdCliNgCacheCompilerHost {
|
|
|
23
23
|
|
|
24
24
|
const cache = sourceFileCache.getOrCreate(PathUtil.posix(context.containingFile), {});
|
|
25
25
|
if (cache.styleContent === undefined) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return new URL(url.substring(1), pathToFileURL("node_modules"));
|
|
33
|
-
}
|
|
26
|
+
const scssResult = await sass.compileStringAsync(data, {
|
|
27
|
+
url: new URL((context.containingFile as string) + ".sd.scss"),
|
|
28
|
+
importer: {
|
|
29
|
+
findFileUrl: (url) => {
|
|
30
|
+
if (!url.startsWith("~")) return pathToFileURL(url);
|
|
31
|
+
return new URL(url.substring(1), pathToFileURL("node_modules"));
|
|
34
32
|
}
|
|
35
|
-
}
|
|
36
|
-
)
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
cache.styleContent = scssResult.css.toString();
|
|
37
|
+
|
|
38
|
+
const deps = scssResult.loadedUrls.slice(1).map((item) => PathUtil.posix(fileURLToPath(item.href)));
|
|
39
|
+
for (const dep of deps) {
|
|
40
|
+
const depCache = sourceFileCache.getOrCreate(dep, {});
|
|
41
|
+
depCache.importerSet = depCache.importerSet ?? new Set<string>();
|
|
42
|
+
depCache.importerSet.add(PathUtil.posix(context.containingFile));
|
|
43
|
+
}
|
|
37
44
|
}
|
|
38
45
|
return { content: cache.styleContent };
|
|
39
46
|
};
|
|
@@ -47,4 +54,5 @@ interface IFileCache {
|
|
|
47
54
|
sourceFile?: ts.SourceFile;
|
|
48
55
|
content?: string;
|
|
49
56
|
styleContent?: string;
|
|
57
|
+
importerSet?: Set<string>;
|
|
50
58
|
}
|
|
@@ -20,15 +20,18 @@ export class SdCliPackageLinter {
|
|
|
20
20
|
{
|
|
21
21
|
files: ["*.ts"],
|
|
22
22
|
parserOptions: {
|
|
23
|
-
programs: [program],
|
|
23
|
+
/*programs: [program],
|
|
24
24
|
tsconfigRootDir: null,
|
|
25
|
-
project: null
|
|
25
|
+
project: null*/
|
|
26
|
+
tsconfigRootDir: this._rootPath,
|
|
27
|
+
project: "tsconfig-build.json"
|
|
26
28
|
},
|
|
27
29
|
settings: {
|
|
28
30
|
"import/resolver": {
|
|
29
31
|
"typescript": {
|
|
30
|
-
programs: [program],
|
|
31
|
-
project: null
|
|
32
|
+
/*programs: [program],
|
|
33
|
+
project: null*/
|
|
34
|
+
project: path.resolve(this._rootPath, "tsconfig-build.json")
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
37
|
}
|
|
@@ -41,6 +44,7 @@ export class SdCliPackageLinter {
|
|
|
41
44
|
const lintFilePaths = await filePaths
|
|
42
45
|
.filterAsync(async (filePath) => (
|
|
43
46
|
!filePath.endsWith(".d.ts") &&
|
|
47
|
+
/\.[cm]?[tj]sx?$/.test(filePath) &&
|
|
44
48
|
!(await linter.isPathIgnored(filePath))
|
|
45
49
|
));
|
|
46
50
|
for (const lintFilePath of lintFilePaths) {
|