miqro 1.8.1 → 1.8.7
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/cli.js +47 -44
- package/dist/cmds/wc-compile-sfc.d.ts +2 -0
- package/dist/cmds/wc-compile-sfc.js +195 -0
- package/dist/cmds/wc-new.d.ts +4 -0
- package/dist/cmds/wc-new.js +160 -0
- package/dist/utils/index.js +2 -2
- package/dist/utils/xml.js +15 -17
- package/package.json +5 -3
package/dist/cli.js
CHANGED
|
@@ -6,6 +6,7 @@ const start_1 = require("./cmds/start");
|
|
|
6
6
|
const test_1 = require("./cmds/test");
|
|
7
7
|
const watch_1 = require("./cmds/watch");
|
|
8
8
|
const new_1 = require("./cmds/new");
|
|
9
|
+
const wc_new_1 = require("./cmds/wc-new");
|
|
9
10
|
const doc_json_1 = require("./cmds/doc-json");
|
|
10
11
|
const doc_md_1 = require("./cmds/doc-md");
|
|
11
12
|
const config_init_1 = require("./cmds/config-init");
|
|
@@ -24,98 +25,100 @@ const db_createmodel_1 = require("./cmds/db-createmodel");
|
|
|
24
25
|
const db_push_data_1 = require("./cmds/db-push-data");
|
|
25
26
|
const db_dump_data_1 = require("./cmds/db-dump-data");
|
|
26
27
|
const db_migrate_1 = require("./cmds/db-migrate");
|
|
27
|
-
|
|
28
|
+
const wc_compile_sfc_1 = require("./cmds/wc-compile-sfc");
|
|
28
29
|
const wc_cache_templates_1 = require("./cmds/wc-cache-templates");
|
|
29
30
|
// noinspection SpellCheckingInspection
|
|
30
31
|
(0, utils_1.mainCMD)({
|
|
31
|
-
["new"]: { section: "
|
|
32
|
-
["new:typescript"]: { cb: new_1.mainTS, tabs: 4, description: `create a new typescript project
|
|
32
|
+
["new"]: { section: "api development", cb: new_1.mainJS, tabs: 5, description: `create a new project.` },
|
|
33
|
+
["new:typescript"]: { cb: new_1.mainTS, tabs: 4, description: `create a new typescript project.` },
|
|
33
34
|
["new:main"]: {
|
|
34
|
-
section: "http scafolding",
|
|
35
|
+
//section: "http scafolding",
|
|
35
36
|
cb: handler_main_new_1.main,
|
|
36
37
|
tabs: 4,
|
|
37
|
-
description: `creates a new main file
|
|
38
|
+
description: `creates a new main file.`
|
|
38
39
|
},
|
|
39
|
-
["new:route"]: { cb: handler_apiroute_new_1.main, tabs: 4, description: `creates a new route
|
|
40
|
+
["new:route"]: { cb: handler_apiroute_new_1.main, tabs: 4, description: `creates a new route.` },
|
|
40
41
|
["config"]: {
|
|
41
|
-
section: "config managment",
|
|
42
|
+
//section: "config managment",
|
|
42
43
|
cb: config_1.main,
|
|
43
44
|
tabs: 5,
|
|
44
|
-
description: `
|
|
45
|
+
description: `print config as a json.`
|
|
45
46
|
},
|
|
46
47
|
["config:bash"]: {
|
|
47
48
|
cb: config_bash_1.main,
|
|
48
49
|
tabs: 4,
|
|
49
|
-
description: `
|
|
50
|
+
description: `print config as a bash script.`
|
|
50
51
|
},
|
|
51
52
|
["config:env"]: {
|
|
52
53
|
cb: config_env_1.main,
|
|
53
54
|
tabs: 4,
|
|
54
|
-
description: `
|
|
55
|
+
description: `print config as a env file.`
|
|
56
|
+
},
|
|
57
|
+
["config:init"]: { cb: config_init_1.main, tabs: 4, description: `inits your config folder.` },
|
|
58
|
+
["doc"]: {
|
|
59
|
+
//section: "api documentation",
|
|
60
|
+
tabs: 5,
|
|
61
|
+
cb: doc_json_1.main,
|
|
62
|
+
description: `api folder auto doc as a json.`
|
|
63
|
+
},
|
|
64
|
+
["doc:md"]: {
|
|
65
|
+
cb: doc_md_1.main,
|
|
66
|
+
tabs: 5,
|
|
67
|
+
description: `api folder auto doc as a markdown.`
|
|
68
|
+
},
|
|
69
|
+
["new:front"]: { section: "front development", cb: wc_new_1.mainJS, tabs: 4, description: `create a new project.` },
|
|
70
|
+
["new:front:typescript"]: { cb: wc_new_1.mainTS, tabs: 3, description: `create a new typescript project.` },
|
|
71
|
+
["generate:template:cache"]: {
|
|
72
|
+
//section: "web components",
|
|
73
|
+
tabs: 3,
|
|
74
|
+
cb: wc_cache_templates_1.main, description: `generate cache.json for webcomponents.`
|
|
75
|
+
},
|
|
76
|
+
["sfc"]: {
|
|
77
|
+
tabs: 5,
|
|
78
|
+
cb: wc_compile_sfc_1.main, description: `transform sfc files to javascript.`
|
|
55
79
|
},
|
|
56
|
-
["config:init"]: { cb: config_init_1.main, tabs: 4, description: `inits your config folder. ${config_init_1.usage}` },
|
|
57
80
|
["start"]: {
|
|
58
81
|
section: "start helpers",
|
|
59
82
|
tabs: 5,
|
|
60
83
|
cb: start_1.main,
|
|
61
|
-
description: `start
|
|
84
|
+
description: `start script in cluster mode.`
|
|
62
85
|
},
|
|
63
86
|
["watch"]: {
|
|
64
87
|
//section: "watch",
|
|
65
88
|
cb: watch_1.main,
|
|
66
89
|
tabs: 5,
|
|
67
|
-
description: `watch
|
|
90
|
+
description: `watch folder for changes.`
|
|
68
91
|
},
|
|
69
92
|
["serve"]: {
|
|
70
93
|
//section: "serve static files",
|
|
71
94
|
tabs: 5,
|
|
72
|
-
cb: serve_1.main, description: `serve static files
|
|
73
|
-
},
|
|
74
|
-
["generate:template:cache"]: {
|
|
75
|
-
section: "web components",
|
|
76
|
-
tabs: 6,
|
|
77
|
-
cb: wc_cache_templates_1.main, description: `generate a cache.json for webcomponents. ${wc_cache_templates_1.usage}`
|
|
78
|
-
},
|
|
79
|
-
/*["sfc"]: {
|
|
80
|
-
tabs: 6,
|
|
81
|
-
cb: wcCompileSFC, description: `transpiles a single file webcomponent to commonjs file for packing. ${wcCompileSFCUsage}`
|
|
82
|
-
},*/
|
|
83
|
-
["doc"]: {
|
|
84
|
-
section: "api documentation",
|
|
85
|
-
tabs: 5,
|
|
86
|
-
cb: doc_json_1.main,
|
|
87
|
-
description: `outputs to stdout an api folder auto doc as a json. ${doc_json_1.usage}`
|
|
88
|
-
},
|
|
89
|
-
["doc:md"]: {
|
|
90
|
-
cb: doc_md_1.main,
|
|
91
|
-
tabs: 5,
|
|
92
|
-
description: `outputs to a file an api folder auto doc as a markdown. ${doc_md_1.usage}`
|
|
95
|
+
cb: serve_1.main, description: `serve static files.`
|
|
93
96
|
},
|
|
94
|
-
["test"]: { section: "testing", cb: test_1.main, tabs: 5, description: `run test files
|
|
95
|
-
["new:test"]: { cb: new_test_1.main, tabs: 4, description: `create new test.js file
|
|
97
|
+
["test"]: { section: "testing", cb: test_1.main, tabs: 5, description: `run test files.` },
|
|
98
|
+
["new:test"]: { cb: new_test_1.main, tabs: 4, description: `create new test.js file.` },
|
|
96
99
|
["db:console"]: {
|
|
97
100
|
section: "sequelize helpers",
|
|
98
101
|
cb: db_console_1.main,
|
|
99
102
|
tabs: 4,
|
|
100
|
-
description: `
|
|
103
|
+
description: `a query console for sequelize.`
|
|
101
104
|
},
|
|
102
105
|
["db:dump:data"]: {
|
|
103
106
|
cb: db_dump_data_1.main,
|
|
104
107
|
tabs: 4,
|
|
105
|
-
description: `dump the data of the database
|
|
108
|
+
description: `dump the data of the database.`
|
|
106
109
|
},
|
|
107
|
-
["db:push:data"]: { cb: db_push_data_1.main, tabs: 4, description: `push a dump to the database
|
|
110
|
+
["db:push:data"]: { cb: db_push_data_1.main, tabs: 4, description: `push a dump to the database.` },
|
|
108
111
|
["db:make:migration"]: {
|
|
109
112
|
cb: db_makemigrations_1.main,
|
|
110
113
|
tabs: 3,
|
|
111
|
-
description: `
|
|
114
|
+
description: `generate migrations from model changes.`
|
|
112
115
|
},
|
|
113
116
|
["db:make:migration:force:clean:state"]: {
|
|
114
117
|
cb: db_sync_makemigrations_1.main,
|
|
115
118
|
tabs: 1,
|
|
116
|
-
description: `
|
|
119
|
+
description: `force 'local' model state.`
|
|
117
120
|
},
|
|
118
|
-
["db:migrate"]: { cb: db_migrate_1.main, tabs: 4, description: `loads config
|
|
119
|
-
["db:init"]: { cb: db_init_1.main, tabs: 5, description: `init sequelize configuration
|
|
120
|
-
["db:create:model"]: { cb: db_createmodel_1.main, tabs: 4, description: `creates an example model
|
|
121
|
+
["db:migrate"]: { cb: db_migrate_1.main, tabs: 4, description: `loads config and run migrations.` },
|
|
122
|
+
["db:init"]: { cb: db_init_1.main, tabs: 5, description: `init sequelize configuration.` },
|
|
123
|
+
["db:create:model"]: { cb: db_createmodel_1.main, tabs: 4, description: `creates an example model.` }
|
|
121
124
|
}, "npx miqro <command> [args]", console);
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.main = exports.usage = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const xml_js_1 = require("../utils/xml.js");
|
|
7
|
+
const utils_1 = require("../utils");
|
|
8
|
+
exports.usage = "npx miqro sfc <sfcDir> <outDir> [-m @miqro/web-components] [-e \".js\"]";
|
|
9
|
+
const DATA_SHADOW_ROOT_MODE = "data-shadow-root-mode";
|
|
10
|
+
const main = async () => {
|
|
11
|
+
const flags = (0, utils_1.extractFlags)(process.argv.slice(3), {
|
|
12
|
+
flags: {
|
|
13
|
+
"m": {
|
|
14
|
+
description: "module to require defineFunction",
|
|
15
|
+
hasValue: true
|
|
16
|
+
},
|
|
17
|
+
"o": {
|
|
18
|
+
description: "extension of output",
|
|
19
|
+
hasValue: true
|
|
20
|
+
},
|
|
21
|
+
"i": {
|
|
22
|
+
description: "extension of input",
|
|
23
|
+
hasValue: true
|
|
24
|
+
},
|
|
25
|
+
"c": {
|
|
26
|
+
description: "remove output files",
|
|
27
|
+
hasValue: false
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
if (flags.files.length !== 2) {
|
|
32
|
+
throw new Error(exports.usage);
|
|
33
|
+
}
|
|
34
|
+
const extension = flags.flags.o ? flags.flags.o : ".js";
|
|
35
|
+
const inputExtension = flags.flags.i ? flags.flags.i : ".sfc";
|
|
36
|
+
const webComponentsModule = flags.flags.m ? flags.flags.m : "@miqro/web-components";
|
|
37
|
+
const defineRequireString = extension === ".ts" ?
|
|
38
|
+
`import {define} from "${webComponentsModule}"` :
|
|
39
|
+
`import {define} from "${webComponentsModule}";`;
|
|
40
|
+
const componentRequireString = extension === ".ts" ?
|
|
41
|
+
`import {FunctionComponentThis} from "${webComponentsModule}"` : "";
|
|
42
|
+
const sfcDir = (0, path_1.resolve)(process.cwd(), flags.files[0]);
|
|
43
|
+
const outDir = (0, path_1.resolve)(process.cwd(), flags.files[1]);
|
|
44
|
+
if (!(0, fs_1.statSync)(sfcDir).isDirectory() || !(0, fs_1.statSync)(outDir).isDirectory()) {
|
|
45
|
+
throw new Error(exports.usage);
|
|
46
|
+
}
|
|
47
|
+
const tE = [];
|
|
48
|
+
function recursiveDir(folder) {
|
|
49
|
+
const files = (0, fs_1.readdirSync)(folder);
|
|
50
|
+
for (const file of files) {
|
|
51
|
+
const filePath = (0, path_1.resolve)(folder, file);
|
|
52
|
+
if ((0, fs_1.statSync)(filePath).isDirectory()) {
|
|
53
|
+
recursiveDir(filePath);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
if ((0, path_1.extname)(filePath) === inputExtension) {
|
|
57
|
+
tE.push(async function () {
|
|
58
|
+
try {
|
|
59
|
+
const outMainFileName = (0, path_1.basename)(filePath.substring(0, filePath.length - inputExtension.length) + extension);
|
|
60
|
+
const outFileName = (0, path_1.basename)(filePath.substring(0, filePath.length - inputExtension.length) + "-component" + extension);
|
|
61
|
+
const realOutFileDirname = (0, path_1.resolve)(outDir, (0, path_1.relative)(sfcDir, (0, path_1.dirname)(filePath)));
|
|
62
|
+
const realOutFilePath = (0, path_1.resolve)(realOutFileDirname, outFileName);
|
|
63
|
+
const realMainOutFilePath = (0, path_1.resolve)(realOutFileDirname, outMainFileName);
|
|
64
|
+
if (flags.flags.c !== undefined) {
|
|
65
|
+
console.log("%s\n\tremoving %s\n\tremoving %s", filePath, realOutFilePath, realMainOutFilePath);
|
|
66
|
+
(0, fs_1.unlinkSync)(realOutFilePath);
|
|
67
|
+
(0, fs_1.unlinkSync)(realMainOutFilePath);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.log("%s ->\n\t%s\n\t%s", filePath, realOutFilePath, realMainOutFilePath);
|
|
71
|
+
if (!(0, fs_1.existsSync)(realOutFileDirname)) {
|
|
72
|
+
(0, fs_1.mkdirSync)(realOutFileDirname, {
|
|
73
|
+
recursive: true
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const [jsContent, mainJS] = await compileSFC(filePath, {
|
|
77
|
+
defineRequireString,
|
|
78
|
+
componentRequireString
|
|
79
|
+
});
|
|
80
|
+
(0, fs_1.writeFileSync)(realOutFilePath, jsContent);
|
|
81
|
+
const requireInput = "./" + (0, path_1.relative)((0, path_1.dirname)(realMainOutFilePath), realOutFilePath);
|
|
82
|
+
const commonJSANDESM = requireInput.substring(0, requireInput.length - extension.length) + ".js";
|
|
83
|
+
(0, fs_1.writeFileSync)(realMainOutFilePath, mainJS(commonJSANDESM));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
console.error(e);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
recursiveDir(sfcDir);
|
|
95
|
+
await Promise.allSettled(tE.map(t => t()));
|
|
96
|
+
};
|
|
97
|
+
exports.main = main;
|
|
98
|
+
async function compileSFC(sfcPath, requireStrings, extension = ".js") {
|
|
99
|
+
const json = await (0, xml_js_1.parseXML2JSON)((0, fs_1.readFileSync)(sfcPath).toString());
|
|
100
|
+
json.children = json.children.filter((c) => c.name !== "TEXT");
|
|
101
|
+
if (json.children.length !== 1) {
|
|
102
|
+
throw new Error("bad sfc structure(0) for " + sfcPath);
|
|
103
|
+
}
|
|
104
|
+
json.children[0].children = json.children[0].children.filter((c) => c.name !== "TEXT");
|
|
105
|
+
if (json.children[0].children.length !== 2) {
|
|
106
|
+
throw new Error("bad sfc structure(1) for " + sfcPath);
|
|
107
|
+
}
|
|
108
|
+
const componentName = json.children[0].name;
|
|
109
|
+
const componentTemplateTag = json.children[0].children[0];
|
|
110
|
+
const componentScriptTag = json.children[0].children[1];
|
|
111
|
+
const dataShadowRootMode = json.children[0].attributes[DATA_SHADOW_ROOT_MODE] ? json.children[0].attributes[DATA_SHADOW_ROOT_MODE] : undefined;
|
|
112
|
+
let modeArg;
|
|
113
|
+
switch (dataShadowRootMode) {
|
|
114
|
+
case "false":
|
|
115
|
+
modeArg = false;
|
|
116
|
+
break;
|
|
117
|
+
case "true":
|
|
118
|
+
case "close":
|
|
119
|
+
modeArg = { mode: "closed" };
|
|
120
|
+
break;
|
|
121
|
+
case "open":
|
|
122
|
+
modeArg = { mode: "open" };
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
if (componentTemplateTag.name !== "template" || componentScriptTag.name !== "script") {
|
|
126
|
+
throw new Error("bad sfc structure(2) for " + sfcPath);
|
|
127
|
+
}
|
|
128
|
+
/*console.dir(json, {
|
|
129
|
+
depth: 10
|
|
130
|
+
});*/
|
|
131
|
+
if (componentScriptTag.children.length !== 1 || componentScriptTag.children[0].type !== "text") {
|
|
132
|
+
throw new Error("bad sfc structure(3) for " + sfcPath);
|
|
133
|
+
}
|
|
134
|
+
const scriptText = componentScriptTag.children[0].text;
|
|
135
|
+
let baseTabulation = null;
|
|
136
|
+
let startTabulationIndex = 0;
|
|
137
|
+
const jsContent = scriptText.split("\n").map((l, i) => {
|
|
138
|
+
const trimmed = l.trim();
|
|
139
|
+
if (baseTabulation === null && trimmed !== "") {
|
|
140
|
+
baseTabulation = l.indexOf(trimmed);
|
|
141
|
+
startTabulationIndex = i;
|
|
142
|
+
const tabulationSubstring = l.substring(baseTabulation);
|
|
143
|
+
return tabulationSubstring.trim() !== "" ? tabulationSubstring : l;
|
|
144
|
+
}
|
|
145
|
+
else if (baseTabulation !== null) {
|
|
146
|
+
const tabulationSubstring = l.substring(baseTabulation);
|
|
147
|
+
return tabulationSubstring.trim() !== "" ? tabulationSubstring : l;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
return "";
|
|
151
|
+
}
|
|
152
|
+
}).join("\n").slice(startTabulationIndex);
|
|
153
|
+
const template = componentTemplateTag.children.map((tag) => tagToString(tag)).join("");
|
|
154
|
+
const outFileContent = `${requireStrings.componentRequireString ? `${requireStrings.componentRequireString}\n\n` : ""}${jsContent}`;
|
|
155
|
+
return [
|
|
156
|
+
outFileContent,
|
|
157
|
+
(jsContentPath) => `${requireStrings.defineRequireString ? `${requireStrings.defineRequireString}\n` : ""}` +
|
|
158
|
+
`import render from "${jsContentPath}";\n\n` +
|
|
159
|
+
`define("${componentName}", render, ${JSON.stringify({
|
|
160
|
+
template,
|
|
161
|
+
...(dataShadowRootMode === undefined ? {} : {
|
|
162
|
+
shadowInit: modeArg
|
|
163
|
+
})
|
|
164
|
+
})});`
|
|
165
|
+
];
|
|
166
|
+
}
|
|
167
|
+
function getAttributes(tag) {
|
|
168
|
+
const attributes = Object.keys(tag.attributes);
|
|
169
|
+
let ret = "";
|
|
170
|
+
for (const attribute of attributes) {
|
|
171
|
+
if (ret === "") {
|
|
172
|
+
ret = `${attribute}="${tag.attributes[attribute]}"`;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
ret += ` ${attribute}="${tag.attributes[attribute]}"`;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return ret;
|
|
179
|
+
}
|
|
180
|
+
function tagToString(tag) {
|
|
181
|
+
if (tag.type === "text") {
|
|
182
|
+
return tag.text ? tag.text : "";
|
|
183
|
+
}
|
|
184
|
+
else if (tag.type === "comment") {
|
|
185
|
+
return `<!--${tag.text}-->`;
|
|
186
|
+
}
|
|
187
|
+
else if (tag.isSelfClosing) {
|
|
188
|
+
const attrs = getAttributes(tag);
|
|
189
|
+
return `<${tag.name}${attrs ? ` ${attrs}` : ""}/>`;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
const attrs = getAttributes(tag);
|
|
193
|
+
return `<${tag.name}${attrs ? ` ${attrs}` : ""}>${tag.children.map((c) => tagToString(c)).join("\n")}</${tag.name}>`;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const usageJS = "usage: npx miqro new:front <identifier ex: NEW_APP>";
|
|
2
|
+
export declare const usageTS = "usage: npx miqro new:front:typescript <identifier ex: NEW_APP>";
|
|
3
|
+
export declare const mainJS: (typescript?: boolean) => void;
|
|
4
|
+
export declare const mainTS: () => void;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mainTS = exports.mainJS = exports.usageTS = exports.usageJS = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
const indexHTML = {
|
|
8
|
+
js: () => `<html>` +
|
|
9
|
+
`<script type="text/javascript" src="app.bundle.min.js"></script>` +
|
|
10
|
+
`<body>` +
|
|
11
|
+
`<my-app></my-app>` +
|
|
12
|
+
`</body>` +
|
|
13
|
+
`</html>`
|
|
14
|
+
};
|
|
15
|
+
const indexComponent = {
|
|
16
|
+
js: () => `const {define} = require("@miqro/web-components")\n` +
|
|
17
|
+
`\n` +
|
|
18
|
+
`define("my-app", function() {\n` +
|
|
19
|
+
` return "<p>Hello World!</p>";\n` +
|
|
20
|
+
`});`,
|
|
21
|
+
ts: () => `import {define, RenderFunctionThis} from "@miqro/web-components"\n` +
|
|
22
|
+
`\n` +
|
|
23
|
+
`define("my-app", function(this: RenderFunctionThis) {\n` +
|
|
24
|
+
` return "<p>Hello World!</p>";\n` +
|
|
25
|
+
`});`
|
|
26
|
+
};
|
|
27
|
+
const webpackconfig = {
|
|
28
|
+
js: () => `module.exports = {\n` +
|
|
29
|
+
` mode: "production",\n` +
|
|
30
|
+
` entry: "./src/index.js",\n` +
|
|
31
|
+
` output: {\n` +
|
|
32
|
+
` path: require("path").resolve(__dirname, 'build'),\n` +
|
|
33
|
+
` filename: "app.bundle.min.js"\n` +
|
|
34
|
+
` }\n` +
|
|
35
|
+
`};`,
|
|
36
|
+
ts: () => `module.exports = {\n` +
|
|
37
|
+
` mode: "production",\n` +
|
|
38
|
+
` entry: "./dist/index.js",\n` +
|
|
39
|
+
` output: {\n` +
|
|
40
|
+
` path: require("path").resolve(__dirname, 'build'),\n` +
|
|
41
|
+
` filename: "app.bundle.min.js"\n` +
|
|
42
|
+
` }\n` +
|
|
43
|
+
`};`,
|
|
44
|
+
};
|
|
45
|
+
const gitignoreTemplate = {
|
|
46
|
+
ts: () => `node_modules/
|
|
47
|
+
dist/
|
|
48
|
+
`,
|
|
49
|
+
js: () => `node_modules/`
|
|
50
|
+
};
|
|
51
|
+
const packageTemplate = {
|
|
52
|
+
ts: (name) => `{
|
|
53
|
+
"name": "${name}",
|
|
54
|
+
"version": "1.0.0",
|
|
55
|
+
"description": "",
|
|
56
|
+
"private": true,
|
|
57
|
+
"main": "dist/main.js",
|
|
58
|
+
"scripts": {
|
|
59
|
+
"prebuild": "rm -Rf build/; rm -Rf dist/; mkdir build && cp -R public/ build/",
|
|
60
|
+
"build": "tsc && webpack",
|
|
61
|
+
"prestart": "npm run build",
|
|
62
|
+
"start": "npx miqro serve build/ /"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
},
|
|
66
|
+
"dependencies": {
|
|
67
|
+
},
|
|
68
|
+
"author": "",
|
|
69
|
+
"license": "ISC"
|
|
70
|
+
}`,
|
|
71
|
+
js: (name) => `{
|
|
72
|
+
"name": "${name}",
|
|
73
|
+
"version": "1.0.0",
|
|
74
|
+
"description": "",
|
|
75
|
+
"private": true,
|
|
76
|
+
"main": "src/main.js",
|
|
77
|
+
"scripts": {
|
|
78
|
+
"prebuild": "rm -Rf build/; rm -Rf dist/; mkdir build && cp -R public/ build/",
|
|
79
|
+
"build": "webpack",
|
|
80
|
+
"prestart": "npm run build",
|
|
81
|
+
"start": "npx miqro serve build/ /"
|
|
82
|
+
},
|
|
83
|
+
"devDependencies": {
|
|
84
|
+
},
|
|
85
|
+
"dependencies": {
|
|
86
|
+
},
|
|
87
|
+
"author": "",
|
|
88
|
+
"license": "ISC"
|
|
89
|
+
}`
|
|
90
|
+
};
|
|
91
|
+
exports.usageJS = `usage: npx miqro new:front <identifier ex: NEW_APP>`;
|
|
92
|
+
exports.usageTS = `usage: npx miqro new:front:typescript <identifier ex: NEW_APP>`;
|
|
93
|
+
const mainJS = (typescript = false) => {
|
|
94
|
+
if (process.argv.length !== 4 || process.argv[3].length < 1) {
|
|
95
|
+
throw new Error(typescript ? exports.usageTS : exports.usageJS);
|
|
96
|
+
}
|
|
97
|
+
const identifier = process.argv[3].toLocaleLowerCase();
|
|
98
|
+
const appFolder = (0, path_1.resolve)(process.cwd(), identifier);
|
|
99
|
+
if ((0, fs_1.existsSync)(appFolder)) {
|
|
100
|
+
throw new Error(`${appFolder} already exists!`);
|
|
101
|
+
}
|
|
102
|
+
console.log(`creating ${appFolder}`);
|
|
103
|
+
(0, fs_1.mkdirSync)(appFolder, {
|
|
104
|
+
recursive: true
|
|
105
|
+
});
|
|
106
|
+
(0, fs_1.writeFileSync)((0, path_1.resolve)(appFolder, "package.json"), packageTemplate[typescript ? "ts" : "js"](identifier));
|
|
107
|
+
(0, utils_1.execSync)(`npm install miqro --save-dev`, {
|
|
108
|
+
cwd: appFolder
|
|
109
|
+
});
|
|
110
|
+
(0, utils_1.execSync)(`npm install @miqro/web-components --save`, {
|
|
111
|
+
cwd: appFolder
|
|
112
|
+
});
|
|
113
|
+
if (typescript) {
|
|
114
|
+
(0, fs_1.writeFileSync)((0, path_1.resolve)(appFolder, "tsconfig.json"), `{
|
|
115
|
+
"compileOnSave": true,
|
|
116
|
+
"compilerOptions": {
|
|
117
|
+
"lib": ["es2021", "dom"],
|
|
118
|
+
"module": "commonjs",
|
|
119
|
+
"moduleResolution": "node",
|
|
120
|
+
"target": "es2021",
|
|
121
|
+
"strict": false,
|
|
122
|
+
"outDir": "./dist/",
|
|
123
|
+
"removeComments": true,
|
|
124
|
+
"noImplicitAny": false,
|
|
125
|
+
"preserveConstEnums": true,
|
|
126
|
+
"sourceMap": true,
|
|
127
|
+
"esModuleInterop": true,
|
|
128
|
+
"declaration": true
|
|
129
|
+
},
|
|
130
|
+
"exclude": [
|
|
131
|
+
"node_modules",
|
|
132
|
+
"test"
|
|
133
|
+
],
|
|
134
|
+
"include": [
|
|
135
|
+
"src"
|
|
136
|
+
]
|
|
137
|
+
}`);
|
|
138
|
+
(0, utils_1.execSync)(`npm install typescript --save-dev`, {
|
|
139
|
+
cwd: appFolder
|
|
140
|
+
});
|
|
141
|
+
(0, fs_1.writeFileSync)((0, path_1.resolve)(appFolder, ".gitignore"), gitignoreTemplate.ts());
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
(0, fs_1.writeFileSync)((0, path_1.resolve)(appFolder, ".gitignore"), gitignoreTemplate.js());
|
|
145
|
+
}
|
|
146
|
+
(0, utils_1.execSync)(`npm install webpack-cli --save-dev`, {
|
|
147
|
+
cwd: appFolder
|
|
148
|
+
});
|
|
149
|
+
(0, fs_1.writeFileSync)((0, path_1.resolve)(appFolder, "webpack.config.js"), typescript ? webpackconfig.ts() : webpackconfig.js());
|
|
150
|
+
(0, fs_1.mkdirSync)((0, path_1.resolve)(appFolder, "src"));
|
|
151
|
+
(0, fs_1.mkdirSync)((0, path_1.resolve)(appFolder, "public"));
|
|
152
|
+
(0, fs_1.writeFileSync)((0, path_1.resolve)(appFolder, "public", "index.html"), indexHTML.js());
|
|
153
|
+
(0, fs_1.writeFileSync)((0, path_1.resolve)(appFolder, "src", "index" + (typescript ? ".ts" : ".js")), typescript ? indexComponent.ts() : indexComponent.js());
|
|
154
|
+
console.log(`new project created on ${appFolder}`);
|
|
155
|
+
console.log(`cd ${identifier}`);
|
|
156
|
+
console.log(`npm run start`);
|
|
157
|
+
};
|
|
158
|
+
exports.mainJS = mainJS;
|
|
159
|
+
const mainTS = () => (0, exports.mainJS)(true);
|
|
160
|
+
exports.mainTS = mainTS;
|
package/dist/utils/index.js
CHANGED
|
@@ -82,12 +82,12 @@ const mainCMD = (cmds, usage, logger, cmdArg = process.argv[2], exit = true) =>
|
|
|
82
82
|
logger.info(`Available commands:\n`);
|
|
83
83
|
for (const cmd of Object.keys(cmds)) {
|
|
84
84
|
if (cmds[cmd].section) {
|
|
85
|
-
logger.info(`\n
|
|
85
|
+
logger.info(`\n==${cmds[cmd].section}==\n`);
|
|
86
86
|
}
|
|
87
87
|
//const description = cmds[cmd].description.split("\n").map(s => `${getTabs(/*cmds[cmd].tabs*/2)}${s}`).join("\n");
|
|
88
88
|
//const description = cmds[cmd].description.split("\n").map(s => `${getTabs(/*cmds[cmd].tabs*/1)}${s}`).join("\n");
|
|
89
89
|
const description = cmds[cmd].description.split("\n").map(s => `${getTabs(cmds[cmd].tabs)}${s}`).join("\n");
|
|
90
|
-
logger.info(
|
|
90
|
+
logger.info(`${cmd}${description}`);
|
|
91
91
|
//logger.info(`${cmd}\n${description}`);
|
|
92
92
|
}
|
|
93
93
|
logger.info("");
|
package/dist/utils/xml.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseXML2JSON = void 0;
|
|
4
|
-
const
|
|
4
|
+
const sax_1 = require("sax");
|
|
5
5
|
const parseXML2JSON = async (val) => {
|
|
6
6
|
return new Promise((resolve, reject) => {
|
|
7
7
|
const ret = {
|
|
@@ -15,13 +15,13 @@ const parseXML2JSON = async (val) => {
|
|
|
15
15
|
let current = {
|
|
16
16
|
ref: ret
|
|
17
17
|
};
|
|
18
|
-
const p = parser(
|
|
18
|
+
const p = (0, sax_1.parser)(false, {
|
|
19
19
|
noscript: true,
|
|
20
|
-
|
|
20
|
+
lowercase: true
|
|
21
21
|
});
|
|
22
22
|
p.onerror = (e) => {
|
|
23
|
-
// an error happened.
|
|
24
23
|
console.error(e);
|
|
24
|
+
reject(e);
|
|
25
25
|
};
|
|
26
26
|
p.oncomment = (c) => {
|
|
27
27
|
if (!current) {
|
|
@@ -53,15 +53,17 @@ const parseXML2JSON = async (val) => {
|
|
|
53
53
|
};
|
|
54
54
|
current.ref.children.push(node);
|
|
55
55
|
};
|
|
56
|
-
p.onopentag = (
|
|
57
|
-
// opened a tag. node has "name" and "attributes"
|
|
58
|
-
/*if (node.name.toLocaleLowerCase() === "bpmn:sequenceflow") {
|
|
59
|
-
console.log("open %o", node);
|
|
60
|
-
}*/
|
|
56
|
+
p.onopentag = (t) => {
|
|
61
57
|
if (!current) {
|
|
62
58
|
console.error("current null");
|
|
63
59
|
process.exit(1);
|
|
64
60
|
}
|
|
61
|
+
const node = {
|
|
62
|
+
...t,
|
|
63
|
+
type: "node",
|
|
64
|
+
text: "",
|
|
65
|
+
children: []
|
|
66
|
+
};
|
|
65
67
|
node.type = "node";
|
|
66
68
|
node.text = "";
|
|
67
69
|
node.children = [];
|
|
@@ -71,12 +73,10 @@ const parseXML2JSON = async (val) => {
|
|
|
71
73
|
ref: node
|
|
72
74
|
};
|
|
73
75
|
};
|
|
74
|
-
p.onattribute = (attr) => {
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
p.onclosetag = (
|
|
78
|
-
// opened a tag. node has "name" and "attributes"
|
|
79
|
-
// console.log("close %s", node);
|
|
76
|
+
/*p.onattribute = (attr: XMLAttr) => {
|
|
77
|
+
|
|
78
|
+
};*/
|
|
79
|
+
p.onclosetag = () => {
|
|
80
80
|
if (!current) {
|
|
81
81
|
console.error("current null");
|
|
82
82
|
process.exit(1);
|
|
@@ -86,8 +86,6 @@ const parseXML2JSON = async (val) => {
|
|
|
86
86
|
};
|
|
87
87
|
};
|
|
88
88
|
p.onend = () => {
|
|
89
|
-
// console.log("end");
|
|
90
|
-
// parser stream is done, and ready to have more stuff written to it.
|
|
91
89
|
resolve(ret);
|
|
92
90
|
};
|
|
93
91
|
p.write(val).close();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "miqro",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.7",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -17,11 +17,13 @@
|
|
|
17
17
|
"author": "claukers",
|
|
18
18
|
"license": "ISC",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@miqro/core": "^1.6.
|
|
20
|
+
"@miqro/core": "^1.6.1",
|
|
21
21
|
"@miqro/parser": "^0.1.5",
|
|
22
22
|
"@miqro/runner": "^1.2.8",
|
|
23
23
|
"@miqro/test": "^0.2.4",
|
|
24
|
-
"
|
|
24
|
+
"@types/sax": "^1.2.4",
|
|
25
|
+
"deep-diff": "1.0.2",
|
|
26
|
+
"sax": "^1.2.4"
|
|
25
27
|
},
|
|
26
28
|
"devDependencies": {
|
|
27
29
|
"@types/cookie": "0.4.1",
|