@marsx-dev/launcher 0.0.1-4.1
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/LICENSE +201 -0
- package/README.md +5 -0
- package/dist/cli/fix-folders.d.ts +2 -0
- package/dist/cli/fix-folders.d.ts.map +1 -0
- package/dist/cli/fix-folders.js +51 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +49 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +132 -0
- package/dist/cli/migrate.d.ts +2 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +35 -0
- package/dist/cli/start.d.ts +3 -0
- package/dist/cli/start.d.ts.map +1 -0
- package/dist/cli/start.js +40 -0
- package/dist/configuration.d.ts +30 -0
- package/dist/configuration.d.ts.map +1 -0
- package/dist/configuration.js +115 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/launcher.d.ts +2 -0
- package/dist/launcher.d.ts.map +1 -0
- package/dist/launcher.js +40 -0
- package/dist/loader.d.ts +4 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +65 -0
- package/dist/utils/compile.d.ts +13 -0
- package/dist/utils/compile.d.ts.map +1 -0
- package/dist/utils/compile.js +55 -0
- package/dist/utils/fileUtils.d.ts +12 -0
- package/dist/utils/fileUtils.d.ts.map +1 -0
- package/dist/utils/fileUtils.js +42 -0
- package/dist/utils/sfc.d.ts +55 -0
- package/dist/utils/sfc.d.ts.map +1 -0
- package/dist/utils/sfc.js +128 -0
- package/dist/utils/textUtils.d.ts +17 -0
- package/dist/utils/textUtils.d.ts.map +1 -0
- package/dist/utils/textUtils.js +101 -0
- package/dist/utils/v3.d.ts +12 -0
- package/dist/utils/v3.d.ts.map +1 -0
- package/dist/utils/v3.js +98 -0
- package/jsx-runtime/jsx-runtime.js +16 -0
- package/jsx-runtime/package.json +5 -0
- package/package.json +80 -0
- package/src/cli/fix-folders.ts +57 -0
- package/src/cli/index.ts +46 -0
- package/src/cli/init.ts +146 -0
- package/src/cli/migrate.ts +30 -0
- package/src/cli/start.ts +34 -0
- package/src/configuration.ts +124 -0
- package/src/index.ts +6 -0
- package/src/launcher.ts +39 -0
- package/src/loader.ts +68 -0
- package/src/utils/compile.ts +68 -0
- package/src/utils/fileUtils.ts +54 -0
- package/src/utils/sfc.ts +155 -0
- package/src/utils/textUtils.ts +82 -0
- package/src/utils/v3.ts +104 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.serializeSfc = exports.parseSFC = exports.serializeSfcPath = exports.parseSfcPath = exports.MARS_SFC_EXT = exports.METADATA_SECTION_ID = void 0;
|
|
7
|
+
const json5_1 = __importDefault(require("json5"));
|
|
8
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const textUtils_1 = require("./textUtils");
|
|
11
|
+
exports.METADATA_SECTION_ID = 'metadata';
|
|
12
|
+
exports.MARS_SFC_EXT = 'mars';
|
|
13
|
+
const SAVE_EMPTY_SOURCES = true;
|
|
14
|
+
function parseSfcPath(filePath) {
|
|
15
|
+
// Blog/BlogPost.page.mars => {folder:"Blog", name: "BlogPost", blockTypeName: "page", ext: "mars", fullName: "Blog.BlogPost"}
|
|
16
|
+
const originalParsed = path_1.default.parse(filePath);
|
|
17
|
+
const withoutExt = originalParsed.name;
|
|
18
|
+
const ext = originalParsed.ext.slice(1);
|
|
19
|
+
const parsed = path_1.default.parse(withoutExt);
|
|
20
|
+
if (!parsed.name || !parsed.ext)
|
|
21
|
+
throw new Error(`Invalid block file path: ${filePath}`);
|
|
22
|
+
const blockTypeName = parsed.ext.slice(1);
|
|
23
|
+
return {
|
|
24
|
+
folder: originalParsed.dir,
|
|
25
|
+
name: parsed.name,
|
|
26
|
+
blockTypeName,
|
|
27
|
+
ext,
|
|
28
|
+
filePath,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
exports.parseSfcPath = parseSfcPath;
|
|
32
|
+
function serializeSfcPath(identity) {
|
|
33
|
+
return path_1.default.join(identity.folder, `${identity.name}.${identity.blockTypeName}.${identity.ext}`);
|
|
34
|
+
}
|
|
35
|
+
exports.serializeSfcPath = serializeSfcPath;
|
|
36
|
+
const LANG_TAG_MAP = {
|
|
37
|
+
html: 'html',
|
|
38
|
+
pug: 'template',
|
|
39
|
+
js: 'script',
|
|
40
|
+
jsx: 'script',
|
|
41
|
+
ts: 'script',
|
|
42
|
+
tsx: 'script',
|
|
43
|
+
css: 'style',
|
|
44
|
+
scss: 'style',
|
|
45
|
+
less: 'style',
|
|
46
|
+
sass: 'style',
|
|
47
|
+
stylus: 'style',
|
|
48
|
+
text: 'text',
|
|
49
|
+
};
|
|
50
|
+
function parseSFC(filePath, content) {
|
|
51
|
+
const sfcPath = parseSfcPath(filePath);
|
|
52
|
+
if (sfcPath.ext !== exports.MARS_SFC_EXT) {
|
|
53
|
+
return { path: sfcPath, metadata: {}, jsons: {}, sources: {}, rawContent: content };
|
|
54
|
+
}
|
|
55
|
+
const block = {
|
|
56
|
+
path: parseSfcPath(filePath),
|
|
57
|
+
metadata: {},
|
|
58
|
+
jsons: {},
|
|
59
|
+
sources: {},
|
|
60
|
+
rawContent: null,
|
|
61
|
+
};
|
|
62
|
+
const seenIds = new Set();
|
|
63
|
+
const errors = [];
|
|
64
|
+
for (const node of (0, textUtils_1.parseVueLike)(content.toString('utf-8'), errors)) {
|
|
65
|
+
const { id: sectionId, lang, ...props } = node.props;
|
|
66
|
+
if (!sectionId) {
|
|
67
|
+
errors.push({ name: `missing-id`, message: `Id property is missing`, code: 0, loc: node.loc });
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (seenIds.has(sectionId)) {
|
|
71
|
+
errors.push({ name: `duplicate-id`, message: `Duplicate section id: ${sectionId}`, code: 0, loc: node.loc });
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
seenIds.add(sectionId);
|
|
75
|
+
if (node.tag === 'json') {
|
|
76
|
+
try {
|
|
77
|
+
const jsonData = json5_1.default.parse(node.content);
|
|
78
|
+
if (sectionId === exports.METADATA_SECTION_ID) {
|
|
79
|
+
block.metadata = jsonData;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
block.jsons[sectionId] = jsonData;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
errors.push({ name: 'invalid-json', message: `${e}`, code: 0, loc: node.loc });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const source = (0, textUtils_1.unescapeCloseTag)(node.content.slice(1, -1), node.tag);
|
|
91
|
+
const lineOffset = node.loc.start.line;
|
|
92
|
+
block.sources[sectionId] = { source, lang, props, lineOffset };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (errors.length) {
|
|
96
|
+
throw new Error(`Parsing SFC ${filePath} failed with ${JSON.stringify(errors)}`);
|
|
97
|
+
}
|
|
98
|
+
return block;
|
|
99
|
+
}
|
|
100
|
+
exports.parseSFC = parseSFC;
|
|
101
|
+
function serializeSfc(block) {
|
|
102
|
+
const filePath = serializeSfcPath(block.path);
|
|
103
|
+
if (block.path.ext !== exports.MARS_SFC_EXT) {
|
|
104
|
+
if (block.rawContent === null)
|
|
105
|
+
throw new Error(`SfcBlock must have rawContent if ext!="${exports.MARS_SFC_EXT}"`);
|
|
106
|
+
return { filePath, content: block.rawContent };
|
|
107
|
+
}
|
|
108
|
+
if (block.rawContent !== null)
|
|
109
|
+
throw new Error(`SfcBlock cannot have rawContent if ext=="${exports.MARS_SFC_EXT}"`);
|
|
110
|
+
let content = '';
|
|
111
|
+
for (const [name, source] of [[exports.METADATA_SECTION_ID, block.metadata], ...lodash_1.default.sortBy(Object.entries(block.jsons), e => e[0])]) {
|
|
112
|
+
const jsonStr = (0, textUtils_1.stablePrettyJson)(source);
|
|
113
|
+
content += `<json id="${(0, textUtils_1.escapeHtmlAttr)(name)}">\n${jsonStr}</json>\n\n`;
|
|
114
|
+
}
|
|
115
|
+
for (const [name, source] of lodash_1.default.sortBy(Object.entries(block.sources), e => e[0])) {
|
|
116
|
+
if (!SAVE_EMPTY_SOURCES && !source.source.trim())
|
|
117
|
+
continue;
|
|
118
|
+
const tag = LANG_TAG_MAP[source.lang || ''] || 'text';
|
|
119
|
+
const id = (0, textUtils_1.escapeHtmlAttr)(name);
|
|
120
|
+
const lang = (0, textUtils_1.escapeHtmlAttr)(source.lang || '');
|
|
121
|
+
const props = (0, textUtils_1.stableHtmlAttributes)(source.props);
|
|
122
|
+
const text = (0, textUtils_1.escapeCloseTag)(source.source, tag);
|
|
123
|
+
content += `<${tag} id="${id}" lang="${lang}"${props}>\n${text}\n</${tag}>\n\n`;
|
|
124
|
+
}
|
|
125
|
+
return { filePath, content: Buffer.from(content, 'utf-8') };
|
|
126
|
+
}
|
|
127
|
+
exports.serializeSfc = serializeSfc;
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ZjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NmYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxrREFBMEI7QUFDMUIsb0RBQXVCO0FBQ3ZCLGdEQUF3QjtBQUN4QiwyQ0FBcUk7QUFFeEgsUUFBQSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7QUFDakMsUUFBQSxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBRW5DLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBc0JoQyxTQUFnQixZQUFZLENBQUMsUUFBZ0I7SUFDM0MsOEhBQThIO0lBQzlILE1BQU0sY0FBYyxHQUFHLGNBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztJQUN2QyxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV4QyxNQUFNLE1BQU0sR0FBRyxjQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTFDLE9BQU87UUFDTCxNQUFNLEVBQUUsY0FBYyxDQUFDLEdBQUc7UUFDMUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLGFBQWE7UUFDYixHQUFHO1FBQ0gsUUFBUTtLQUNULENBQUM7QUFDSixDQUFDO0FBakJELG9DQWlCQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLFFBQWlCO0lBQ2hELE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMs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
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CompilerError } from '@vue/compiler-core';
|
|
2
|
+
import * as CompilerDOM from '@vue/compiler-dom';
|
|
3
|
+
export declare function assert(value: unknown, message?: string): asserts value;
|
|
4
|
+
export declare function escapeCloseTag(str: string, tag: string): string;
|
|
5
|
+
export declare function unescapeCloseTag(str: string, tag: string): string;
|
|
6
|
+
export declare function escapeHtmlAttr(str: string): string;
|
|
7
|
+
export declare function prettifyJson(json: string): string;
|
|
8
|
+
export declare function stableJson(data: unknown): string;
|
|
9
|
+
export declare function stablePrettyJson(data: unknown): string;
|
|
10
|
+
export declare function stableHtmlAttributes(attrs: Record<string, string | undefined | null> | undefined): string;
|
|
11
|
+
export declare function parseVueLike(content: string, errors: (CompilerError | SyntaxError)[]): {
|
|
12
|
+
tag: string;
|
|
13
|
+
props: Record<string, string>;
|
|
14
|
+
content: string;
|
|
15
|
+
loc: CompilerDOM.SourceLocation;
|
|
16
|
+
}[];
|
|
17
|
+
//# sourceMappingURL=textUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textUtils.d.ts","sourceRoot":"","sources":["../../src/utils/textUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAMjD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,SAA0B,GAAG,OAAO,CAAC,KAAK,CAIvF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,MAAM,CAUzG;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,aAAa,GAAG,WAAW,CAAC,EAAE;;;;;IA8BpF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.parseVueLike = exports.stableHtmlAttributes = exports.stablePrettyJson = exports.stableJson = exports.prettifyJson = exports.escapeHtmlAttr = exports.unescapeCloseTag = exports.escapeCloseTag = exports.assert = void 0;
|
|
26
|
+
const CompilerDOM = __importStar(require("@vue/compiler-dom"));
|
|
27
|
+
const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
|
|
28
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
29
|
+
const prettier_1 = __importDefault(require("prettier"));
|
|
30
|
+
function assert(value, message = 'value must be defined') {
|
|
31
|
+
if (!value) {
|
|
32
|
+
throw new Error(message);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.assert = assert;
|
|
36
|
+
function escapeCloseTag(str, tag) {
|
|
37
|
+
return str.replaceAll(`</${tag}>`, `</ ${tag}>`);
|
|
38
|
+
}
|
|
39
|
+
exports.escapeCloseTag = escapeCloseTag;
|
|
40
|
+
function unescapeCloseTag(str, tag) {
|
|
41
|
+
return str.replaceAll(`</ ${tag}>`, `</${tag}>`);
|
|
42
|
+
}
|
|
43
|
+
exports.unescapeCloseTag = unescapeCloseTag;
|
|
44
|
+
function escapeHtmlAttr(str) {
|
|
45
|
+
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
46
|
+
}
|
|
47
|
+
exports.escapeHtmlAttr = escapeHtmlAttr;
|
|
48
|
+
const PRETTIER_JSON_CONFIG = { parser: 'json5', printWidth: 120, trailingComma: 'all' };
|
|
49
|
+
function prettifyJson(json) {
|
|
50
|
+
return prettier_1.default.format(`(${json})`, PRETTIER_JSON_CONFIG);
|
|
51
|
+
}
|
|
52
|
+
exports.prettifyJson = prettifyJson;
|
|
53
|
+
function stableJson(data) {
|
|
54
|
+
return (0, json_stable_stringify_1.default)(data);
|
|
55
|
+
}
|
|
56
|
+
exports.stableJson = stableJson;
|
|
57
|
+
function stablePrettyJson(data) {
|
|
58
|
+
return prettifyJson(stableJson(data));
|
|
59
|
+
}
|
|
60
|
+
exports.stablePrettyJson = stablePrettyJson;
|
|
61
|
+
function stableHtmlAttributes(attrs) {
|
|
62
|
+
let result = '';
|
|
63
|
+
if (attrs) {
|
|
64
|
+
for (const [name, value] of lodash_1.default.sortBy(Object.entries(attrs), e => e[0])) {
|
|
65
|
+
if (value) {
|
|
66
|
+
result += ` ${name}="${escapeHtmlAttr(value)}"`;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
exports.stableHtmlAttributes = stableHtmlAttributes;
|
|
73
|
+
function parseVueLike(content, errors) {
|
|
74
|
+
const ast = CompilerDOM.parse(content, {
|
|
75
|
+
// there are no components at SFC parsing level
|
|
76
|
+
isNativeTag: () => true,
|
|
77
|
+
// preserve all whitespaces
|
|
78
|
+
isPreTag: () => true,
|
|
79
|
+
getTextMode: () => 2 /* RAWTEXT */,
|
|
80
|
+
onError: e => errors.push(e),
|
|
81
|
+
});
|
|
82
|
+
const result = [];
|
|
83
|
+
for (const node of ast.children) {
|
|
84
|
+
if (node.type === 1 /* ELEMENT */) {
|
|
85
|
+
const child = node.children.length === 1 ? node.children[0] : null;
|
|
86
|
+
const content = child && child.type === 2 /* TEXT */ ? child.content : null;
|
|
87
|
+
if (content) {
|
|
88
|
+
const props = {};
|
|
89
|
+
for (const prop of node.props) {
|
|
90
|
+
if (prop.type === 6 /* ATTRIBUTE */ && prop.value) {
|
|
91
|
+
props[prop.name] = prop.value.content;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
result.push({ tag: node.tag, props, content, loc: node.loc });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
exports.parseVueLike = parseVueLike;
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3RleHRVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsK0RBQWlEO0FBRWpELGtGQUE4QztBQUM5QyxvREFBdUI7QUFDdkIsd0RBQTZDO0FBRTdDLFNBQWdCLE1BQU0sQ0FBQyxLQUFjLEVBQUUsT0FBTyxHQUFHLHVCQUF1QjtJQUN0RSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUMxQjtBQUNILENBQUM7QUFKRCx3QkFJQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxHQUFXLEVBQUUsR0FBVztJQUNyRCxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUZELHdDQUVDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBVyxFQUFFLEdBQVc7SUFDdkQsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFGRCw0Q0FFQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxHQUFXO0lBQ3hDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEcsQ0FBQztBQUZELHdDQUVDO0FBRUQsTUFBTSxvQkFBb0IsR0FBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFF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
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SfcBlock } from './sfc';
|
|
2
|
+
export declare type V3MongoBlock = {
|
|
3
|
+
Folder: string;
|
|
4
|
+
Name: string;
|
|
5
|
+
Type: string;
|
|
6
|
+
app?: {
|
|
7
|
+
name: string;
|
|
8
|
+
};
|
|
9
|
+
} & Record<string, unknown>;
|
|
10
|
+
export declare function convertV3ToSfc(block: V3MongoBlock): SfcBlock;
|
|
11
|
+
export declare function convertSfcToV3(sfc: SfcBlock): V3MongoBlock;
|
|
12
|
+
//# sourceMappingURL=v3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3.d.ts","sourceRoot":"","sources":["../../src/utils/v3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE/C,oBAAY,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA0C5B,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAsC5D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,YAAY,CAc1D"}
|
package/dist/utils/v3.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertSfcToV3 = exports.convertV3ToSfc = void 0;
|
|
4
|
+
const sfc_1 = require("./sfc");
|
|
5
|
+
const SFC_FIELD_MAP = {
|
|
6
|
+
// JSONs
|
|
7
|
+
DataArgs: 'json',
|
|
8
|
+
Page: 'json',
|
|
9
|
+
pages: 'json',
|
|
10
|
+
blocks: 'json',
|
|
11
|
+
Config: 'json',
|
|
12
|
+
langs: 'json',
|
|
13
|
+
// Scripts
|
|
14
|
+
BlockFunction: 'ts',
|
|
15
|
+
Html: 'html',
|
|
16
|
+
HTML: 'html',
|
|
17
|
+
Jsx: 'tsx',
|
|
18
|
+
JsxTranspiled: 'js',
|
|
19
|
+
JsxTranspiledTranspiled: 'js',
|
|
20
|
+
JSX: 'tsx',
|
|
21
|
+
JSXTranspiled: 'js',
|
|
22
|
+
DemoJsx: 'tsx',
|
|
23
|
+
DemoJsxTranspiled: 'js',
|
|
24
|
+
Script: 'ts',
|
|
25
|
+
Css: 'css',
|
|
26
|
+
TestCode: 'ts',
|
|
27
|
+
JestDefinition: 'ts',
|
|
28
|
+
DataForScriptFunction: 'ts',
|
|
29
|
+
// Ignore (part of file path)
|
|
30
|
+
// _id: 'DELETE',
|
|
31
|
+
Name: 'DELETE',
|
|
32
|
+
Type: 'DELETE',
|
|
33
|
+
Folder: 'DELETE',
|
|
34
|
+
// Ignore (will be tracked by git)
|
|
35
|
+
app: 'DELETE',
|
|
36
|
+
Created: 'DELETE',
|
|
37
|
+
LastChanged: 'DELETE',
|
|
38
|
+
createdAt: 'DELETE',
|
|
39
|
+
createdBy: 'DELETE',
|
|
40
|
+
updatedAt: 'DELETE',
|
|
41
|
+
updatedBy: 'DELETE',
|
|
42
|
+
// ... rest of the fields will be saved in metadata
|
|
43
|
+
};
|
|
44
|
+
function convertV3ToSfc(block) {
|
|
45
|
+
const sfc = {
|
|
46
|
+
path: {
|
|
47
|
+
folder: block.Folder,
|
|
48
|
+
name: block.Name,
|
|
49
|
+
blockTypeName: block.Type,
|
|
50
|
+
ext: sfc_1.MARS_SFC_EXT,
|
|
51
|
+
filePath: '',
|
|
52
|
+
},
|
|
53
|
+
metadata: {},
|
|
54
|
+
jsons: {},
|
|
55
|
+
sources: {},
|
|
56
|
+
rawContent: null,
|
|
57
|
+
};
|
|
58
|
+
for (const [prop, value] of Object.entries(block)) {
|
|
59
|
+
const sfcLang = SFC_FIELD_MAP[prop] || 'METADATA';
|
|
60
|
+
switch (sfcLang) {
|
|
61
|
+
case 'json':
|
|
62
|
+
if (typeof value !== 'object' && !Array.isArray(value))
|
|
63
|
+
throw new Error(`Object or array is expected for ${prop} property`);
|
|
64
|
+
sfc.jsons[prop] = value;
|
|
65
|
+
break;
|
|
66
|
+
case 'DELETE':
|
|
67
|
+
break;
|
|
68
|
+
case 'METADATA':
|
|
69
|
+
sfc.metadata[prop] = value;
|
|
70
|
+
break;
|
|
71
|
+
default:
|
|
72
|
+
if (typeof value !== 'string')
|
|
73
|
+
throw new Error(`String is expected for ${prop} property`);
|
|
74
|
+
sfc.sources[prop] = { source: value, lang: sfcLang };
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (block.app) {
|
|
79
|
+
sfc.metadata['app'] = { name: block.app.name };
|
|
80
|
+
}
|
|
81
|
+
return sfc;
|
|
82
|
+
}
|
|
83
|
+
exports.convertV3ToSfc = convertV3ToSfc;
|
|
84
|
+
function convertSfcToV3(sfc) {
|
|
85
|
+
const block = {
|
|
86
|
+
Name: sfc.path.name,
|
|
87
|
+
Type: sfc.path.blockTypeName,
|
|
88
|
+
Folder: sfc.path.folder,
|
|
89
|
+
...sfc.metadata,
|
|
90
|
+
...sfc.jsons,
|
|
91
|
+
};
|
|
92
|
+
for (const [key, value] of Object.entries(sfc.sources)) {
|
|
93
|
+
block[key] = value.source;
|
|
94
|
+
}
|
|
95
|
+
return block;
|
|
96
|
+
}
|
|
97
|
+
exports.convertSfcToV3 = convertSfcToV3;
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdjMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStDO0FBUy9DLE1BQU0sYUFBYSxHQUEyQjtJQUM1QyxRQUFRO0lBQ1IsUUFBUSxFQUFFLE1BQU07SUFDaEIsSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsTUFBTTtJQUNiLE1BQU0sRUFBRSxNQUFNO0lBQ2QsTUFBTSxFQUFFLE1BQU07SUFDZCxLQUFLLEVBQUUsTUFBTTtJQUNiLFVBQVU7SUFDVixhQUFhLEVBQUUsSUFBSTtJQUNuQixJQUFJLEVBQUUsTUFBTTtJQUNaLElBQUksRUFBRSxNQUFNO0lBQ1osR0FBRyxFQUFFLEtBQUs7SUFDVixhQUFhLEVBQUUsSUFBSTtJQUNuQix1QkFBdUIsRUFBRSxJQUFJO0lBQzdCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsYUFBYSxFQUFFLElBQUk7SUFDbkIsT0FBTyxFQUFFLEtBQUs7SUFDZCxpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLE1BQU0sRUFBRSxJQUFJO0lBQ1osR0FBRyxFQUFFLEtBQUs7SUFDVixRQUFRLEVBQUUsSUFBSTtJQUNkLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsNkJBQTZCO0lBQzdCLGlCQUFpQjtJQUNqQixJQUFJLEVBQUUsUUFBUTtJQUNkLElBQUksRUFBRSxRQUFRO0lBQ2QsTUFBTSxFQUFFLFFBQVE7SUFDaEIsa0NBQWtDO0lBQ2xDLEdBQUcsRUFBRSxRQUFRO0lBQ2IsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLFFBQVE7SUFDckIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsbURBQW1EO0NBQ3BELENBQUM7QUFFRixTQUFnQixjQUFjLENBQUMsS0FBbUI7SUFDaEQsTUFB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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
function createVNode(node, props, key) {
|
|
2
|
+
if (typeof node === 'string') {
|
|
3
|
+
return { type: 'TAG', tag: node, props, key };
|
|
4
|
+
} else {
|
|
5
|
+
return { type: 'FC', fc: node, props, key };
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function Fragment(props) {
|
|
10
|
+
return props.children;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
exports.jsx = createVNode;
|
|
14
|
+
exports.jsxs = createVNode;
|
|
15
|
+
exports.jsxDEV = createVNode;
|
|
16
|
+
exports.Fragment = Fragment;
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@marsx-dev/launcher",
|
|
3
|
+
"version": "0.0.14.1",
|
|
4
|
+
"description": "MarsX launcher",
|
|
5
|
+
"author": "MarsX team <team@marsx.dev>",
|
|
6
|
+
"homepage": "https://marsx.dev/",
|
|
7
|
+
"license": "Apache-2.0",
|
|
8
|
+
"repository": "github:marsx-dev/launcher",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"marsx",
|
|
11
|
+
"lowcode",
|
|
12
|
+
"nocode",
|
|
13
|
+
"editor",
|
|
14
|
+
"ide"
|
|
15
|
+
],
|
|
16
|
+
"engineStrict": true,
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=16.0.0"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"src",
|
|
23
|
+
"jsx-runtime",
|
|
24
|
+
"LICENSE",
|
|
25
|
+
"README.md"
|
|
26
|
+
],
|
|
27
|
+
"bin": {
|
|
28
|
+
"marsx": "./dist/cli/index.js"
|
|
29
|
+
},
|
|
30
|
+
"main": "./dist/index.js",
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"scripts": {
|
|
33
|
+
"validate": "npm run validate:prettier && npm run validate:lint && npm run validate:tsc",
|
|
34
|
+
"validate:prettier": "prettier --ignore-path=.gitignore --list-different \"**/*.+(js|ts|json)\"",
|
|
35
|
+
"validate:lint": "eslint --ignore-path=.gitignore --ext=.js,.ts .",
|
|
36
|
+
"validate:tsc": "tsc --noEmit",
|
|
37
|
+
"fix": "npm run fix:prettier && npm run fix:list",
|
|
38
|
+
"fix:prettier": "prettier --ignore-path=.gitignore --write \"**/*.+(js|ts|json)\"",
|
|
39
|
+
"fix:list": "eslint --ignore-path=.gitignore --ext=.js,.ts --fix .",
|
|
40
|
+
"build": "tsc"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@vue/compiler-sfc": "^3.2.29",
|
|
44
|
+
"chalk": "^4.1.2",
|
|
45
|
+
"commander": "^9.1.0",
|
|
46
|
+
"json-stable-stringify": "^1.0.1",
|
|
47
|
+
"json5": "^2.2.3",
|
|
48
|
+
"minimist": ">=1.2.6",
|
|
49
|
+
"yup": "^0.32.11"
|
|
50
|
+
},
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"@types/config": "^0.0.41",
|
|
53
|
+
"@types/lodash": "^4.14.178",
|
|
54
|
+
"@types/node": "^17.0.21",
|
|
55
|
+
"@types/prettier": "^2.4.4",
|
|
56
|
+
"axios": "^0.26.1",
|
|
57
|
+
"config": "^3.3.7",
|
|
58
|
+
"lodash": "^4.17.21",
|
|
59
|
+
"mongodb": "^4.3.1",
|
|
60
|
+
"prettier": "^2.5.1",
|
|
61
|
+
"typescript": "^4.5.5"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@types/json-stable-stringify": "^1.0.34",
|
|
65
|
+
"@types/yup": "^0.29.13",
|
|
66
|
+
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
|
67
|
+
"@typescript-eslint/parser": "^5.10.2",
|
|
68
|
+
"eslint": "^8.8.0",
|
|
69
|
+
"eslint-config-prettier": "^8.3.0",
|
|
70
|
+
"eslint-plugin-prettier": "^4.0.0"
|
|
71
|
+
},
|
|
72
|
+
"prettier": {
|
|
73
|
+
"printWidth": 140,
|
|
74
|
+
"tabWidth": 2,
|
|
75
|
+
"endOfLine": "lf",
|
|
76
|
+
"singleQuote": true,
|
|
77
|
+
"trailingComma": "all",
|
|
78
|
+
"arrowParens": "avoid"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { config } from '../configuration';
|
|
3
|
+
import { readBlockFiles } from '../loader';
|
|
4
|
+
import { V3MongoBlock } from '../utils/v3';
|
|
5
|
+
import { Db, MongoClient, ObjectId } from 'mongodb';
|
|
6
|
+
|
|
7
|
+
async function getMongoDbConnection(): Promise<Db> {
|
|
8
|
+
const mongoConn = await new MongoClient(config.mongoConn).connect();
|
|
9
|
+
return mongoConn.db(config.mongoDbName);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export async function fixDbBlockFolders(safeRun = true) {
|
|
13
|
+
console.log(chalk.red(`Running in ${safeRun ? 'SAFE' : 'WRITE TO DB'} mode!`));
|
|
14
|
+
|
|
15
|
+
console.log(`Reading files to migrate from ${config.blocksDir} folder`);
|
|
16
|
+
|
|
17
|
+
let localBlocks = await readBlockFiles(config.blocksDir);
|
|
18
|
+
|
|
19
|
+
localBlocks = localBlocks.filter(l => l.path.filePath.indexOf('_forked') === -1);
|
|
20
|
+
|
|
21
|
+
console.log(`Got ${localBlocks.length} files to migrate`);
|
|
22
|
+
|
|
23
|
+
const db = await getMongoDbConnection();
|
|
24
|
+
|
|
25
|
+
let i = 0;
|
|
26
|
+
const blockCollection = db.collection<V3MongoBlock>('blocks');
|
|
27
|
+
|
|
28
|
+
for (const block of localBlocks) {
|
|
29
|
+
console.log(`Updating ${i + 1}/${localBlocks.length}`);
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
const blockId = new ObjectId(block.metadata['_id'] as string);
|
|
33
|
+
if (!safeRun) {
|
|
34
|
+
const res = await blockCollection.updateOne({ _id: blockId }, { $set: { Folder: block.path.folder } }, { upsert: true });
|
|
35
|
+
console.log(
|
|
36
|
+
`Updated ${i + 1}/${localBlocks.length}, ${blockId.toString()}, ${
|
|
37
|
+
res.modifiedCount ? 'modified' : 'created ' + res.upsertedCount
|
|
38
|
+
}`,
|
|
39
|
+
);
|
|
40
|
+
} else {
|
|
41
|
+
const dbBlock = await blockCollection.findOne({ _id: blockId });
|
|
42
|
+
if (dbBlock) {
|
|
43
|
+
console.log(`Updated ${i + 1}/${localBlocks.length}, id: ${dbBlock?._id}, ${dbBlock?.Folder} -> ${block.path.folder}`);
|
|
44
|
+
} else {
|
|
45
|
+
console.log(`Created ${i + 1}/${localBlocks.length}, id: ${blockId}, Folder: ${block.path.folder}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
} catch (err) {
|
|
49
|
+
console.log(`Error on ${i + 1}/${localBlocks.length}`);
|
|
50
|
+
console.error(err);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
i++;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
console.log(chalk.green('\nFolders fixed complete successfully!'));
|
|
57
|
+
}
|
package/src/cli/index.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { initProject } from './init';
|
|
6
|
+
import { migrateV3ToV4 } from './migrate';
|
|
7
|
+
import { start } from './start';
|
|
8
|
+
import { fixDbBlockFolders } from './fix-folders';
|
|
9
|
+
|
|
10
|
+
export class CliError extends Error {}
|
|
11
|
+
|
|
12
|
+
async function main() {
|
|
13
|
+
try {
|
|
14
|
+
const program = new Command();
|
|
15
|
+
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
17
|
+
const version = require('../../package.json').version;
|
|
18
|
+
program.name('marsx').description('CLI for MarsX launcher').version(version);
|
|
19
|
+
|
|
20
|
+
program.command('start', { isDefault: true }).description('Start MarsX server').action(start);
|
|
21
|
+
program
|
|
22
|
+
.command('init <project_name>')
|
|
23
|
+
.description('Initialize a new MarsX project named <project_name> in a directory of the same name')
|
|
24
|
+
.action(initProject);
|
|
25
|
+
program.command('migrate').description('Migrate MarsX V3 project to V4').action(migrateV3ToV4);
|
|
26
|
+
|
|
27
|
+
program
|
|
28
|
+
.command('fix-folders')
|
|
29
|
+
.argument('<safe-run>', 'allows to run without updated DB, true by default')
|
|
30
|
+
.description('Fix folders in DB based on files structure in blocks')
|
|
31
|
+
.action(safeRun => {
|
|
32
|
+
fixDbBlockFolders(safeRun === 'false');
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
await program.parseAsync();
|
|
36
|
+
} catch (e) {
|
|
37
|
+
if (e instanceof CliError) {
|
|
38
|
+
console.error(chalk.red(e.message));
|
|
39
|
+
} else {
|
|
40
|
+
console.error(chalk.red(e));
|
|
41
|
+
}
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
main();
|