@metaverse-systems/the-seed 1.2.0 → 1.2.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/dist/Dependencies.d.ts +7 -0
- package/dist/Dependencies.js +29 -1
- package/dist/Dependencies.js.map +1 -1
- package/dist/ResourcePak.d.ts +2 -2
- package/dist/ResourcePak.js +7 -6
- package/dist/ResourcePak.js.map +1 -1
- package/package.json +1 -1
- package/src/Dependencies.ts +34 -0
- package/src/ResourcePak.ts +7 -6
- package/test/ResourcePak.test.ts +106 -24
package/dist/Dependencies.d.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import Config from "./Config";
|
|
2
|
+
import { BuildStep } from "./types";
|
|
2
3
|
export declare const checkLib: (config: Config, library: string, target: string) => boolean;
|
|
3
4
|
export declare const checkLibEcs: (config: Config, target: string) => boolean;
|
|
4
5
|
export declare const checkLibTheSeed: (config: Config, target: string) => boolean;
|
|
5
6
|
export declare const installLibEcs: (config: Config, target: string) => boolean;
|
|
6
7
|
export declare const installLibTheSeed: (config: Config, target: string) => boolean;
|
|
7
8
|
export declare const installLib: (config: Config, repo: string, installDir: string, target: string) => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Returns an ordered array of BuildStep objects for installing missing libraries.
|
|
11
|
+
* Checks which libraries are missing and generates clone + build steps for each.
|
|
12
|
+
* Order: libecs-cpp first, then libthe-seed (compile-time dependency).
|
|
13
|
+
*/
|
|
14
|
+
export declare const getInstallSteps: (config: Config, target: string) => BuildStep[];
|
package/dist/Dependencies.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.installLib = exports.installLibTheSeed = exports.installLibEcs = exports.checkLibTheSeed = exports.checkLibEcs = exports.checkLib = void 0;
|
|
3
|
+
exports.getInstallSteps = exports.installLib = exports.installLibTheSeed = exports.installLibEcs = exports.checkLibTheSeed = exports.checkLibEcs = exports.checkLib = void 0;
|
|
4
4
|
const child_process_1 = require("child_process");
|
|
5
5
|
const Build_1 = require("./Build");
|
|
6
6
|
const execOptions = { stdio: "pipe", shell: "/bin/bash", env: Object.assign({}, process.env) };
|
|
@@ -73,4 +73,32 @@ const installLib = (config, repo, installDir, target) => {
|
|
|
73
73
|
return true;
|
|
74
74
|
};
|
|
75
75
|
exports.installLib = installLib;
|
|
76
|
+
/**
|
|
77
|
+
* Returns an ordered array of BuildStep objects for installing missing libraries.
|
|
78
|
+
* Checks which libraries are missing and generates clone + build steps for each.
|
|
79
|
+
* Order: libecs-cpp first, then libthe-seed (compile-time dependency).
|
|
80
|
+
*/
|
|
81
|
+
const getInstallSteps = (config, target) => {
|
|
82
|
+
const targetDir = Build_1.targets[target];
|
|
83
|
+
const prefix = config.config.prefix + "/" + targetDir;
|
|
84
|
+
const steps = [];
|
|
85
|
+
const libraries = [
|
|
86
|
+
{ name: "libecs-cpp", repo: libEcsRepo, installDir: "libecs-cpp", pkgConfigName: "ecs-cpp" },
|
|
87
|
+
{ name: "libthe-seed", repo: libTheSeedRepo, installDir: "libthe-seed", pkgConfigName: "the-seed" },
|
|
88
|
+
];
|
|
89
|
+
for (const lib of libraries) {
|
|
90
|
+
// Skip if already installed
|
|
91
|
+
if ((0, exports.checkLib)(config, lib.pkgConfigName, target)) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const hostFlag = target !== "native" ? " --host=" + targetDir : "";
|
|
95
|
+
steps.push({ label: `clone ${lib.name}`, command: `git clone ${lib.repo}` });
|
|
96
|
+
steps.push({ label: `${lib.name} autogen`, command: `cd ${lib.installDir} && ./autogen.sh` });
|
|
97
|
+
steps.push({ label: `${lib.name} configure`, command: `cd ${lib.installDir} && ./configure --prefix=${prefix}${hostFlag}` });
|
|
98
|
+
steps.push({ label: `${lib.name} compile`, command: `cd ${lib.installDir} && make` });
|
|
99
|
+
steps.push({ label: `${lib.name} install`, command: `cd ${lib.installDir} && make install` });
|
|
100
|
+
}
|
|
101
|
+
return steps;
|
|
102
|
+
};
|
|
103
|
+
exports.getInstallSteps = getInstallSteps;
|
|
76
104
|
//# sourceMappingURL=Dependencies.js.map
|
package/dist/Dependencies.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dependencies.js","sourceRoot":"","sources":["../src/Dependencies.ts"],"names":[],"mappings":";;;AACA,iDAAyC;AACzC,mCAAkC;
|
|
1
|
+
{"version":3,"file":"Dependencies.js","sourceRoot":"","sources":["../src/Dependencies.ts"],"names":[],"mappings":"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"}
|
package/dist/ResourcePak.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ declare class ResourcePak {
|
|
|
20
20
|
})[];
|
|
21
21
|
createPackage: (scope: string, name: string) => void;
|
|
22
22
|
save: () => void;
|
|
23
|
-
addResource: (name: string, filename: string) => void;
|
|
24
|
-
build: () => void;
|
|
23
|
+
addResource: (name: string, filename: string, packageDir?: string | undefined) => void;
|
|
24
|
+
build: (packageDir?: string | undefined) => void;
|
|
25
25
|
}
|
|
26
26
|
export default ResourcePak;
|
package/dist/ResourcePak.js
CHANGED
|
@@ -51,8 +51,8 @@ class ResourcePak {
|
|
|
51
51
|
this.save = () => {
|
|
52
52
|
fs_extra_1.default.writeFileSync(this.packageDir + "/package.json", JSON.stringify(this.package, null, 2));
|
|
53
53
|
};
|
|
54
|
-
this.addResource = (name, filename) => {
|
|
55
|
-
this.packageDir = process.cwd();
|
|
54
|
+
this.addResource = (name, filename, packageDir) => {
|
|
55
|
+
this.packageDir = packageDir !== null && packageDir !== void 0 ? packageDir : process.cwd();
|
|
56
56
|
this.package = JSON.parse(fs_extra_1.default.readFileSync(this.packageDir + "/package.json").toString());
|
|
57
57
|
if (!this.package) {
|
|
58
58
|
return;
|
|
@@ -65,7 +65,8 @@ class ResourcePak {
|
|
|
65
65
|
else {
|
|
66
66
|
this.package.resources = [];
|
|
67
67
|
}
|
|
68
|
-
const
|
|
68
|
+
const fullPath = this.packageDir + "/" + filename;
|
|
69
|
+
const stats = fs_extra_1.default.statSync(fullPath);
|
|
69
70
|
this.package.resources.push({
|
|
70
71
|
name: name,
|
|
71
72
|
filename: filename,
|
|
@@ -73,8 +74,8 @@ class ResourcePak {
|
|
|
73
74
|
});
|
|
74
75
|
this.save();
|
|
75
76
|
};
|
|
76
|
-
this.build = () => {
|
|
77
|
-
this.packageDir = process.cwd();
|
|
77
|
+
this.build = (packageDir) => {
|
|
78
|
+
this.packageDir = packageDir !== null && packageDir !== void 0 ? packageDir : process.cwd();
|
|
78
79
|
this.package = JSON.parse(fs_extra_1.default.readFileSync(this.packageDir + "/package.json").toString());
|
|
79
80
|
if (!this.package) {
|
|
80
81
|
return;
|
|
@@ -99,7 +100,7 @@ class ResourcePak {
|
|
|
99
100
|
const [, name] = this.package.name.split("/");
|
|
100
101
|
fs_extra_1.default.writeFileSync(this.packageDir + "/" + name + ".pak", JSON.stringify(header) + "\n");
|
|
101
102
|
this.package.resources.forEach((r) => {
|
|
102
|
-
fs_extra_1.default.appendFileSync(name + ".pak", fs_extra_1.default.readFileSync(r.filename));
|
|
103
|
+
fs_extra_1.default.appendFileSync(this.packageDir + "/" + name + ".pak", fs_extra_1.default.readFileSync(this.packageDir + "/" + r.filename));
|
|
103
104
|
});
|
|
104
105
|
};
|
|
105
106
|
this.config = config;
|
package/dist/ResourcePak.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcePak.js","sourceRoot":"","sources":["../src/ResourcePak.ts"],"names":[],"mappings":";;;AAAA,gEAA0B;AAC1B,iDAAyC;AAEzC,8DAA8B;AAG9B,MAAM,WAAW;IAMf,YAAY,MAAc;QAL1B,eAAU,GAAG,EAAE,CAAC;QAUhB,YAAO,GAAG,GAAG,EAAE;YACb,OAAO;gBACL;oBACE,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,+BAA+B;oBAC1C,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;iBACnC;gBACD;oBACE,MAAM,EAAE,SAAS;oBACjB,SAAS,EAAE,8BAA8B;iBAC1C;aACF,CAAC;QACJ,CAAC,CAAC;QAEF,kBAAa,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC;YAClE,IAAG,CAAC,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC3B,kBAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;aACxB;YAED,IAAI,CAAC,UAAU,GAAG,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC;YACxC,IAAG,CAAC,kBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAClC,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC/B;YAED,8BAA8B;YAC9B,IAAA,wBAAQ,EAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAErD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzF,IAAG,CAAC,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO;aACR;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG;gBACrB,MAAM,EAAE,6CAA6C;gBACrD,OAAO,EAAE,6BAA6B;aACvC,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,CAAC;QAEF,SAAI,GAAG,GAAG,EAAE;YACV,kBAAE,CAAC,aAAa,CACd,IAAI,CAAC,UAAU,GAAG,eAAe,EACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CACtC,CAAC;QACJ,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"ResourcePak.js","sourceRoot":"","sources":["../src/ResourcePak.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Dependencies.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Config from "./Config";
|
|
2
2
|
import { execSync } from "child_process";
|
|
3
3
|
import { targets } from "./Build";
|
|
4
|
+
import { BuildStep } from "./types";
|
|
4
5
|
|
|
5
6
|
const execOptions = { stdio: "pipe" as const, shell: "/bin/bash", env: { ...process.env } };
|
|
6
7
|
const libEcsRepo = "https://github.com/metaverse-systems/libecs-cpp.git";
|
|
@@ -70,4 +71,37 @@ export const installLib = (config: Config, repo: string, installDir: string, tar
|
|
|
70
71
|
return false;
|
|
71
72
|
}
|
|
72
73
|
return true;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Returns an ordered array of BuildStep objects for installing missing libraries.
|
|
78
|
+
* Checks which libraries are missing and generates clone + build steps for each.
|
|
79
|
+
* Order: libecs-cpp first, then libthe-seed (compile-time dependency).
|
|
80
|
+
*/
|
|
81
|
+
export const getInstallSteps = (config: Config, target: string): BuildStep[] => {
|
|
82
|
+
const targetDir = targets[target];
|
|
83
|
+
const prefix = config.config.prefix + "/" + targetDir;
|
|
84
|
+
const steps: BuildStep[] = [];
|
|
85
|
+
|
|
86
|
+
const libraries: { name: string; repo: string; installDir: string; pkgConfigName: string }[] = [
|
|
87
|
+
{ name: "libecs-cpp", repo: libEcsRepo, installDir: "libecs-cpp", pkgConfigName: "ecs-cpp" },
|
|
88
|
+
{ name: "libthe-seed", repo: libTheSeedRepo, installDir: "libthe-seed", pkgConfigName: "the-seed" },
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
for (const lib of libraries) {
|
|
92
|
+
// Skip if already installed
|
|
93
|
+
if (checkLib(config, lib.pkgConfigName, target)) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const hostFlag = target !== "native" ? " --host=" + targetDir : "";
|
|
98
|
+
|
|
99
|
+
steps.push({ label: `clone ${lib.name}`, command: `git clone ${lib.repo}` });
|
|
100
|
+
steps.push({ label: `${lib.name} autogen`, command: `cd ${lib.installDir} && ./autogen.sh` });
|
|
101
|
+
steps.push({ label: `${lib.name} configure`, command: `cd ${lib.installDir} && ./configure --prefix=${prefix}${hostFlag}` });
|
|
102
|
+
steps.push({ label: `${lib.name} compile`, command: `cd ${lib.installDir} && make` });
|
|
103
|
+
steps.push({ label: `${lib.name} install`, command: `cd ${lib.installDir} && make install` });
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return steps;
|
|
73
107
|
};
|
package/src/ResourcePak.ts
CHANGED
|
@@ -68,8 +68,8 @@ class ResourcePak {
|
|
|
68
68
|
);
|
|
69
69
|
};
|
|
70
70
|
|
|
71
|
-
addResource = (name: string, filename: string) => {
|
|
72
|
-
this.packageDir = process.cwd();
|
|
71
|
+
addResource = (name: string, filename: string, packageDir?: string) => {
|
|
72
|
+
this.packageDir = packageDir ?? process.cwd();
|
|
73
73
|
this.package = JSON.parse(fs.readFileSync(this.packageDir + "/package.json").toString());
|
|
74
74
|
if (!this.package) {
|
|
75
75
|
return;
|
|
@@ -83,7 +83,8 @@ class ResourcePak {
|
|
|
83
83
|
this.package.resources = [];
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
const
|
|
86
|
+
const fullPath = this.packageDir + "/" + filename;
|
|
87
|
+
const stats = fs.statSync(fullPath);
|
|
87
88
|
this.package.resources.push({
|
|
88
89
|
name: name,
|
|
89
90
|
filename: filename,
|
|
@@ -92,8 +93,8 @@ class ResourcePak {
|
|
|
92
93
|
this.save();
|
|
93
94
|
};
|
|
94
95
|
|
|
95
|
-
build = () => {
|
|
96
|
-
this.packageDir = process.cwd();
|
|
96
|
+
build = (packageDir?: string) => {
|
|
97
|
+
this.packageDir = packageDir ?? process.cwd();
|
|
97
98
|
this.package = JSON.parse(fs.readFileSync(this.packageDir + "/package.json").toString());
|
|
98
99
|
if (!this.package) {
|
|
99
100
|
return;
|
|
@@ -121,7 +122,7 @@ class ResourcePak {
|
|
|
121
122
|
const [, name] = this.package.name.split("/");
|
|
122
123
|
fs.writeFileSync(this.packageDir + "/" + name + ".pak", JSON.stringify(header) + "\n");
|
|
123
124
|
this.package.resources.forEach((r) => {
|
|
124
|
-
fs.appendFileSync(name + ".pak", fs.readFileSync(r.filename));
|
|
125
|
+
fs.appendFileSync(this.packageDir + "/" + name + ".pak", fs.readFileSync(this.packageDir + "/" + r.filename));
|
|
125
126
|
});
|
|
126
127
|
};
|
|
127
128
|
}
|
package/test/ResourcePak.test.ts
CHANGED
|
@@ -17,12 +17,16 @@ describe("ResourcePak", () => {
|
|
|
17
17
|
beforeEach(() => {
|
|
18
18
|
tempDir = createTempDir();
|
|
19
19
|
const defaultConfig = {
|
|
20
|
-
prefix: tempDir,
|
|
21
|
-
scopes: {
|
|
20
|
+
prefix: tempDir,
|
|
21
|
+
scopes: {
|
|
22
|
+
"@test": {
|
|
23
|
+
author: { name: "Test Author", email: "test@test.com", url: "" }
|
|
24
|
+
}
|
|
25
|
+
}
|
|
22
26
|
};
|
|
23
27
|
fs.writeFileSync(path.join(tempDir, 'config.json'), JSON.stringify(defaultConfig));
|
|
24
28
|
config = new Config(tempDir);
|
|
25
|
-
rp = new ResourcePak(config
|
|
29
|
+
rp = new ResourcePak(config);
|
|
26
30
|
});
|
|
27
31
|
|
|
28
32
|
afterEach(() => {
|
|
@@ -30,40 +34,118 @@ describe("ResourcePak", () => {
|
|
|
30
34
|
});
|
|
31
35
|
|
|
32
36
|
it("should create a new package", () => {
|
|
33
|
-
|
|
34
|
-
rp.create(packageName);
|
|
37
|
+
rp.createPackage("@test", "my-pak");
|
|
35
38
|
expect(rp.package).toBeDefined();
|
|
36
|
-
expect(rp.package?.name).toBe(
|
|
37
|
-
|
|
39
|
+
expect(rp.package?.name).toBe("@test/my-pak");
|
|
40
|
+
expect(rp.package?.resources).toEqual([]);
|
|
41
|
+
expect(rp.packageDir).toBe(path.join(tempDir, "projects", "@test", "my-pak"));
|
|
42
|
+
expect(fs.existsSync(rp.packageDir)).toBe(true);
|
|
43
|
+
expect(fs.existsSync(path.join(rp.packageDir, "package.json"))).toBe(true);
|
|
38
44
|
});
|
|
39
45
|
|
|
40
|
-
it("should add a resource", () => {
|
|
41
|
-
|
|
42
|
-
rp.
|
|
46
|
+
it("should add a resource using process.cwd() by default", () => {
|
|
47
|
+
rp.createPackage("@test", "my-pak");
|
|
48
|
+
const pakDir = rp.packageDir;
|
|
43
49
|
|
|
44
|
-
|
|
50
|
+
// Create a dummy resource file in the pak directory
|
|
45
51
|
const fileName = "testFile.txt";
|
|
46
|
-
|
|
47
|
-
const filePath = path.join(tempDir, fileName);
|
|
52
|
+
const filePath = path.join(pakDir, fileName);
|
|
48
53
|
fs.writeFileSync(filePath, "Dummy content");
|
|
49
|
-
|
|
54
|
+
|
|
55
|
+
// Use the packageDir parameter (since process.cwd() won't match pakDir in tests)
|
|
56
|
+
rp.addResource("testResource", fileName, pakDir);
|
|
50
57
|
|
|
51
58
|
expect(rp.package?.resources).toContainEqual(expect.objectContaining({
|
|
52
|
-
name:
|
|
53
|
-
filename:
|
|
54
|
-
// size: depends on the content written
|
|
59
|
+
name: "testResource",
|
|
60
|
+
filename: fileName,
|
|
55
61
|
}));
|
|
56
|
-
|
|
62
|
+
expect(rp.package!.resources!.length).toBe(1);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("should add a resource with explicit packageDir parameter", () => {
|
|
66
|
+
rp.createPackage("@test", "my-pak");
|
|
67
|
+
const pakDir = rp.packageDir;
|
|
68
|
+
|
|
69
|
+
const fileName = "asset.png";
|
|
70
|
+
const filePath = path.join(pakDir, fileName);
|
|
71
|
+
fs.writeFileSync(filePath, "PNG data");
|
|
72
|
+
|
|
73
|
+
rp.addResource("myAsset", fileName, pakDir);
|
|
74
|
+
|
|
75
|
+
const savedPkg = JSON.parse(fs.readFileSync(path.join(pakDir, "package.json")).toString());
|
|
76
|
+
expect(savedPkg.resources).toHaveLength(1);
|
|
77
|
+
expect(savedPkg.resources[0].name).toBe("myAsset");
|
|
78
|
+
expect(savedPkg.resources[0].filename).toBe(fileName);
|
|
79
|
+
expect(savedPkg.resources[0].size).toBeGreaterThan(0);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it("should not add a duplicate resource name", () => {
|
|
83
|
+
rp.createPackage("@test", "my-pak");
|
|
84
|
+
const pakDir = rp.packageDir;
|
|
85
|
+
|
|
86
|
+
const file1 = path.join(pakDir, "file1.txt");
|
|
87
|
+
const file2 = path.join(pakDir, "file2.txt");
|
|
88
|
+
fs.writeFileSync(file1, "content1");
|
|
89
|
+
fs.writeFileSync(file2, "content2");
|
|
90
|
+
|
|
91
|
+
rp.addResource("dup", "file1.txt", pakDir);
|
|
92
|
+
rp.addResource("dup", "file2.txt", pakDir);
|
|
93
|
+
|
|
94
|
+
const savedPkg = JSON.parse(fs.readFileSync(path.join(pakDir, "package.json")).toString());
|
|
95
|
+
expect(savedPkg.resources).toHaveLength(1);
|
|
96
|
+
expect(savedPkg.resources[0].filename).toBe("file1.txt");
|
|
57
97
|
});
|
|
58
98
|
|
|
59
99
|
it("should save package configuration", () => {
|
|
60
|
-
|
|
61
|
-
rp.
|
|
62
|
-
rp.
|
|
63
|
-
const packageJsonPath = path.join(tempDir, "package.json");
|
|
100
|
+
rp.createPackage("@test", "my-pak");
|
|
101
|
+
rp.save();
|
|
102
|
+
const packageJsonPath = path.join(rp.packageDir, "package.json");
|
|
64
103
|
expect(fs.existsSync(packageJsonPath)).toBe(true);
|
|
65
|
-
|
|
104
|
+
const saved = JSON.parse(fs.readFileSync(packageJsonPath).toString());
|
|
105
|
+
expect(saved.name).toBe("@test/my-pak");
|
|
66
106
|
});
|
|
67
107
|
|
|
68
|
-
|
|
108
|
+
it("should build a .pak file with explicit packageDir", () => {
|
|
109
|
+
rp.createPackage("@test", "my-pak");
|
|
110
|
+
const pakDir = rp.packageDir;
|
|
111
|
+
|
|
112
|
+
// Add two resources
|
|
113
|
+
const file1 = path.join(pakDir, "res1.txt");
|
|
114
|
+
const file2 = path.join(pakDir, "res2.dat");
|
|
115
|
+
fs.writeFileSync(file1, "Hello resource 1");
|
|
116
|
+
fs.writeFileSync(file2, "Resource 2 data");
|
|
117
|
+
|
|
118
|
+
rp.addResource("resource1", "res1.txt", pakDir);
|
|
119
|
+
rp.addResource("resource2", "res2.dat", pakDir);
|
|
120
|
+
|
|
121
|
+
// Build with explicit packageDir
|
|
122
|
+
rp.build(pakDir);
|
|
123
|
+
|
|
124
|
+
const pakFile = path.join(pakDir, "my-pak.pak");
|
|
125
|
+
expect(fs.existsSync(pakFile)).toBe(true);
|
|
126
|
+
|
|
127
|
+
// Verify the .pak starts with a 10-digit header size
|
|
128
|
+
const content = fs.readFileSync(pakFile).toString();
|
|
129
|
+
const headerSizeStr = content.substring(0, 10);
|
|
130
|
+
expect(headerSizeStr).toMatch(/^\d{10}$/);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("should build using packageDir parameter instead of cwd", () => {
|
|
134
|
+
rp.createPackage("@test", "build-test");
|
|
135
|
+
const pakDir = rp.packageDir;
|
|
136
|
+
|
|
137
|
+
const file = path.join(pakDir, "data.bin");
|
|
138
|
+
fs.writeFileSync(file, "binary data");
|
|
139
|
+
rp.addResource("data", "data.bin", pakDir);
|
|
140
|
+
|
|
141
|
+
// Build with explicit pakDir (not relying on process.cwd())
|
|
142
|
+
rp.build(pakDir);
|
|
143
|
+
|
|
144
|
+
const pakFile = path.join(pakDir, "build-test.pak");
|
|
145
|
+
expect(fs.existsSync(pakFile)).toBe(true);
|
|
146
|
+
|
|
147
|
+
// Read the pak and verify it contains header JSON + resource data
|
|
148
|
+
const pakContent = fs.readFileSync(pakFile);
|
|
149
|
+
expect(pakContent.length).toBeGreaterThan(11); // header size + newline + content
|
|
150
|
+
});
|
|
69
151
|
});
|