@marsx-dev/launcher 0.0.3 → 0.0.6

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 (54) hide show
  1. package/dist/cli/index.d.ts +4 -0
  2. package/dist/cli/index.d.ts.map +1 -0
  3. package/dist/cli/index.js +1 -0
  4. package/dist/cli/init.d.ts +2 -0
  5. package/dist/cli/init.d.ts.map +1 -0
  6. package/dist/cli/init.js +32 -31
  7. package/dist/cli/migrate.d.ts +2 -0
  8. package/dist/cli/migrate.d.ts.map +1 -0
  9. package/dist/cli/migrate.js +3 -2
  10. package/dist/cli/start.d.ts +3 -0
  11. package/dist/cli/start.d.ts.map +1 -0
  12. package/dist/cli/start.js +3 -2
  13. package/dist/configuration.d.ts +30 -0
  14. package/dist/configuration.d.ts.map +1 -0
  15. package/dist/configuration.js +95 -33
  16. package/dist/index.d.ts +7 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +40 -5
  19. package/dist/launcher.d.ts +2 -0
  20. package/dist/launcher.d.ts.map +1 -0
  21. package/dist/launcher.js +6 -4
  22. package/dist/loader.d.ts +3 -0
  23. package/dist/loader.d.ts.map +1 -0
  24. package/dist/loader.js +5 -4
  25. package/dist/utils/compile.d.ts +9 -0
  26. package/dist/utils/compile.d.ts.map +1 -0
  27. package/dist/utils/compile.js +8 -6
  28. package/dist/utils/fileUtils.d.ts +12 -0
  29. package/dist/utils/fileUtils.d.ts.map +1 -0
  30. package/dist/utils/fileUtils.js +42 -0
  31. package/dist/utils/sfc.d.ts +55 -0
  32. package/dist/utils/sfc.d.ts.map +1 -0
  33. package/dist/utils/sfc.js +54 -97
  34. package/dist/utils/textUtils.d.ts +17 -0
  35. package/dist/utils/textUtils.d.ts.map +1 -0
  36. package/dist/utils/textUtils.js +105 -0
  37. package/dist/utils/v3.d.ts +12 -0
  38. package/dist/utils/v3.d.ts.map +1 -0
  39. package/dist/utils/v3.js +7 -6
  40. package/package.json +5 -2
  41. package/src/cli/index.ts +37 -0
  42. package/src/cli/init.ts +142 -0
  43. package/src/cli/migrate.ts +23 -0
  44. package/src/cli/start.ts +34 -0
  45. package/src/configuration.ts +104 -0
  46. package/src/index.ts +6 -0
  47. package/src/launcher.ts +39 -0
  48. package/src/loader.ts +65 -0
  49. package/src/utils/compile.ts +59 -0
  50. package/src/utils/fileUtils.ts +54 -0
  51. package/src/utils/sfc.ts +155 -0
  52. package/src/utils/textUtils.ts +82 -0
  53. package/src/utils/v3.ts +104 -0
  54. package/dist/utils/utils.js +0 -59
