xs-dev 1.3.0 → 1.4.0
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/README.md +1 -1
- package/build/package.json +1 -1
- package/build/src/commands/include.js +6 -36
- package/build/src/commands/init.js +3 -10
- package/build/src/commands/remove.js +13 -37
- package/build/src/toolbox/manifest/index.js +68 -0
- package/build/src/toolbox/prompt/tree.js +11 -0
- package/build/types/src/toolbox/manifest/index.d.ts +8 -0
- package/build/types/src/toolbox/prompt/tree.d.ts +6 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ The Moddable SDK and associated dev board tooling is incredibly empowering for e
|
|
|
6
6
|
|
|
7
7
|
[Check out the documentation!](https://hipsterbrown.github.io/xs-dev/)
|
|
8
8
|
|
|
9
|
-
**This project is a work in progress and
|
|
9
|
+
**This project is a continual work in progress and v1, so breaking changes will be semantically-released with major version bumps.**
|
|
10
10
|
|
|
11
11
|
## Requirements
|
|
12
12
|
|
package/build/package.json
CHANGED
|
@@ -1,21 +1,14 @@
|
|
|
1
|
-
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
1
|
import { existsSync, statSync, readdirSync } from 'node:fs';
|
|
3
2
|
import { join } from 'node:path';
|
|
4
3
|
import { buildCommand } from '@stricli/core';
|
|
5
4
|
import { select } from '@inquirer/prompts';
|
|
6
5
|
import { collectChoicesFromTree } from '../toolbox/prompt/choices.js';
|
|
6
|
+
import { buildTree } from '../toolbox/prompt/tree.js';
|
|
7
7
|
import { sourceEnvironment } from '../toolbox/system/exec.js';
|
|
8
8
|
import { DEVICE_ALIAS } from '../toolbox/prompt/devices.js';
|
|
9
9
|
import * as output from '../lib/output.js';
|
|
10
|
+
import { readManifest, writeManifest, addInclude, } from '../toolbox/manifest/index.js';
|
|
10
11
|
const deviceSet = new Set(Object.values(DEVICE_ALIAS));
|
|
11
|
-
function buildTree(dirPath, name) {
|
|
12
|
-
const stat = statSync(dirPath);
|
|
13
|
-
if (stat.isDirectory()) {
|
|
14
|
-
const children = readdirSync(dirPath).map((entry) => buildTree(join(dirPath, entry), entry));
|
|
15
|
-
return { name, type: 'dir', children };
|
|
16
|
-
}
|
|
17
|
-
return { name, type: 'file', children: [] };
|
|
18
|
-
}
|
|
19
12
|
const command = buildCommand({
|
|
20
13
|
docs: {
|
|
21
14
|
brief: 'Name or select Moddable module to add to project manifest',
|
|
@@ -52,32 +45,9 @@ const command = buildCommand({
|
|
|
52
45
|
}
|
|
53
46
|
output.info(`Adding "${String(moduleName)}" to manifest includes`);
|
|
54
47
|
const modulePath = `$(MODDABLE)/modules/${String(moduleName)}/manifest.json`;
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
let manifest = manifestIn;
|
|
59
|
-
if (device !== '') {
|
|
60
|
-
manifest.platforms ??= {};
|
|
61
|
-
manifest.platforms[device] ??= {};
|
|
62
|
-
manifest = manifest.platforms[device];
|
|
63
|
-
}
|
|
64
|
-
if (!('include' in manifest)) {
|
|
65
|
-
manifest.include = [];
|
|
66
|
-
}
|
|
67
|
-
if (typeof manifest.include === 'string') {
|
|
68
|
-
manifest.include = [manifest.include];
|
|
69
|
-
}
|
|
70
|
-
if (!manifest.include.includes(modulePath)) {
|
|
71
|
-
;
|
|
72
|
-
manifest.include.push(modulePath);
|
|
73
|
-
}
|
|
74
|
-
if (manifest.include.length === 1) {
|
|
75
|
-
manifest.include = manifest.include[0];
|
|
76
|
-
}
|
|
77
|
-
return manifestIn;
|
|
78
|
-
};
|
|
79
|
-
const result = fn(data);
|
|
80
|
-
await writeFile(manifestPath, JSON.stringify(result ?? data, null, 2), 'utf8');
|
|
48
|
+
const manifest = await readManifest(manifestPath);
|
|
49
|
+
const updated = addInclude(manifest, modulePath, device);
|
|
50
|
+
await writeManifest(manifestPath, updated);
|
|
81
51
|
output.success('Done!');
|
|
82
52
|
},
|
|
83
53
|
parameters: {
|
|
@@ -106,4 +76,4 @@ const command = buildCommand({
|
|
|
106
76
|
},
|
|
107
77
|
});
|
|
108
78
|
export default command;
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9pbmNsdWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRTFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFFM0QsT0FBTyxLQUFLLE1BQU0sTUFBTSxrQkFBa0IsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYixVQUFVLEdBQ1gsTUFBTSw4QkFBOEIsQ0FBQTtBQU1yQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7QUFFdEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO0lBQzNCLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSwyREFBMkQ7S0FDbkU7SUFDRCxLQUFLLENBQUMsSUFBSSxDQUFxQixLQUFxQixFQUFFLFVBQW1CO1FBQ3ZFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1B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
|
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
import { existsSync, statSync,
|
|
1
|
+
import { existsSync, statSync, mkdirSync, cpSync, readdirSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { buildCommand } from '@stricli/core';
|
|
4
4
|
import { select } from '@inquirer/prompts';
|
|
5
5
|
import { collectChoicesFromTree } from '../toolbox/prompt/choices.js';
|
|
6
|
+
import { buildTree } from '../toolbox/prompt/tree.js';
|
|
6
7
|
import { sourceEnvironment } from '../toolbox/system/exec.js';
|
|
7
8
|
import * as output from '../lib/output.js';
|
|
8
|
-
function buildTree(dirPath, name) {
|
|
9
|
-
const stat = statSync(dirPath);
|
|
10
|
-
if (stat.isDirectory()) {
|
|
11
|
-
const children = readdirSync(dirPath).map((entry) => buildTree(join(dirPath, entry), entry));
|
|
12
|
-
return { name, type: 'dir', children };
|
|
13
|
-
}
|
|
14
|
-
return { name, type: 'file', children: [] };
|
|
15
|
-
}
|
|
16
9
|
const command = buildCommand({
|
|
17
10
|
docs: {
|
|
18
11
|
brief: 'Scaffold a new Moddable XS project',
|
|
@@ -169,4 +162,4 @@ const command = buildCommand({
|
|
|
169
162
|
},
|
|
170
163
|
});
|
|
171
164
|
export default command;
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzlFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFMUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzdELE9BQU8sS0FBSyxNQUFNLE1BQU0sa0JBQWtCLENBQUE7QUFZMUMsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO0lBQzNCLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSxvQ0FBb0M7S0FDNUM7SUFDRCxLQUFLLENBQUMsSUFBSSxDQUFxQixLQUFrQixFQUFFLFdBQW1CO1FBQ3BFLE1BQU0sRUFDSixVQUFVLEdBQUcsS0FBSyxFQUNsQixFQUFFLEdBQUcsSUFBSSxFQUNULFFBQVEsR0FBRyxLQUFLLEVBQ2hCLE9BQU8sRUFDUCxlQUFlLEVBQUUsWUFBWSxHQUFHLEtBQUssRUFDckMsU0FBUyxHQUFHLEtBQUssRUFDakIsU0FBUyxHQUFHLEtBQUssR0FDbEIsR0FBRyxLQUFLLENBQUE7UUFFVCxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixJQUNFLENBQUMsU0FBUztnQkFDVixVQUFVLENBQUMsV0FBVyxDQUFDO2dCQUN2QixRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsV0FB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
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
1
|
import { existsSync } from 'node:fs';
|
|
3
2
|
import { join } from 'node:path';
|
|
4
3
|
import { buildCommand } from '@stricli/core';
|
|
5
4
|
import { DEVICE_ALIAS } from '../toolbox/prompt/devices.js';
|
|
6
5
|
import * as output from '../lib/output.js';
|
|
6
|
+
import { readManifest, writeManifest, removeInclude, } from '../toolbox/manifest/index.js';
|
|
7
7
|
const deviceSet = new Set(Object.values(DEVICE_ALIAS));
|
|
8
8
|
const command = buildCommand({
|
|
9
9
|
docs: {
|
|
@@ -15,46 +15,22 @@ const command = buildCommand({
|
|
|
15
15
|
output.error('Cannot find manifest.json. Must be in project directory to update manifest includes.');
|
|
16
16
|
process.exit(1);
|
|
17
17
|
}
|
|
18
|
-
const { device = '' } = flags;
|
|
19
18
|
if (moduleName === undefined) {
|
|
20
19
|
output.error('Module name is required');
|
|
21
20
|
return;
|
|
22
21
|
}
|
|
23
22
|
output.info(`Removing "${String(moduleName)}" from manifest includes`);
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
if (typeof manifest.include === 'string') {
|
|
37
|
-
manifest.include = [manifest.include];
|
|
38
|
-
}
|
|
39
|
-
const lengthBefore = manifest.include.length;
|
|
40
|
-
const toRemove = manifest.include.filter((mod) => mod.includes(moduleName));
|
|
41
|
-
toRemove.forEach((mod) => {
|
|
42
|
-
output.info(` Removing: ${mod}`);
|
|
43
|
-
});
|
|
44
|
-
manifest.include = manifest.include.filter((mod) => !mod.includes(moduleName));
|
|
45
|
-
if (manifest.include.length === lengthBefore) {
|
|
46
|
-
output.error(`"${moduleName}" not found. No modules removed.`);
|
|
47
|
-
}
|
|
48
|
-
if (manifest.include.length === 1) {
|
|
49
|
-
manifest.include = manifest.include[0];
|
|
50
|
-
}
|
|
51
|
-
else if (manifest.include.length === 0) {
|
|
52
|
-
delete manifest.include;
|
|
53
|
-
}
|
|
54
|
-
return manifestIn;
|
|
55
|
-
};
|
|
56
|
-
const result = fn(data);
|
|
57
|
-
await writeFile(manifestPath, JSON.stringify(result ?? data, null, 2), 'utf8');
|
|
23
|
+
const { device = '' } = flags;
|
|
24
|
+
const manifest = await readManifest(manifestPath);
|
|
25
|
+
const { manifest: updated, removed } = removeInclude(manifest, moduleName, device);
|
|
26
|
+
if (removed.length === 0) {
|
|
27
|
+
output.error(`"${moduleName}" not found. No modules removed.`);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
for (const mod of removed) {
|
|
31
|
+
output.info(` Removing: ${mod}`);
|
|
32
|
+
}
|
|
33
|
+
await writeManifest(manifestPath, updated);
|
|
58
34
|
output.success('Done!');
|
|
59
35
|
},
|
|
60
36
|
parameters: {
|
|
@@ -82,4 +58,4 @@ const command = buildCommand({
|
|
|
82
58
|
},
|
|
83
59
|
});
|
|
84
60
|
export default command;
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3JlbW92ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUU1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFFM0QsT0FBTyxLQUFLLE1BQU0sTUFBTSxrQkFBa0IsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYixhQUFhLEdBQ2QsTUFBTSw4QkFBOEIsQ0FBQTtBQU1yQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7QUFFdEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO0lBQzNCLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSxnRUFBZ0U7S0FDeEU7SUFDRCxLQUFLLENBQUMsSUFBSSxDQUFxQixLQUFvQixFQUFFLFVBQWtCO1FBQ3JFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQ1Ysc0ZBQXNGLENBQ3ZGLENBQUE7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLENBQUM7UUFFRCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUE7WUFDdkMsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsTUFBTSxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1FBRXRFLE1BQU0sRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFBO1FBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ2pELE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FDbEQsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLENBQ1AsQ0FBQTtRQUVELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxrQ0FBa0MsQ0FBQyxDQUFBO1lBQzlELE9BQU07UUFDUixDQUFDO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUNsQyxDQUFDO1FBRUQsTUFBTSxhQUFhLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRTFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUNELFVBQVUsRUFBRTtRQUNWLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxPQUFPO1lBQ2IsVUFBVSxFQUFFO2dCQUNWO29CQUNFLFdBQVcsRUFBRSxZQUFZO29CQUN6QixLQUFLLEVBQ0gsbUVBQW1FO29CQUNyRSxLQUFLLEVBQUUsTUFBTTtpQkFDZDthQUNGO1NBQ0Y7UUFDRCxLQUFLLEVBQUU7WUFDTCxNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLE1BQU07Z0JBQ1osTUFBTSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQTBCO2dCQUMvQyxLQUFLLEVBQUUsOENBQThDO2dCQUNyRCxRQUFRLEVBQUUsSUFBSTthQUNmO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUCxDQUFDLEVBQUUsUUFBUTtTQUNaO0tBQ0Y7Q0FDRixDQUFDLENBQUE7QUFFRixlQUFlLE9BQU8sQ0FBQSJ9
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
export async function readManifest(path) {
|
|
3
|
+
const raw = await readFile(path, 'utf8');
|
|
4
|
+
return JSON.parse(raw);
|
|
5
|
+
}
|
|
6
|
+
export async function writeManifest(path, manifest) {
|
|
7
|
+
await writeFile(path, JSON.stringify(manifest, null, 2), 'utf8');
|
|
8
|
+
}
|
|
9
|
+
function getTarget(manifest, device) {
|
|
10
|
+
if (device === '')
|
|
11
|
+
return manifest;
|
|
12
|
+
manifest.platforms ??= {};
|
|
13
|
+
manifest.platforms[device] ??= {};
|
|
14
|
+
return manifest.platforms[device];
|
|
15
|
+
}
|
|
16
|
+
export function addInclude(manifest, modulePath, device = '') {
|
|
17
|
+
const clone = structuredClone(manifest);
|
|
18
|
+
const target = getTarget(clone, device);
|
|
19
|
+
if (!('include' in target)) {
|
|
20
|
+
target.include = [];
|
|
21
|
+
}
|
|
22
|
+
if (typeof target.include === 'string') {
|
|
23
|
+
target.include = [target.include];
|
|
24
|
+
}
|
|
25
|
+
const includes = target.include.filter((x) => typeof x === 'string');
|
|
26
|
+
if (!includes.includes(modulePath)) {
|
|
27
|
+
includes.push(modulePath);
|
|
28
|
+
}
|
|
29
|
+
// Moddable manifests use a bare string for a single include, array for multiple
|
|
30
|
+
if (includes.length === 1) {
|
|
31
|
+
target.include = includes[0];
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
target.include = includes;
|
|
35
|
+
}
|
|
36
|
+
return clone;
|
|
37
|
+
}
|
|
38
|
+
export function removeInclude(manifest, moduleName, device = '') {
|
|
39
|
+
const clone = structuredClone(manifest);
|
|
40
|
+
// If device specified but platform doesn't exist in manifest, nothing to remove
|
|
41
|
+
if (device !== '' &&
|
|
42
|
+
clone.platforms?.[device] ===
|
|
43
|
+
undefined) {
|
|
44
|
+
return { manifest: clone, removed: [] };
|
|
45
|
+
}
|
|
46
|
+
const target = getTarget(clone, device);
|
|
47
|
+
if (!('include' in target)) {
|
|
48
|
+
return { manifest: clone, removed: [] };
|
|
49
|
+
}
|
|
50
|
+
if (typeof target.include === 'string') {
|
|
51
|
+
target.include = [target.include];
|
|
52
|
+
}
|
|
53
|
+
const includes = target.include.filter((x) => typeof x === 'string');
|
|
54
|
+
const toRemove = includes.filter((mod) => mod.includes(moduleName));
|
|
55
|
+
const remaining = includes.filter((mod) => !mod.includes(moduleName));
|
|
56
|
+
// Moddable manifests use a bare string for a single include, array for multiple
|
|
57
|
+
if (remaining.length === 1) {
|
|
58
|
+
target.include = remaining[0];
|
|
59
|
+
}
|
|
60
|
+
else if (remaining.length === 0) {
|
|
61
|
+
delete target.include;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
target.include = remaining;
|
|
65
|
+
}
|
|
66
|
+
return { manifest: clone, removed: toRemove };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9tYW5pZmVzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBSXRELE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQVk7SUFDN0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQWEsQ0FBQTtBQUNwQyxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQ2pDLElBQVksRUFDWixRQUFrQjtJQUVsQixNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ2xFLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxRQUFrQixFQUFFLE1BQWM7SUFDbkQsSUFBSSxNQUFNLEtBQUssRUFBRTtRQUFFLE9BQU8sUUFBUSxDQUFBO0lBQ2xDLFFBQVEsQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUN4QjtJQUFDLFFBQVEsQ0FBQyxTQUFxQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUMvRCxPQUFRLFFBQVEsQ0FBQyxTQUFxQyxDQUFDLE1BQU0sQ0FBYSxDQUFBO0FBQzVFLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUN4QixRQUFrQixFQUNsQixVQUFrQixFQUNsQixNQUFNLEdBQUcsRUFBRTtJQUVYLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN2QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZD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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { statSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
export function buildTree(dirPath, name) {
|
|
4
|
+
const stat = statSync(dirPath);
|
|
5
|
+
if (stat.isDirectory()) {
|
|
6
|
+
const children = readdirSync(dirPath).map((entry) => buildTree(join(dirPath, entry), entry));
|
|
7
|
+
return { name, type: 'dir', children };
|
|
8
|
+
}
|
|
9
|
+
return { name, type: 'file', children: [] };
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29sYm94L3Byb21wdC90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFRaEMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxPQUFlLEVBQUUsSUFBWTtJQUNyRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDOUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQ3ZDLENBQUE7UUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUE7SUFDeEMsQ0FBQztJQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUE7QUFDN0MsQ0FBQyJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type Manifest = Record<string, unknown>;
|
|
2
|
+
export declare function readManifest(path: string): Promise<Manifest>;
|
|
3
|
+
export declare function writeManifest(path: string, manifest: Manifest): Promise<void>;
|
|
4
|
+
export declare function addInclude(manifest: Manifest, modulePath: string, device?: string): Manifest;
|
|
5
|
+
export declare function removeInclude(manifest: Manifest, moduleName: string, device?: string): {
|
|
6
|
+
manifest: Manifest;
|
|
7
|
+
removed: string[];
|
|
8
|
+
};
|