@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.
Files changed (61) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +5 -0
  3. package/dist/cli/fix-folders.d.ts +2 -0
  4. package/dist/cli/fix-folders.d.ts.map +1 -0
  5. package/dist/cli/fix-folders.js +51 -0
  6. package/dist/cli/index.d.ts +4 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +49 -0
  9. package/dist/cli/init.d.ts +2 -0
  10. package/dist/cli/init.d.ts.map +1 -0
  11. package/dist/cli/init.js +132 -0
  12. package/dist/cli/migrate.d.ts +2 -0
  13. package/dist/cli/migrate.d.ts.map +1 -0
  14. package/dist/cli/migrate.js +35 -0
  15. package/dist/cli/start.d.ts +3 -0
  16. package/dist/cli/start.d.ts.map +1 -0
  17. package/dist/cli/start.js +40 -0
  18. package/dist/configuration.d.ts +30 -0
  19. package/dist/configuration.d.ts.map +1 -0
  20. package/dist/configuration.js +115 -0
  21. package/dist/index.d.ts +7 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +38 -0
  24. package/dist/launcher.d.ts +2 -0
  25. package/dist/launcher.d.ts.map +1 -0
  26. package/dist/launcher.js +40 -0
  27. package/dist/loader.d.ts +4 -0
  28. package/dist/loader.d.ts.map +1 -0
  29. package/dist/loader.js +65 -0
  30. package/dist/utils/compile.d.ts +13 -0
  31. package/dist/utils/compile.d.ts.map +1 -0
  32. package/dist/utils/compile.js +55 -0
  33. package/dist/utils/fileUtils.d.ts +12 -0
  34. package/dist/utils/fileUtils.d.ts.map +1 -0
  35. package/dist/utils/fileUtils.js +42 -0
  36. package/dist/utils/sfc.d.ts +55 -0
  37. package/dist/utils/sfc.d.ts.map +1 -0
  38. package/dist/utils/sfc.js +128 -0
  39. package/dist/utils/textUtils.d.ts +17 -0
  40. package/dist/utils/textUtils.d.ts.map +1 -0
  41. package/dist/utils/textUtils.js +101 -0
  42. package/dist/utils/v3.d.ts +12 -0
  43. package/dist/utils/v3.d.ts.map +1 -0
  44. package/dist/utils/v3.js +98 -0
  45. package/jsx-runtime/jsx-runtime.js +16 -0
  46. package/jsx-runtime/package.json +5 -0
  47. package/package.json +80 -0
  48. package/src/cli/fix-folders.ts +57 -0
  49. package/src/cli/index.ts +46 -0
  50. package/src/cli/init.ts +146 -0
  51. package/src/cli/migrate.ts +30 -0
  52. package/src/cli/start.ts +34 -0
  53. package/src/configuration.ts +124 -0
  54. package/src/index.ts +6 -0
  55. package/src/launcher.ts +39 -0
  56. package/src/loader.ts +68 -0
  57. package/src/utils/compile.ts +68 -0
  58. package/src/utils/fileUtils.ts +54 -0
  59. package/src/utils/sfc.ts +155 -0
  60. package/src/utils/textUtils.ts +82 -0
  61. 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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
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"}
@@ -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;
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "jsx-runtime",
3
+ "private": true,
4
+ "main": "jsx-runtime.js"
5
+ }
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
+ }
@@ -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();