steedos-cli 2.2.52-beta.7 → 2.2.52

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 (44) hide show
  1. package/LICENSE.txt +2 -5
  2. package/README.md +28 -2
  3. package/default.steedos.config.js +273 -0
  4. package/default.steedos.settings.yml +114 -0
  5. package/dist/auth/index.d.ts +1 -0
  6. package/dist/commands/auth/login.d.ts +1 -0
  7. package/dist/commands/data/export.d.ts +1 -0
  8. package/dist/commands/data/import.d.ts +1 -0
  9. package/dist/commands/i18n.d.ts +1 -0
  10. package/dist/commands/i18n.js +1 -1
  11. package/dist/commands/i18n.js.map +1 -1
  12. package/dist/commands/package/build.d.ts +1 -0
  13. package/dist/commands/source/config.d.ts +1 -0
  14. package/dist/commands/source/convert.d.ts +1 -0
  15. package/dist/commands/source/delete.d.ts +4 -0
  16. package/dist/commands/source/deploy.d.ts +1 -0
  17. package/dist/commands/source/retrieve.d.ts +1 -0
  18. package/dist/commands/start.d.ts +1 -0
  19. package/dist/commands/start.js +477 -0
  20. package/dist/commands/start.js.map +1 -0
  21. package/dist/i18n/convert.d.ts +1 -0
  22. package/dist/i18n/convert.js +5 -1
  23. package/dist/i18n/convert.js.map +1 -1
  24. package/dist/i18n/index.d.ts +1 -0
  25. package/dist/index.d.ts +0 -0
  26. package/dist/source/convert/jsontofiles.d.ts +1 -0
  27. package/dist/source/convert/loadfiletojson.d.ts +1 -0
  28. package/dist/source/convert/steedosPackageJson.d.ts +1 -0
  29. package/dist/source/deploy/index.d.ts +5 -0
  30. package/dist/source/retrieve/index.d.ts +6 -0
  31. package/dist/start/index.d.ts +9 -0
  32. package/dist/start/index.js +165 -0
  33. package/dist/start/index.js.map +1 -0
  34. package/dist/util/index.d.ts +5 -0
  35. package/dist/util/index.js +39 -0
  36. package/dist/util/index.js.map +1 -0
  37. package/dist/util/load_file.d.ts +1 -0
  38. package/dist/util/parse_type.d.ts +8 -0
  39. package/dist/util/rm_dir.d.ts +1 -0
  40. package/dist/util/split_to_list.d.ts +1 -0
  41. package/oclif.manifest.json +1 -1
  42. package/package.json +14 -45
  43. package/dist/commands/convert/i18n.js +0 -32
  44. package/dist/commands/convert/i18n.js.map +0 -1
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Start = void 0;
27
+ const lodash_1 = require("lodash");
28
+ const util_1 = require("../util");
29
+ const path = require("path");
30
+ const fs = require("fs");
31
+ const clone = require("clone");
32
+ const validator = require('validator');
33
+ const yaml = require('js-yaml');
34
+ function calcString(str, content = process.env) {
35
+ if (!(0, lodash_1.isString)(str)) {
36
+ return str;
37
+ }
38
+ let calcFun = null;
39
+ var reg = /(\${[^{}]*\})/g;
40
+ let rev = str.replace(reg, function (m, $1) {
41
+ return $1.replace(/\{\s*/, "{args[\"").replace(/\s*\}/, "\"]}");
42
+ });
43
+ eval(`calcFun = function(args){return \`${rev}\`}`);
44
+ let val = calcFun.call({}, content);
45
+ if ((0, lodash_1.isString)(val) && val) {
46
+ return val.replace(/\\r/g, '\r').replace(/\\n/g, '\n').replace(/undefined/g, '');
47
+ }
48
+ else {
49
+ return null;
50
+ }
51
+ }
52
+ function calcSteedosConfig(config) {
53
+ (0, lodash_1.each)(config, (v, k) => {
54
+ if ((0, util_1.isJsonMap)(v)) {
55
+ let _d = (0, lodash_1.get)(config, k);
56
+ if ((0, util_1.isJsonMap)(_d)) {
57
+ config[k] = calcSteedosConfig(clone(_d));
58
+ }
59
+ else {
60
+ config[k] = calcString(v);
61
+ if (k && (0, lodash_1.isString)(k) && k.startsWith('enable_') && config[k] && (0, lodash_1.isString)(config[k])) {
62
+ config[k] = validator.toBoolean(config[k], true);
63
+ }
64
+ }
65
+ }
66
+ else {
67
+ config[k] = calcString(v);
68
+ if (k && (0, lodash_1.isString)(k) && k.startsWith('enable_') && config[k] && (0, lodash_1.isString)(config[k])) {
69
+ config[k] = validator.toBoolean(config[k], true);
70
+ }
71
+ }
72
+ });
73
+ return config;
74
+ }
75
+ class Start {
76
+ static loadDefaultSettings() {
77
+ const filePath = path.join(__dirname, '../', '../', "default.steedos.settings.yml");
78
+ if (fs.existsSync(filePath) && !fs.statSync(filePath).isDirectory()) {
79
+ return Start.loadSettings(filePath);
80
+ }
81
+ else {
82
+ return null;
83
+ }
84
+ }
85
+ static loadProjectSettings() {
86
+ let configPath = path.join((0, util_1.getBaseDirectory)(), 'steedos-config.yml');
87
+ if (fs.existsSync(configPath) && !fs.statSync(configPath).isDirectory()) {
88
+ return Start.loadSettings(configPath);
89
+ }
90
+ }
91
+ static async loadDefaultConfig() {
92
+ const filePath = path.join(__dirname, '../', '../', "default.steedos.config.js");
93
+ if (filePath) {
94
+ if (!fs.existsSync(filePath))
95
+ return Promise.reject(new Error(`Config file not found: ${filePath}`));
96
+ const mod = await Promise.resolve().then(() => __importStar(require(filePath.startsWith("/") ? filePath : "/" + filePath)));
97
+ return mod.default;
98
+ }
99
+ }
100
+ static async mergeConfig(projectConfig) {
101
+ const loadProjectSettings = Start.loadProjectSettings();
102
+ const _projectConfig = (0, lodash_1.defaultsDeep)(projectConfig, { settings: loadProjectSettings });
103
+ const defaultConfig = await Start.loadDefaultConfig();
104
+ const defaultSettings = Start.loadDefaultSettings();
105
+ const _defaultConfig = (0, lodash_1.defaultsDeep)(defaultConfig, { settings: defaultSettings });
106
+ const res = (0, lodash_1.cloneDeep)(_defaultConfig);
107
+ const mods = (0, lodash_1.cloneDeep)(_projectConfig);
108
+ Object.keys(mods).forEach(key => {
109
+ if (["created", "started", "stopped"].indexOf(key) !== -1) {
110
+ const functionArray = Start.mergeSchemaLifecycleHandlers(mods[key], res[key]);
111
+ if (functionArray.length > 0) {
112
+ res[key] = function (broker) {
113
+ functionArray.forEach((fn) => fn.call(this, broker));
114
+ };
115
+ }
116
+ }
117
+ else {
118
+ res[key] = (0, lodash_1.defaultsDeep)(mods[key], res[key]);
119
+ }
120
+ });
121
+ return res;
122
+ }
123
+ static mergeSchemaLifecycleHandlers(src, target) {
124
+ return (0, lodash_1.compact)(Start.flatten([target, src]));
125
+ }
126
+ static flatten(arr) {
127
+ return Array.prototype.reduce.call(arr, (a, b) => a.concat(b), []);
128
+ }
129
+ }
130
+ exports.Start = Start;
131
+ Start.loadSettings = (filePath) => {
132
+ try {
133
+ const settings = yaml.load(fs.readFileSync(filePath, 'utf8'));
134
+ if (settings.env) {
135
+ (0, lodash_1.each)(settings.env, function (item, key) {
136
+ process.env[key] = calcString(item);
137
+ });
138
+ }
139
+ let emailConfig = settings.email;
140
+ if (emailConfig) {
141
+ if (!emailConfig.url && emailConfig.host && emailConfig.port && emailConfig.username && emailConfig.password) {
142
+ let url = `smtps://${emailConfig.username}:${emailConfig.password}@${emailConfig.host}:${emailConfig.port}/`;
143
+ emailConfig.url = url;
144
+ }
145
+ if (emailConfig.url) {
146
+ process.env["MAIL_URL"] = calcString(emailConfig.url);
147
+ }
148
+ if (emailConfig.from) {
149
+ // 测试下来注册用户时不用MAIL_FROM这个环境变量也是可以的,这里重写是为了保险起见,怕其他地方用到这个环境变量
150
+ process.env["MAIL_FROM"] = calcString(emailConfig.from);
151
+ }
152
+ }
153
+ const res = calcSteedosConfig(settings);
154
+ if (res) {
155
+ res.setTenant = (tenant) => {
156
+ res.tenant = (0, lodash_1.defaultsDeep)(tenant, res.tenant);
157
+ };
158
+ }
159
+ return res;
160
+ }
161
+ catch (error) {
162
+ console.error('loadFile error', filePath, error);
163
+ }
164
+ };
165
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/start/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function getBaseDirectory(): string;
2
+ export declare function isObject(value: any): boolean;
3
+ export declare function isFunction(value: any): boolean;
4
+ export declare function isPlainObject(value: any): boolean;
5
+ export declare function isJsonMap(value: any): boolean;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isJsonMap = exports.isPlainObject = exports.isFunction = exports.isObject = exports.getBaseDirectory = void 0;
4
+ function getBaseDirectory() {
5
+ //return require('app-root-path').path
6
+ let cwd = process.cwd();
7
+ if (cwd.indexOf('.meteor') > -1) {
8
+ return cwd.split('.meteor')[0];
9
+ }
10
+ return cwd;
11
+ }
12
+ exports.getBaseDirectory = getBaseDirectory;
13
+ function isObject(value) {
14
+ return value != null && (typeof value === 'object' || typeof value === 'function');
15
+ }
16
+ exports.isObject = isObject;
17
+ function isFunction(value) {
18
+ return typeof value === 'function';
19
+ }
20
+ exports.isFunction = isFunction;
21
+ function isPlainObject(value) {
22
+ const isObjectObject = (o) => isObject(o) && Object.prototype.toString.call(o) === '[object Object]';
23
+ if (!isObjectObject(value))
24
+ return false;
25
+ const ctor = value.constructor;
26
+ if (!isFunction(ctor))
27
+ return false;
28
+ if (!isObjectObject(ctor.prototype))
29
+ return false;
30
+ if (!ctor.prototype.hasOwnProperty('isPrototypeOf'))
31
+ return false;
32
+ return true;
33
+ }
34
+ exports.isPlainObject = isPlainObject;
35
+ function isJsonMap(value) {
36
+ return isPlainObject(value);
37
+ }
38
+ exports.isJsonMap = isJsonMap;
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;AAAA,SAAgB,gBAAgB;IAC5B,sCAAsC;IACtC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;QAC7B,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KAClC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAPD,4CAOC;AAED,SAAgB,QAAQ,CAAC,KAAK;IAC1B,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC;AACvF,CAAC;AAFD,4BAEC;AAED,SAAgB,UAAU,CAAC,KAAK;IAC5B,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACvC,CAAC;AAFD,gCAEC;AAED,SAAgB,aAAa,CAAC,KAAK;IAC/B,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC;IACrG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QACtB,OAAO,KAAK,CAAC;IACjB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACjB,OAAO,KAAK,CAAC;IACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/B,OAAO,KAAK,CAAC;IACjB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,eAAe,CAAC;QAC/C,OAAO,KAAK,CAAC;IACjB,OAAO,IAAI,CAAC;AAChB,CAAC;AAZD,sCAYC;AAED,SAAgB,SAAS,CAAC,KAAK;IAC3B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAFD,8BAEC"}
@@ -0,0 +1 @@
1
+ export declare function loadFile(filePath: any): {};
@@ -0,0 +1,8 @@
1
+ export declare function getAllTypesForHelp(): any;
2
+ export declare function getAllTypes(): any;
3
+ export declare function getObjectProperties(): any;
4
+ export declare function getOtherTypes(): any;
5
+ export declare function isObjectProperty(input: any): boolean;
6
+ export declare function isOtherTypes(input: any): boolean;
7
+ export declare function fileName2FolderName(input: String): any;
8
+ export declare function folderName2FileName(input: String): any;
@@ -0,0 +1 @@
1
+ export declare function deleteFolderRecursive(path: any): void;
@@ -0,0 +1 @@
1
+ export declare function splitToList(input: string): any;
@@ -1 +1 @@
1
- {"version":"2.2.52-beta.7","commands":{"i18n":{"id":"i18n","description":"Create steedos project object i18n","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"serverDir":{"name":"serverDir","type":"option","char":"s","description":"Steedos Server Dir"},"packageDir":{"name":"packageDir","type":"option","char":"p","description":"Steedos Package Dir"}},"args":[{"name":"name","description":"language","required":true}]},"auth:login":{"id":"auth:login","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"username":{"name":"username","type":"option","char":"u","description":"user"},"password":{"name":"password","type":"option","char":"p","description":"password"}},"args":[]},"convert:i18n":{"id":"convert:i18n","description":"Create steedos project object i18n","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"serverDir":{"name":"serverDir","type":"option","char":"s","description":"Steedos Server Dir"},"packageDir":{"name":"packageDir","type":"option","char":"p","description":"Steedos Package Dir"}},"args":[{"name":"name","description":"language","required":true}]},"data:export":{"id":"data:export","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"objectName":{"name":"objectName","type":"option","char":"o","description":"objectName","required":true},"ids":{"name":"ids","type":"option","char":"i","description":"ids"},"fields":{"name":"fields","type":"option","char":"f","description":"fields"},"outputdir":{"name":"outputdir","type":"option","char":"d","description":"Directory to store generated files."},"prefix":{"name":"prefix","type":"option","char":"x","description":"Prefix of generated files."},"plan":{"name":"plan","type":"boolean","char":"p","description":"Generates multiple sObject tree files and a plan definition file for aggregated import.","allowNo":false}},"args":[]},"data:import":{"id":"data:import","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"sobjectfiles":{"name":"sobjectfiles","type":"option","char":"f","description":"Paths of JSON files containing a collection of record to insert. Either --sobjecttreefiles or --plan is required."},"plan":{"name":"plan","type":"option","char":"p","description":"Path to plan to insert multiple data files that have master-detail relationships. Either --sobjecttreefiles or --plan is required."}},"args":[]},"package:build":{"id":"package:build","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"appPath":{"name":"appPath","type":"option","char":"p","description":"appPath","required":true},"packageName":{"name":"packageName","type":"option","char":"n","description":"package name"},"loglevel":{"name":"loglevel","type":"option","char":"l","description":"(debug|info|warn) [default: warn] logging level for this command invocation"}},"args":[]},"source:config":{"id":"source:config","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"source:convert":{"id":"source:convert","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"oldFilesPath":{"name":"oldFilesPath","type":"option","char":"o","description":"oldFilesPath","required":true},"targetPath":{"name":"targetPath","type":"option","char":"t","description":"targetPath","required":true}},"args":[]},"source:delete":{"id":"source:delete","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"source:deploy":{"id":"source:deploy","description":" Use this command to deploy source (metadata that’s in source format)\nTo deploy metadata that’s in metadata format, use \"steedos source:deploy\".\n\nThe source you deploy overwrites the corresponding metadata on the server. This command does not attempt to merge your source with the versions on the server.\n\nExamples:\n\nTo deploy the source files in a directory:\n $ steedos source:deploy -p path/to/source\nTo deploy a specific custom object and the objects whose source is in a directory:\n $ steedos source:deploy -p \"path/to/custom/objects/myObject.object.yml\"\nor\"\n $ steedos source:deploy -p \"path/to/source/objects/my_object\"\n\n","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"sourcePath":{"name":"sourcePath","type":"option","char":"p","description":"Submit the local file under the path to the server"}},"args":[]},"source:retrieve":{"id":"source:retrieve","description":"Use this command to retrieve source (metadata that’s in source format)\nTo retrieve metadata that’s in metadata format, use \"steedos source:retrieve\".\n\nThe source you retrieve overwrites the corresponding source files in your local project. This command does not attempt to merge the source from your org with your local source files.\n\nExamples:\n\nTo retrieve the source files in a directory:\n $ steedos source:retrieve -p path/to/source\nTo retrieve a specific Custom object and the objects whose source is in a directory:\n $ steedos source:retrieve -p \"path/to/custom/objects/myObject.object.yml\"\nor\n $ steedos source:retrieve -p \"path/to/source/objects/my_object\"\nTo retrieve all Custom objects:\n $ steedos source:retrieve -m CustomObject\nTo retrieve a specific Custom object:\n $ steedos source:retrieve -m CustomObject:myObject\n\nTo retrieve all metadata components listed in a manifest:\n $ steedos source:retrieve -y path/to/package.yml\n\n\nMetaDataList:\n[\"ApprovalProcess\",\"Chart\",\"CustomAction\",\"CustomApplication\",\"CustomField\",\"CustomListview\",\"CustomObject\",\"CustomPermission\",\"CustomPermissionset\",\"CustomProfile\",\"CustomReport\",\"CustomValidationRule\",\"Flow\",\"FlowRole\",\"Layout\",\"Page\",\"Process\",\"Query\",\"RestrictionRule\",\"Role\",\"ShareRule\",\"Tab\",\"Workflow\"]\n","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"serverDir":{"name":"serverDir","type":"option","char":"p","description":"generate request according to the path and update it"},"manifest":{"name":"manifest","type":"option","char":"y","description":"file path for manifest (package.yml) of components to deploy"},"metadata":{"name":"metadata","type":"option","char":"m","description":"metadata"}},"args":[]}}}
1
+ {"version":"2.2.52","commands":{"i18n":{"id":"i18n","description":"sync i18n resources","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"serverDir":{"name":"serverDir","type":"option","char":"s","description":"Steedos Server Dir"},"packageDir":{"name":"packageDir","type":"option","char":"p","description":"Steedos Package Dir"}},"args":[{"name":"name","description":"language","required":true}]},"start":{"id":"start","description":"run steedos projects","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"repl":{"name":"repl","type":"boolean","char":"r","description":"If true, it switches to REPL mode after broker started.","allowNo":false},"silent":{"name":"silent","type":"boolean","char":"s","description":"Disable the broker logger. It prints nothing to the console.","allowNo":false},"hot":{"name":"hot","type":"boolean","char":"h","description":"Hot reload services when they change.","allowNo":false},"config":{"name":"config","type":"option","char":"c","description":"Load configuration file from a different path or a different filename.","default":"steedos.config.js"},"env":{"name":"env","type":"boolean","char":"e","description":"Load environment variables from the ‘.env’ file from the current folder.","allowNo":false},"envfile":{"name":"envfile","type":"option","char":"E","description":"Load environment variables from the specified file."},"instances":{"name":"instances","type":"option","char":"i","description":"Launch [number] node instances or max for all cpu cores (with cluster module)"}},"args":[{"name":"servicePaths","description":"service files or directories or glob masks","required":false,"default":""}]},"auth:login":{"id":"auth:login","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"username":{"name":"username","type":"option","char":"u","description":"user"},"password":{"name":"password","type":"option","char":"p","description":"password"}},"args":[]},"data:export":{"id":"data:export","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"objectName":{"name":"objectName","type":"option","char":"o","description":"objectName","required":true},"ids":{"name":"ids","type":"option","char":"i","description":"ids"},"fields":{"name":"fields","type":"option","char":"f","description":"fields"},"outputdir":{"name":"outputdir","type":"option","char":"d","description":"Directory to store generated files."},"prefix":{"name":"prefix","type":"option","char":"x","description":"Prefix of generated files."},"plan":{"name":"plan","type":"boolean","char":"p","description":"Generates multiple sObject tree files and a plan definition file for aggregated import.","allowNo":false}},"args":[]},"data:import":{"id":"data:import","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"sobjectfiles":{"name":"sobjectfiles","type":"option","char":"f","description":"Paths of JSON files containing a collection of record to insert. Either --sobjecttreefiles or --plan is required."},"plan":{"name":"plan","type":"option","char":"p","description":"Path to plan to insert multiple data files that have master-detail relationships. Either --sobjecttreefiles or --plan is required."}},"args":[]},"package:build":{"id":"package:build","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"appPath":{"name":"appPath","type":"option","char":"p","description":"appPath","required":true},"packageName":{"name":"packageName","type":"option","char":"n","description":"package name"},"loglevel":{"name":"loglevel","type":"option","char":"l","description":"(debug|info|warn) [default: warn] logging level for this command invocation"}},"args":[]},"source:config":{"id":"source:config","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"source:convert":{"id":"source:convert","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"oldFilesPath":{"name":"oldFilesPath","type":"option","char":"o","description":"oldFilesPath","required":true},"targetPath":{"name":"targetPath","type":"option","char":"t","description":"targetPath","required":true}},"args":[]},"source:delete":{"id":"source:delete","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"source:deploy":{"id":"source:deploy","description":" Use this command to deploy source (metadata that’s in source format)\nTo deploy metadata that’s in metadata format, use \"steedos source:deploy\".\n\nThe source you deploy overwrites the corresponding metadata on the server. This command does not attempt to merge your source with the versions on the server.\n\nExamples:\n\nTo deploy the source files in a directory:\n $ steedos source:deploy -p path/to/source\nTo deploy a specific custom object and the objects whose source is in a directory:\n $ steedos source:deploy -p \"path/to/custom/objects/myObject.object.yml\"\nor\"\n $ steedos source:deploy -p \"path/to/source/objects/my_object\"\n\n","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"sourcePath":{"name":"sourcePath","type":"option","char":"p","description":"Submit the local file under the path to the server"}},"args":[]},"source:retrieve":{"id":"source:retrieve","description":"Use this command to retrieve source (metadata that’s in source format)\nTo retrieve metadata that’s in metadata format, use \"steedos source:retrieve\".\n\nThe source you retrieve overwrites the corresponding source files in your local project. This command does not attempt to merge the source from your org with your local source files.\n\nExamples:\n\nTo retrieve the source files in a directory:\n $ steedos source:retrieve -p path/to/source\nTo retrieve a specific Custom object and the objects whose source is in a directory:\n $ steedos source:retrieve -p \"path/to/custom/objects/myObject.object.yml\"\nor\n $ steedos source:retrieve -p \"path/to/source/objects/my_object\"\nTo retrieve all Custom objects:\n $ steedos source:retrieve -m CustomObject\nTo retrieve a specific Custom object:\n $ steedos source:retrieve -m CustomObject:myObject\n\nTo retrieve all metadata components listed in a manifest:\n $ steedos source:retrieve -y path/to/package.yml\n\n\nMetaDataList:\n[\"ApprovalProcess\",\"Chart\",\"CustomAction\",\"CustomApplication\",\"CustomField\",\"CustomListview\",\"CustomObject\",\"CustomPermission\",\"CustomPermissionset\",\"CustomProfile\",\"CustomReport\",\"CustomValidationRule\",\"Flow\",\"FlowRole\",\"Layout\",\"Page\",\"Process\",\"Query\",\"RestrictionRule\",\"Role\",\"ShareRule\",\"Tab\",\"Workflow\"]\n","pluginName":"steedos-cli","pluginType":"core","aliases":[],"flags":{"serverDir":{"name":"serverDir","type":"option","char":"p","description":"generate request according to the path and update it"},"manifest":{"name":"manifest","type":"option","char":"y","description":"file path for manifest (package.yml) of components to deploy"},"metadata":{"name":"metadata","type":"option","char":"m","description":"metadata"}},"args":[]}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "steedos-cli",
3
- "version": "2.2.52-beta.7",
3
+ "version": "2.2.52",
4
4
  "description": "Develop and run your enterprise apps in miniutes",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -29,14 +29,16 @@