@@ -0,0 +1,12 @@
1
+ /// <reference types="node" />
2
+ import { Abortable } from 'node:events';
3
+ import { Mode, ObjectEncodingOptions, OpenMode } from 'node:fs';
4
+ import { Stream } from 'node:stream';
5
+ export declare function listFilesRecursive(dir: string): Promise<string[]>;
6
+ export declare function isFile(filePath: string): Promise<boolean>;
7
+ export declare function isDirectory(dirPath: string): Promise<boolean>;
8
+ export declare function writeFileMakeDir(filePath: string, data: string | NodeJS.ArrayBufferView | Iterable<string | NodeJS.ArrayBufferView> | AsyncIterable<string | NodeJS.ArrayBufferView> | Stream, options?: (ObjectEncodingOptions & {
9
+ mode?: Mode | undefined;
10
+ flag?: OpenMode | undefined;
11
+ } & Abortable) | BufferEncoding | null): Promise<void>;
12
+ //# sourceMappingURL=fileUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileUtils.d.ts","sourceRoot":"","sources":["../../src/utils/fileUtils.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUvE;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAM/D;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMnE;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EACA,MAAM,GACN,MAAM,CAAC,eAAe,GACtB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,GACzC,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,GAC9C,MAAM,EACV,OAAO,CAAC,EACJ,CAAC,qBAAqB,GAAG;IACvB,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC7B,GAAG,SAAS,CAAC,GACd,cAAc,GACd,IAAI,GACP,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,42 @@
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.writeFileMakeDir = exports.isDirectory = exports.isFile = exports.listFilesRecursive = void 0;
7
+ const fs_1 = require("fs");
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const path_1 = __importDefault(require("path"));
10
+ async function listFilesRecursive(dir) {
11
+ const entries = await fs_1.promises.readdir(dir);
12
+ const files = await Promise.all(entries.map(async (entry) => {
13
+ const entryPath = path_1.default.resolve(dir, entry);
14
+ return (await fs_1.promises.stat(entryPath)).isDirectory() ? listFilesRecursive(entryPath) : [entryPath];
15
+ }));
16
+ return lodash_1.default.flatten(files);
17
+ }
18
+ exports.listFilesRecursive = listFilesRecursive;
19
+ async function isFile(filePath) {
20
+ try {
21
+ return (await fs_1.promises.stat(filePath)).isFile();
22
+ }
23
+ catch (e) {
24
+ return false;
25
+ }
26
+ }
27
+ exports.isFile = isFile;
28
+ async function isDirectory(dirPath) {
29
+ try {
30
+ return (await fs_1.promises.stat(dirPath)).isDirectory();
31
+ }
32
+ catch (e) {
33
+ return false;
34
+ }
35
+ }
36
+ exports.isDirectory = isDirectory;
37
+ async function writeFileMakeDir(filePath, data, options) {
38
+ await fs_1.promises.mkdir(path_1.default.dirname(filePath), { recursive: true });
39
+ await fs_1.promises.writeFile(filePath, data, options);
40
+ }
41
+ exports.writeFileMakeDir = writeFileMakeDir;
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2ZpbGVVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQkFBb0M7QUFDcEMsb0RBQXVCO0FBSXZCLGdEQUF3QjtBQUVqQixLQUFLLFVBQVUsa0JBQWtCLENBQUMsR0FBVztJQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQXFCLEVBQUU7UUFDN0MsTUFBTSxTQUFTLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLE1BQU0sYUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0YsT0FBTyxnQkFBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBVkQsZ0RBVUM7QUFFTSxLQUFLLFVBQVUsTUFBTSxDQUFDLFFBQWdCO0lBQzNDLElBQUk7UUFDRixPQUFPLENBQUMsTUFBTSxhQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDM0M7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBTkQsd0JBTUM7QUFFTSxLQUFLLFVBQVUsV0FBVyxDQUFDLE9BQWU7SUFDL0MsSUFBSTtRQUNGLE9BQU8sQ0FBQyxNQUFNLGFBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUMvQztJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUM7QUFORCxrQ0FNQztBQUVNLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsUUFBZ0IsRUFDaEIsSUFLVSxFQUNWLE9BTVE7SUFFUixNQUFNLGFBQUUsQ0FBQyxLQUFLLENBQUMsY0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVELE1BQU0sYUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFsQkQsNENBa0JDIn0=
@@ -0,0 +1,55 @@
1
+ /// <reference types="node" />
2
+ export declare const METADATA_SECTION_ID = "metadata";
3
+ export declare const MARS_SFC_EXT = "mars";
4
+ export declare type SfcPath = {
5
+ folder: string;
6
+ name: string;
7
+ blockTypeName: string;
8
+ ext: string;
9
+ filePath: string;
10
+ };
11
+ export declare type SfcSource = {
12
+ source: string;
13
+ lang: keyof typeof LANG_TAG_MAP | string | undefined;
14
+ props?: Record<string, string | undefined>;
15
+ lineOffset?: number;
16
+ };
17
+ export declare type SfcBlock = {
18
+ path: SfcPath;
19
+ } & ({
20
+ metadata: Record<string, unknown>;
21
+ jsons: Record<string, unknown>;
22
+ sources: Record<string, SfcSource>;
23
+ rawContent: null;
24
+ } | {
25
+ metadata: EmptyObject;
26
+ jsons: EmptyObject;
27
+ sources: EmptyObject;
28
+ rawContent: Buffer;
29
+ });
30
+ export declare function parseSfcPath(filePath: string): SfcPath;
31
+ export declare function serializeSfcPath(identity: SfcPath): string;
32
+ declare type EmptyObject = {
33
+ [K in string]: never;
34
+ };
35
+ declare const LANG_TAG_MAP: {
36
+ html: string;
37
+ pug: string;
38
+ js: string;
39
+ jsx: string;
40
+ ts: string;
41
+ tsx: string;
42
+ css: string;
43
+ scss: string;
44
+ less: string;
45
+ sass: string;
46
+ stylus: string;
47
+ text: string;
48
+ };
49
+ export declare function parseSFC(filePath: string, content: Buffer): SfcBlock;
50
+ export declare function serializeSfc(block: SfcBlock): {
51
+ filePath: string;
52
+ content: Buffer;
53
+ };
54
+ export {};
55
+ //# sourceMappingURL=sfc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sfc.d.ts","sourceRoot":"","sources":["../../src/utils/sfc.ts"],"names":[],"mappings":";AAMA,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,YAAY,SAAS,CAAC;AAInC,oBAAY,OAAO,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,oBAAY,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,OAAO,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,oBAAY,QAAQ,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,CACvC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,GAC3H;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAC1F,CAAC;AAEF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAiBtD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAE1D;AAED,aAAK,WAAW,GAAG;KAChB,CAAC,IAAI,MAAM,GAAG,KAAK;CACrB,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;CAajB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAoDpE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA2BnF"}
package/dist/utils/sfc.js CHANGED
@@ -1,44 +1,18 @@
1
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
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.serializeSfc = exports.parseSFC = exports.serializeSfcIdentity = exports.parseSfcIdentity = exports.SFC_EXT = exports.METADATA = void 0;
30
- const CompilerDOM = __importStar(require("@vue/compiler-dom"));
31
- const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
6
+ exports.serializeSfc = exports.parseSFC = exports.serializeSfcPath = exports.parseSfcPath = exports.MARS_SFC_EXT = exports.METADATA_SECTION_ID = void 0;
32
7
  const json5_1 = __importDefault(require("json5"));
