@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.
@@ -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[];
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"Dependencies.js","sourceRoot":"","sources":["../src/Dependencies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Dependencies.js","sourceRoot":"","sources":["../src/Dependencies.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -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 stats = fs_extra_1.default.statSync(filename);
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;
@@ -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;YAC/C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,OAAO;aACR;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBAC1B,IAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;oBACtD,OAAO;iBACR;aACF;iBAAM;gBACL,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;aAC7B;YAED,MAAM,KAAK,GAAG,kBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,CAAC;QAEF,UAAK,GAAG,GAAG,EAAE;YACX,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,OAAO;aACR;YAED,0EAA0E;YAC1E,WAAW;YACX,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjD,OAAO;oBACL,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,UAAU,EAAE,CAAC,CAAC,UAAU;iBACzB,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG;gBACb,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;qBAClC,MAAM,CAAC,QAAQ,EAAE;qBACjB,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;gBACpB,SAAS,EAAE,SAAS;aACrB,CAAC;YACF,MAAM,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAErF,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9C,kBAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACvF,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnC,kBAAE,CAAC,cAAc,CAAC,IAAI,GAAG,MAAM,EAAE,kBAAE,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAhHA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CA+GF;AAED,kBAAe,WAAW,CAAC"}
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,UAAmB,EAAE,EAAE;YACpE,IAAI,CAAC,UAAU,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,OAAO;aACR;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBAC1B,IAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;oBACtD,OAAO;iBACR;aACF;iBAAM;gBACL,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;aAC7B;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,QAAQ,CAAC;YAClD,MAAM,KAAK,GAAG,kBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,CAAC;QAEF,UAAK,GAAG,CAAC,UAAmB,EAAE,EAAE;YAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,OAAO;aACR;YAED,0EAA0E;YAC1E,WAAW;YACX,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjD,OAAO;oBACL,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,UAAU,EAAE,CAAC,CAAC,UAAU;iBACzB,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG;gBACb,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;qBAClC,MAAM,CAAC,QAAQ,EAAE;qBACjB,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;gBACpB,SAAS,EAAE,SAAS;aACrB,CAAC;YACF,MAAM,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAErF,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9C,kBAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACvF,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnC,kBAAE,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,EAAE,kBAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAjHA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CAgHF;AAED,kBAAe,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metaverse-systems/the-seed",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "The Seed",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -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
  };
@@ -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 stats = fs.statSync(filename);
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
  }
@@ -17,12 +17,16 @@ describe("ResourcePak", () => {
17
17
  beforeEach(() => {
18
18
  tempDir = createTempDir();
19
19
  const defaultConfig = {
20
- prefix: tempDir, // or any other default values your Config expects
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, tempDir);
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
- const packageName = "@test/package";
34
- rp.create(packageName);
37
+ rp.createPackage("@test", "my-pak");
35
38
  expect(rp.package).toBeDefined();
36
- expect(rp.package?.name).toBe(packageName);
37
- // Add more assertions as necessary
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
- const packageName = "@test/package";
42
- rp.create(packageName);
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
- const resourceName = "testResource";
50
+ // Create a dummy resource file in the pak directory
45
51
  const fileName = "testFile.txt";
46
- // Creating a dummy file to add
47
- const filePath = path.join(tempDir, fileName);
52
+ const filePath = path.join(pakDir, fileName);
48
53
  fs.writeFileSync(filePath, "Dummy content");
49
- rp.addResource(resourceName, filePath);
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: resourceName,
53
- filename: tempDir + "/" + fileName,
54
- // size: depends on the content written
59
+ name: "testResource",
60
+ filename: fileName,
55
61
  }));
56
- // Add more assertions as necessary
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
- const packageName = "@test/package";
61
- rp.create(packageName);
62
- rp.savePackage();
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
- // Further assertions on the contents of package.json can be added
104
+ const saved = JSON.parse(fs.readFileSync(packageJsonPath).toString());
105
+ expect(saved.name).toBe("@test/my-pak");
66
106
  });
67
107
 
68
- // Add more tests for other methods, e.g., build(), as needed.
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
  });