29
29
  "/bin",
30
30
  "/npm-shrinkwrap.json",
31
31
  "/oclif.manifest.json",
32
+ "/default.steedos.config.js",
33
+ "/default.steedos.settings.yml",
32
34
  "/dist"
33
35
  ],
34
36
  "dependencies": {
35
37
  "@geek/spinner": "1.0.0",
36
- "@oclif/command": "^1.5.10",
37
- "@oclif/config": "^1.12.8",
38
- "@oclif/plugin-help": "^2.1.6",
39
- "@steedos/metadata-core": "2.2.52-beta.7",
38
+ "@oclif/command": "^1.8.16",
39
+ "@oclif/config": "^1.8.3",
40
+ "@oclif/plugin-help": "^5.1.12",
41
+ "@steedos/metadata-core": "2.2.52",
40
42
  "archiver": "^5.0.2",
41
43
  "chalk": "2.4.2",
42
44
  "change-case": "^3.1.0",
@@ -47,56 +49,23 @@
47
49
  "fs-extra": "^7.0.1",
48
50
  "glob": "^7.1.6",
49
51
  "inquirer": "^6.2.2",
50
- "js-yaml": "^3.13.1",
52
+ "js-yaml": "^3.14.1",
51
53
  "latest-version": "^5.1.0",
54
+ "moleculer": "^0.14.21",
52
55
  "readline-sync": "^1.4.10",
53
56
  "reflect-metadata": "^0.1.13",
54
57
  "request": "^2.88.2",
55
58
  "request-promise": "^4.2.5",
59
+ "rimraf": "3.0.2",
56
60
  "underscore": "^1.11.0",
57
61
  "validator": "^13.5.2",
58
62
  "yargs": "^13.2.1",
59
63
  "yn": "^2.0.0"
60
64
  },