33
8
  const lodash_1 = __importDefault(require("lodash"));
34
9
  const path_1 = __importDefault(require("path"));
35
- const prettier_1 = __importDefault(require("prettier"));
36
- const utils_1 = require("./utils");
37
- exports.METADATA = 'metadata';
38
- exports.SFC_EXT = 'vue';
10
+ const textUtils_1 = require("./textUtils");
11
+ exports.METADATA_SECTION_ID = 'metadata';
12
+ exports.MARS_SFC_EXT = 'mars';
39
13
  const SAVE_EMPTY_SOURCES = true;
40
- function parseSfcIdentity(filePath) {
41
- // Blog/BlogPost.page.vue => {id: "BlogPost.page", folder:"Blog", name: "BlogPost", blockTypeName: "page", ext: "vue", fullName: "Blog.BlogPost"}
14
+ function parseSfcPath(filePath) {
15
+ // Blog/BlogPost.page.mars => {folder:"Blog", name: "BlogPost", blockTypeName: "page", ext: "mars", fullName: "Blog.BlogPost"}
42
16
  const originalParsed = path_1.default.parse(filePath);
43
17
  const withoutExt = originalParsed.name;
44
18
  const ext = originalParsed.ext.slice(1);
@@ -46,22 +20,19 @@ function parseSfcIdentity(filePath) {
46
20
  if (!parsed.name || !parsed.ext)
47
21
  throw new Error(`Invalid block file path: ${filePath}`);
48
22
  const blockTypeName = parsed.ext.slice(1);
49
- const namespace = originalParsed.dir.replace(/\//g, '.');
50
- const fullName = namespace.length > 0 ? `${namespace}.${parsed.name}` : parsed.name;
51
23
  return {
52
24
  folder: originalParsed.dir,
53
25
  name: parsed.name,
54
26
  blockTypeName,
55
27
  ext,
56
- fullName,
57
28
  filePath,
58
29
  };
59
30
  }
60
- exports.parseSfcIdentity = parseSfcIdentity;
61
- function serializeSfcIdentity(identity) {
31
+ exports.parseSfcPath = parseSfcPath;
32
+ function serializeSfcPath(identity) {
62
33
  return path_1.default.join(identity.folder, `${identity.name}.${identity.blockTypeName}.${identity.ext}`);
63
34
  }
64
- exports.serializeSfcIdentity = serializeSfcIdentity;
35
+ exports.serializeSfcPath = serializeSfcPath;
65
36
  const LANG_TAG_MAP = {
66
37
  html: 'html',
67
38
  pug: 'template',
@@ -76,96 +47,82 @@ const LANG_TAG_MAP = {
76
47
  stylus: 'style',
77
48
  text: 'text',
78
49
  };
79
- function getNodeAttr(node, attr) {
80
- return node.props.map(p => (p.name == attr && p.type === 6 /* ATTRIBUTE */ ? p.value?.content : undefined)).find(p => !!p);
81
- }
82
50
  function parseSFC(filePath, content) {
83
- const identity = parseSfcIdentity(filePath);
84
- if (identity.ext !== exports.SFC_EXT) {
85
- return { identity, metadata: {}, jsons: {}, sources: {}, rawContent: content };
51
+ const sfcPath = parseSfcPath(filePath);
52
+ if (sfcPath.ext !== exports.MARS_SFC_EXT) {
53
+ return { path: sfcPath, metadata: {}, jsons: {}, sources: {}, rawContent: content };
86
54
  }
87
- const errors = [];
88
- const ast = CompilerDOM.parse(content.toString('utf-8'), {
89
- // there are no components at SFC parsing level
90
- isNativeTag: () => true,
91
- // preserve all whitespaces
92
- isPreTag: () => true,
93
- getTextMode: () => 2 /* RAWTEXT */,
94
- onError: e => errors.push(e),
95
- });
96
55
  const block = {
97
- identity: parseSfcIdentity(filePath),
56
+ path: parseSfcPath(filePath),
98
57
  metadata: {},
99
58
  jsons: {},
100
59
  sources: {},
101
60
  rawContent: null,
102
61
  };
103
62
  const seenIds = new Set();
104
- ast.children.forEach(node => {
105
- if (node.type === 1 /* ELEMENT */) {
106
- const child = node.children.length === 1 ? node.children[0] : null;
107
- const content = child && child.type === 2 /* TEXT */ ? child.content : null;
108
- if (content) {
109
- const sectionId = getNodeAttr(node, 'id');
110
- if (!sectionId) {
111
- errors.push({ name: `missing-id`, message: `Id property is missing`, code: 0, loc: node.loc });
112
- return;
113
- }
114
- if (seenIds.has(sectionId)) {
115
- errors.push({ name: `duplicate-id`, message: `Duplicate section id: ${sectionId}`, code: 0, loc: node.loc });
116
- return;
117
- }
118
- seenIds.add(sectionId);
119
- if (node.tag === 'json') {
120
- try {
121
- const jsonData = json5_1.default.parse(content);
122
- if (sectionId === exports.METADATA) {
123
- block.metadata = jsonData;
124
- }
125
- else {
126
- block.jsons[sectionId] = jsonData;
127
- }
128
- }
129
- catch (e) {
130
- errors.push({ name: 'invalid-json', message: `${e}`, code: 0, loc: node.loc });
131
- }
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;
132
80
  }
133
81
  else {
134
- const source = (0, utils_1.unescapeCloseTag)(content.slice(1, -1), node.tag);
135
- const lang = getNodeAttr(node, 'lang');
136
- const lineOffset = node.loc.start.line;
137
- block.sources[sectionId] = { source, lang, lineOffset };
82
+ block.jsons[sectionId] = jsonData;
138
83
  }
139
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 };
140
93
  }
141
- });
94
+ }
142
95
  if (errors.length) {
143
96
  throw new Error(`Parsing SFC ${filePath} failed with ${JSON.stringify(errors)}`);
144
97
  }
145
98
  return block;
146
99
  }
147
100
  exports.parseSFC = parseSFC;
148
- const PRETTIER_JSON_CONFIG = { parser: 'json5', printWidth: 120, trailingComma: 'all' };
149
101
  function serializeSfc(block) {
150
- const filePath = serializeSfcIdentity(block.identity);
151
- if (block.identity.ext !== exports.SFC_EXT) {
102
+ const filePath = serializeSfcPath(block.path);
103
+ if (block.path.ext !== exports.MARS_SFC_EXT) {
152
104
  if (block.rawContent === null)
153
- throw new Error(`SfcBlock must have rawContent if ext!="${exports.SFC_EXT}"`);
105
+ throw new Error(`SfcBlock must have rawContent if ext!="${exports.MARS_SFC_EXT}"`);
154
106
  return { filePath, content: block.rawContent };
155
107
  }
156
108
  if (block.rawContent !== null)
157
- throw new Error(`SfcBlock cannot have rawContent if ext=="${exports.SFC_EXT}"`);
109
+ throw new Error(`SfcBlock cannot have rawContent if ext=="${exports.MARS_SFC_EXT}"`);
158
110
  let content = '';
159
- for (const [name, source] of [[exports.METADATA, block.metadata], ...lodash_1.default.sortBy(Object.entries(block.jsons), e => e[0])]) {
160
- const jsonStr = prettier_1.default.format('(' + (0, json_stable_stringify_1.default)(source) + ')', PRETTIER_JSON_CONFIG);
161
- content += `<json id="${(0, utils_1.escapeHtmlAttr)(name)}">\n${jsonStr}</json>\n\n`;
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`;
162
114
  }
163
115
  for (const [name, source] of lodash_1.default.sortBy(Object.entries(block.sources), e => e[0])) {
164
116
  if (!SAVE_EMPTY_SOURCES && !source.source.trim())
165
117
  continue;
166
- const tag = LANG_TAG_MAP[source.lang || ''] || 'script';
167
- content += `<${tag} id="${(0, utils_1.escapeHtmlAttr)(name)}" lang="${source.lang}">\n${(0, utils_1.escapeCloseTag)(source.source, tag)}\n</${tag}>\n\n`;
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`;
168
124
  }
169
125
  return { filePath, content: Buffer.from(content, 'utf-8') };
170
126
  }
171
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,105 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.parseVueLike = exports.stableHtmlAttributes = exports.stablePrettyJson = exports.stableJson = exports.prettifyJson = exports.escapeHtmlAttr = exports.unescapeCloseTag = exports.escapeCloseTag = exports.assert = void 0;
30
+ const CompilerDOM = __importStar(require("@vue/compiler-dom"));
31
+ const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
32
+ const lodash_1 = __importDefault(require("lodash"));
33
+ const prettier_1 = __importDefault(require("prettier"));
34
+ function assert(value, message = 'value must be defined') {
35
+ if (!value) {
36
+ throw new Error(message);
37
+ }
38
+ }
39
+ exports.assert = assert;
40
+ function escapeCloseTag(str, tag) {
41
+ return str.replaceAll(`</${tag}>`, `</ ${tag}>`);
42
+ }
43
+ exports.escapeCloseTag = escapeCloseTag;
44
+ function unescapeCloseTag(str, tag) {
45
+ return str.replaceAll(`</ ${tag}>`, `</${tag}>`);
46
+ }
47
+ exports.unescapeCloseTag = unescapeCloseTag;
48
+ function escapeHtmlAttr(str) {
49
+ return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
50
+ }
51
+ exports.escapeHtmlAttr = escapeHtmlAttr;
52
+ const PRETTIER_JSON_CONFIG = { parser: 'json5', printWidth: 120, trailingComma: 'all' };
53
+ function prettifyJson(json) {
54
+ return prettier_1.default.format(`(${json})`, PRETTIER_JSON_CONFIG);
55
+ }
56
+ exports.prettifyJson = prettifyJson;
57
+ function stableJson(data) {
58
+ return (0, json_stable_stringify_1.default)(data);
59
+ }
60
+ exports.stableJson = stableJson;
61
+ function stablePrettyJson(data) {
62
+ return prettifyJson(stableJson(data));
63
+ }
64
+ exports.stablePrettyJson = stablePrettyJson;
65
+ function stableHtmlAttributes(attrs) {
66
+ let result = '';
67
+ if (attrs) {
68
+ for (const [name, value] of lodash_1.default.sortBy(Object.entries(attrs), e => e[0])) {
69
+ if (value) {
70
+ result += ` ${name}="${escapeHtmlAttr(value)}"`;
71
+ }
72
+ }
73
+ }
74
+ return result;
75
+ }
76
+ exports.stableHtmlAttributes = stableHtmlAttributes;
77
+ function parseVueLike(content, errors) {
78
+ const ast = CompilerDOM.parse(content, {
79
+ // there are no components at SFC parsing level
80
+ isNativeTag: () => true,
81
+ // preserve all whitespaces
82
+ isPreTag: () => true,
83
+ getTextMode: () => 2 /* RAWTEXT */,
84
+ onError: e => errors.push(e),
85
+ });
86
+ const result = [];
87
+ for (const node of ast.children) {
88
+ if (node.type === 1 /* ELEMENT */) {
89
+ const child = node.children.length === 1 ? node.children[0] : null;
90
+ const content = child && child.type === 2 /* TEXT */ ? child.content : null;
91
+ if (content) {
92
+ const props = {};
93
+ for (const prop of node.props) {
94
+ if (prop.type === 6 /* ATTRIBUTE */ && prop.value) {
95
+ props[prop.name] = prop.value.content;
96
+ }
97
+ }
98
+ result.push({ tag: node.tag, props, content, loc: node.loc });
99
+ }
100
+ }
101
+ }
102
+ return result;
103
+ }
104
+ exports.parseVueLike = parseVueLike;
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3RleHRVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLCtEQUFpRDtBQUVqRCxrRkFBOEM7QUFDOUMsb0RBQXVCO0FBQ3ZCLHdEQUE2QztBQUU3QyxTQUFnQixNQUFNLENBQUMsS0FBYyxFQUFFLE9BQU8sR0FBRyx1QkFBdUI7SUFDdEUsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDMUI7QUFDSCxDQUFDO0FBSkQsd0JBSUM7QUFFRCxTQUFnQixjQUFjLENBQUMsR0FBVyxFQUFFLEdBQVc7SUFDckQsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFGRCx3Q0FFQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxHQUFXO0lBQ3ZELE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRkQsNENBRUM7QUFFRCxTQUFnQixjQUFjLENBQUMsR0FBVztJQUN4QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hHLENBQUM7QUFGRCx3Q0FFQztBQUVELE1BQU0sb0JBQW9CLEdBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEtBQUss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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 CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertSfcToV3 = exports.convertV3ToSfc = void 0;
4
+ const sfc_1 = require("./sfc");
4
5
  const SFC_FIELD_MAP = {
5
6
  // JSONs
6
7
  DataArgs: 'json',
@@ -42,12 +43,11 @@ const SFC_FIELD_MAP = {
42
43
  };
43
44
  function convertV3ToSfc(block) {
44
45
  const sfc = {
45
- identity: {
46
+ path: {
46
47
  folder: block.Folder,
47
48
  name: block.Name,
48
49
  blockTypeName: block.Type,
49
- ext: 'vue',
50
- fullName: '',
50
+ ext: sfc_1.MARS_SFC_EXT,
51
51
  filePath: '',
52
52
  },
53
53
  metadata: {},
@@ -83,9 +83,9 @@ function convertV3ToSfc(block) {
83
83
  exports.convertV3ToSfc = convertV3ToSfc;
84
84
  function convertSfcToV3(sfc) {
85
85
  const block = {
86
- Name: sfc.identity.name,
87
- Type: sfc.identity.blockTypeName,
88
- Folder: sfc.identity.folder,
86
+ Name: sfc.path.name,
87
+ Type: sfc.path.blockTypeName,
88
+ Folder: sfc.path.folder,
89
89
  ...sfc.metadata,
90
90
  ...sfc.jsons,
91
91
  };
@@ -95,3 +95,4 @@ function convertSfcToV3(sfc) {
95
95
  return block;
96
96
  }
97
97
  exports.convertSfcToV3 = convertSfcToV3;
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdjMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStDO0FBUy9DLE1BQU0sYUFBYSxHQUEyQjtJQUM1QyxRQUFRO0lBQ1IsUUFBUSxFQUFFLE1BQU07SUFDaEIsSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsTUFBTTtJQUNiLE1BQU0sRUFBRSxNQUFNO0lBQ2QsTUFBTSxFQUFFLE1BQU07SUFDZCxLQUFLLEVBQUUsTUFBTTtJQUNiLFVBQVU7SUFDVixhQUFhLEVBQUUsSUFBSTtJQUNuQixJQUFJLEVBQUUsTUFBTTtJQUNaLElBQUksRUFBRSxNQUFNO0lBQ1osR0FBRyxFQUFFLEtBQUs7SUFDVixhQUFhLEVBQUUsSUFBSTtJQUNuQix1QkFBdUIsRUFBRSxJQUFJO0lBQzdCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsYUFBYSxFQUFFLElBQUk7SUFDbkIsT0FBTyxFQUFFLEtBQUs7SUFDZCxpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLE1BQU0sRUFBRSxJQUFJO0lBQ1osR0FBRyxFQUFFLEtBQUs7SUFDVixRQUFRLEVBQUUsSUFBSTtJQUNkLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsNkJBQTZCO0lBQzdCLGlCQUFpQjtJQUNqQixJQUFJLEVBQUUsUUFBUTtJQUNkLElBQUksRUFBRSxRQUFRO0lBQ2QsTUFBTSxFQUFFLFFBQVE7SUFDaEIsa0NBQWtDO0lBQ2xDLEdBQUcsRUFBRSxRQUFRO0lBQ2IsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLFFBQVE7SUFDckIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsbURBQW1EO0NBQ3BELENBQUM7QUFFRixTQUFnQixjQUFjLENBQUMsS0FBbUI7SUFDaEQsTUFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marsx-dev/launcher",
3
- "version": "0.0.3",
3
+ "version": "0.0.6",
4
4
  "description": "MarsX launcher",
5
5
  "author": "MarsX team <team@marsx.dev>",
6
6
  "homepage": "https://marsx.dev/",
@@ -19,6 +19,7 @@
19
19
  },
20
20
  "files": [
21
21
  "dist",
22
+ "src",
22
23
  "LICENSE",
23
24
  "README.md"
24
25
  ],
@@ -42,7 +43,8 @@
42
43
  "chalk": "^4.1.2",
43
44
  "commander": "^9.1.0",
44
45
  "json-stable-stringify": "^1.0.1",
45
- "json5": "^2.2.0"
46
+ "json5": "^2.2.0",
47
+ "yup": "^0.32.11"
46
48
  },
47
49
  "peerDependencies": {
48
50
  "@types/config": "^0.0.41",
@@ -58,6 +60,7 @@
58
60
  },
59
61
  "devDependencies": {
60
62
  "@types/json-stable-stringify": "^1.0.34",
63
+ "@types/yup": "^0.29.13",
61
64
  "@typescript-eslint/eslint-plugin": "^5.10.2",
62
65
  "@typescript-eslint/parser": "^5.10.2",
63
66
  "eslint": "^8.8.0",
@@ -0,0 +1,37 @@
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
+
9
+ export class CliError extends Error {}
10
+
11
+ async function main() {
12
+ try {
13
+ const program = new Command();
14
+
15
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
16
+ const version = require('../../package.json').version;
17
+ program.name('marsx').description('CLI for MarsX launcher').version(version);
18
+
19
+ program.command('start', { isDefault: true }).description('Start MarsX server').action(start);
20
+ program
21
+ .command('init <project_name>')
22
+ .description('Initialize a new MarsX project named <project_name> in a directory of the same name')
23
+ .action(initProject);
24
+ program.command('migrate').description('Migrate MarsX V3 project to V4').action(migrateV3ToV4);
25
+
26
+ await program.parseAsync();
27
+ } catch (e) {
28
+ if (e instanceof CliError) {
29
+ console.error(chalk.red(e.message));
30
+ } else {
31
+ console.error(chalk.red(e));
32
+ }
33
+ process.exit(1);
34
+ }
35
+ }
36
+
37
+ main();