61
65
  "devDependencies": {
62
- "@oclif/dev-cli": "^1.21.2",
63
- "@oclif/test": "^1.2.4",
64
- "@types/chai": "^4.1.7",
65
- "@types/chai-as-promised": "7.1.0",
66
- "@types/chai-subset": "^1.3.2",
67
- "@types/fs-extra": "^5.0.5",
68
- "@types/handlebars": "^4.0.40",
69
- "@types/inquirer": "0.0.44",
70
- "@types/mocha": "^5.2.6",
71
- "@types/node": "^11.10.4",
72
- "@types/sinon": "^7.0.8",
73
- "@types/yargs": "^12.0.1",
74
- "babel-preset-es2015": "^6.24.1",
75
- "chai": "^4.2.0",
76
- "chai-as-promised": "^7.1.1",
77
- "chai-subset": "^1.6.0",
78
- "codecov": "^3.2.0",
79
- "dotenv": "^6.2.0",
80
- "eslint": "^5.14.1",
81
- "eslint-config-oclif": "^3.1.0",
82
- "globby": "^8.0.2",
83
- "husky": "^1.3.1",
84
- "istanbul": "^0.4.5",
85
- "javascript-obfuscator": "^2.9.1",
86
- "jsfuck": "^0.4.0",
87
- "lint-staged": "^8.1.5",
88
- "mocha": "^6.0.2",
89
- "nyc": "^13.3.0",
90
- "prettier": "^1.16.4",
91
- "remap-istanbul": "^0.13.0",
92
- "rimraf": "^2.6.3",
93
- "sinon": "^7.2.6",
94
- "sinon-chai": "^3.3.0",
95
- "tslint": "^5.13.1",
96
- "tslint-config-prettier": "^1.18.0",
97
- "typescript": "^3.3.3333",
98
- "uglify-es": "^3.3.9",
99
- "uglify-js": "^3.10.0"
66
+ "@oclif/dev-cli": "^1.26.10",
67
+ "@oclif/test": "^2.1.0",
68
+ "moleculer-repl": "^0.7.1"
100
69
  },
101
70
  "oclif": {
102
71
  "commands": "./dist/commands",
@@ -108,5 +77,5 @@
108
77
  "publishConfig": {
109
78
  "access": "public"
110
79
  },
111
- "gitHead": "ecf8b1cc86813d63697cca572cde7a4d996643d6"
80
+ "gitHead": "1447c9ca4fb57a49233704f50a7d757aff0c5027"
112
81
  }
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const { Command, flags } = require('@oclif/command');
4
- const convert_1 = require("../../i18n/convert");
5
- const path = require("path");
6
- class I18nCommand extends Command {
7
- async run() {
8
- const { args, flags } = this.parse(I18nCommand);
9
- // console.log('flags', flags);
10
- // console.log('args', args);
11
- let lng = args.name;
12
- let serverDir = flags.serverDir || process.cwd();
13
- let packageDir = flags.packageDir || serverDir;
14
- global.Meteor = {};
15
- process.chdir(serverDir);
16
- (0, convert_1.CliLogic)(lng, packageDir);
17
- }
18
- }
19
- I18nCommand.args = [
20
- {
21
- name: 'name',
22
- required: true,
23
- description: 'language',
24
- }
25
- ];
26
- I18nCommand.description = `Create steedos project object i18n`;
27
- I18nCommand.flags = {
28
- serverDir: flags.string({ char: 's', description: 'Steedos Server Dir' }),
29
- packageDir: flags.string({ char: 'p', description: 'Steedos Package Dir' }),
30
- };
31
- module.exports = I18nCommand;
32
- //# sourceMappingURL=i18n.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/commands/convert/i18n.ts"],"names":[],"mappings":";;AAAA,MAAM,EAAC,OAAO,EAAE,KAAK,EAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;AAClD,gDAA2C;AAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAE7B,MAAM,WAAY,SAAQ,OAAO;IAC/B,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/C,+BAA+B;QAC/B,6BAA6B;QAC7B,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACjD,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;QAC9C,MAAc,CAAC,MAAM,GAAG,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACzB,IAAA,kBAAQ,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,WAAW,CAAC,IAAI,GAAG;IAClB;QACC,IAAI,EAAS,MAAM;QACnB,QAAQ,EAAK,IAAI;QACjB,WAAW,EAAE,UAAU;KACvB;CACD,CAAC;AAEF,WAAW,CAAC,WAAW,GAAG,oCAAoC,CAAA;AAE9D,WAAW,CAAC,KAAK,GAAG;IAChB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,oBAAoB,EAAC,CAAC;IACvE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,qBAAqB,EAAC,CAAC;CAC5E,CAAA;AAED,MAAM,CAAC,OAAO,GAAG,WAAW,CAAA"}