purus 0.2.0 → 0.3.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-ja.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Logo](https://raw.githubusercontent.com/otoneko1102/purus/refs/heads/main/logo.png)](https://purus.work)
4
4
 
5
- [English](https://raw.githubusercontent.com/otoneko1102/purus/refs/heads/main/README.md) | **日本語**
5
+ [English](https://github.com/otoneko1102/purus#readme) | **日本語**
6
6
 
7
7
  </div>
8
8
 
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Logo](https://raw.githubusercontent.com/otoneko1102/purus/refs/heads/main/logo.png)](https://purus.work)
4
4
 
5
- **English** | [日本語](https://raw.githubusercontent.com/otoneko1102/purus/refs/heads/main/README-ja.md)
5
+ **English** | [日本語](https://github.com/otoneko1102/purus/blob/main/README-ja.md)
6
6
 
7
7
  </div>
8
8
 
@@ -55,4 +55,4 @@ otoneko. https://github.com/otoneko1102
55
55
 
56
56
  ## License
57
57
 
58
- Distributed under the Apache 2.0 License. See [LICENSE](https://raw.githubusercontent.com/otoneko1102/purus/refs/heads/main/LICENSE) for more information.
58
+ Distributed under the Apache 2.0 License. See [LICENSE](https://github.com/otoneko1102/purus/blob/main/LICENSE) for more information.
package/bin/purus.js CHANGED
@@ -40,6 +40,11 @@ switch (cmd) {
40
40
  case "run":
41
41
  require("../lib/run-wrapper.js");
42
42
  break;
43
+ case "version":
44
+ case "--version":
45
+ case "-v":
46
+ console.log(`purus v${VERSION}`);
47
+ break;
43
48
  case "help":
44
49
  case "--help":
45
50
  case "-h":
@@ -28,8 +28,27 @@ for (let i = 0; i < args.length; i++) {
28
28
  }
29
29
 
30
30
  if (file) {
31
- // Single file - delegate to MoonBit compiler
32
- require("./purus-compiler.js");
31
+ // Single file - handle directly via compile API
32
+ const source = fs.readFileSync(file, "utf8");
33
+ const useHeader = !noHeader;
34
+ const js = compile(source, { header: useHeader });
35
+
36
+ if (toStdout) {
37
+ process.stdout.write(js);
38
+ } else {
39
+ let ext = ".js";
40
+ if (file.endsWith(".cpurus")) ext = ".cjs";
41
+ else if (file.endsWith(".mpurus")) ext = ".mjs";
42
+ const base = file.replace(/\.(c|m)?purus$/, "");
43
+ const outputFile = output
44
+ ? path.join(path.resolve(output), path.basename(base) + ext)
45
+ : base + ext;
46
+ if (output) {
47
+ fs.mkdirSync(path.resolve(output), { recursive: true });
48
+ }
49
+ fs.writeFileSync(outputFile, js);
50
+ console.log(`Compiled ${file} -> ${outputFile}`);
51
+ }
33
52
  } else {
34
53
  let entryDir;
35
54
  let outputDir;
package/lib/create.js CHANGED
@@ -154,9 +154,9 @@ node_modules/
154
154
  if (yesFlag) {
155
155
  installDeps = true;
156
156
  } else {
157
- const answer = await question(rl, "\nInstall dependencies? (y/N) ");
157
+ const answer = await question(rl, "\nInstall dependencies? (Y/n) ");
158
158
  installDeps =
159
- answer.toLowerCase() === "y" || answer.toLowerCase() === "yes";
159
+ answer === "" || answer.toLowerCase() === "y" || answer.toLowerCase() === "yes";
160
160
  }
161
161
 
162
162
  if (installDeps) {
@@ -616,7 +616,6 @@ function $64$username$47$core$46$MatchBody$BlockBody(param0) {
616
616
  $64$username$47$core$46$MatchBody$BlockBody.prototype.$tag = 1;
617
617
  $64$username$47$core$46$MatchBody$BlockBody.prototype.$name = "BlockBody";
618
618
  const _M0FP095_40moonbitlang_2fcore_2fbuiltin_2eStringBuilder_24as_24_40moonbitlang_2fcore_2fbuiltin_2eLogger = { method_0: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string, method_1: _M0IP016_24default__implP311moonbitlang4core7builtin6Logger16write__substringGRP311moonbitlang4core7builtin13StringBuilderE, method_2: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__view, method_3: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char };
619
- const _M0FP48username4core3cmd4main7version = "0.2.0";
620
619
  const _M0FP311moonbitlang4core7builtin33brute__force__find_2econstr_2f209 = 0;
621
620
  const _M0FP311moonbitlang4core7builtin43boyer__moore__horspool__find_2econstr_2f195 = 0;
622
621
  function _M0FP311moonbitlang4core5abort5abortGRP311moonbitlang4core7builtin9ArrayViewGsEE(msg) {
@@ -1244,10 +1243,10 @@ function _M0MP311moonbitlang4core6string6String4view(self, start_offset$46$opt,
1244
1243
  function _M0MP311moonbitlang4core5array9ArrayView6lengthGsE(self) {
1245
1244
  return self.end - self.start | 0;
1246
1245
  }
1247
- function _M0MP311moonbitlang4core5array9ArrayView6lengthGyE(self) {
1246
+ function _M0MP311moonbitlang4core5array9ArrayView6lengthGcE(self) {
1248
1247
  return self.end - self.start | 0;
1249
1248
  }
1250
- function _M0MP311moonbitlang4core5array9ArrayView6lengthGcE(self) {
1249
+ function _M0MP311moonbitlang4core5array9ArrayView6lengthGyE(self) {
1251
1250
  return self.end - self.start | 0;
1252
1251
  }
1253
1252
  function _M0MP311moonbitlang4core6string6String11from__array(chars) {
@@ -1504,15 +1503,15 @@ function _M0MP311moonbitlang4core5array5Array4pushGRP28username4core4StmtE(self,
1504
1503
  function _M0MP311moonbitlang4core5array5Array4pushGcE(self, value) {
1505
1504
  _M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
1506
1505
  }
1507
- function _M0MP311moonbitlang4core5array5Array4pushGyE(self, value) {
1508
- _M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
1509
- }
1510
1506
  function _M0MP311moonbitlang4core5array5Array4pushGRP28username4core10ElIfBranchE(self, value) {
1511
1507
  _M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
1512
1508
  }
1513
1509
  function _M0MP311moonbitlang4core5array5Array4pushGsE(self, value) {
1514
1510
  _M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
1515
1511
  }
1512
+ function _M0MP311moonbitlang4core5array5Array4pushGyE(self, value) {
1513
+ _M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
1514
+ }
1516
1515
  function _M0MP311moonbitlang4core5array5Array4pushGRP28username4core4ExprE(self, value) {
1517
1516
  _M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
1518
1517
  }
@@ -7575,26 +7574,6 @@ function _M0MP28username4core9JsCodegen16generate_2einner(self, stmts, header, s
7575
7574
  }
7576
7575
  return _M0MP311moonbitlang4core7builtin13StringBuilder10to__string(self.buf);
7577
7576
  }
7578
- function _M0FP48username4core3cmd4main11print__help() {
7579
- _M0FP311moonbitlang4core7builtin7printlnGsE(`purus v${_M0FP48username4core3cmd4main7version} - A language that compiles to JavaScript`);
7580
- _M0FP311moonbitlang4core7builtin7printlnGsE("");
7581
- _M0FP311moonbitlang4core7builtin7printlnGsE("Usage:");
7582
- _M0FP311moonbitlang4core7builtin7printlnGsE(" purus build <file> Compile to JavaScript");
7583
- _M0FP311moonbitlang4core7builtin7printlnGsE(" .purus -> .js");
7584
- _M0FP311moonbitlang4core7builtin7printlnGsE(" .cpurus -> .cjs (CommonJS)");
7585
- _M0FP311moonbitlang4core7builtin7printlnGsE(" .mpurus -> .mjs (ES Module)");
7586
- _M0FP311moonbitlang4core7builtin7printlnGsE(" purus build --no-header <file> Compile without header comment");
7587
- _M0FP311moonbitlang4core7builtin7printlnGsE(" purus check <file.purus> Syntax check only");
7588
- _M0FP311moonbitlang4core7builtin7printlnGsE(" purus new <name> Create a new project");
7589
- _M0FP311moonbitlang4core7builtin7printlnGsE(" purus init Initialize project in current directory");
7590
- _M0FP311moonbitlang4core7builtin7printlnGsE(" purus version Show version");
7591
- _M0FP311moonbitlang4core7builtin7printlnGsE(" purus help Show this help");
7592
- _M0FP311moonbitlang4core7builtin7printlnGsE("");
7593
- _M0FP311moonbitlang4core7builtin7printlnGsE("Aliases: compile = build, create = new");
7594
- }
7595
- function _M0FP48username4core3cmd4main14print__version() {
7596
- _M0FP311moonbitlang4core7builtin7printlnGsE(`purus v${_M0FP48username4core3cmd4main7version}`);
7597
- }
7598
7577
  function _M0FP48username4core3cmd4main10cmd__build(args) {
7599
7578
  const file = { val: "" };
7600
7579
  const no_header = { val: false };
@@ -7685,7 +7664,7 @@ function _M0FP48username4core3cmd4main10cmd__build(args) {
7685
7664
  }
7686
7665
  }
7687
7666
  const stmts = _M0MP28username4core6Parser5parse(_M0MP28username4core6Parser3new(filtered));
7688
- const header = no_header.val ? "" : `// Generated by Purus ${_M0FP48username4core3cmd4main7version}`;
7667
+ const header = no_header.val ? "" : "// Generated by Purus 0.3.0";
7689
7668
  const js = _M0MP28username4core9JsCodegen16generate_2einner(_M0MP28username4core9JsCodegen3new(), stmts, header, shebang.val);
7690
7669
  if (to_stdout.val) {
7691
7670
  _M0FP311moonbitlang4core7builtin7printlnGsE(js);
@@ -7809,118 +7788,6 @@ function _M0FP48username4core3cmd4main10cmd__check(file) {
7809
7788
  _M0MP28username4core6Parser5parse(_M0MP28username4core6Parser3new(tokens));
7810
7789
  _M0FP311moonbitlang4core7builtin7printlnGsE(`OK: ${file}`);
7811
7790
  }
7812
- function _M0FP48username4core3cmd4main8cmd__new(name) {
7813
- if (name === "") {
7814
- _M0FP311moonbitlang4core7builtin7printlnGsE("Error: project name required");
7815
- _M0FP311moonbitlang4core7builtin7printlnGsE("Usage: purus new <name>");
7816
- return undefined;
7817
- }
7818
- if (_M0FP311moonbitlang1x2fs12path__exists(name)) {
7819
- _M0FP311moonbitlang4core7builtin7printlnGsE(`Error: directory '${name}' already exists`);
7820
- return undefined;
7821
- }
7822
- let _try_err;
7823
- _L: {
7824
- _L$2: {
7825
- const _bind = _M0FP311moonbitlang1x2fs11create__dir(name);
7826
- if (_bind.$tag === 1) {
7827
- const _ok = _bind;
7828
- _ok._0;
7829
- } else {
7830
- const _err = _bind;
7831
- _try_err = _err._0;
7832
- break _L$2;
7833
- }
7834
- break _L;
7835
- }
7836
- let msg;
7837
- _L$3: {
7838
- const _IOError = _try_err;
7839
- const _msg = _IOError._0;
7840
- msg = _msg;
7841
- break _L$3;
7842
- }
7843
- _M0FP311moonbitlang4core7builtin7printlnGsE(`Error: cannot create directory: ${msg}`);
7844
- return undefined;
7845
- }
7846
- let _try_err$2;
7847
- _L$2: {
7848
- _L$3: {
7849
- const _bind = _M0FP311moonbitlang1x2fs11create__dir(`${name}/src`);
7850
- if (_bind.$tag === 1) {
7851
- const _ok = _bind;
7852
- _ok._0;
7853
- } else {
7854
- const _err = _bind;
7855
- _try_err$2 = _err._0;
7856
- break _L$3;
7857
- }
7858
- break _L$2;
7859
- }
7860
- let msg;
7861
- _L$4: {
7862
- const _IOError = _try_err$2;
7863
- const _msg = _IOError._0;
7864
- msg = _msg;
7865
- break _L$4;
7866
- }
7867
- _M0FP311moonbitlang4core7builtin7printlnGsE(`Error: cannot create src directory: ${msg}`);
7868
- return undefined;
7869
- }
7870
- const main_purus = "-- main.purus\n\nconst message be ///Hello, World///\nconsole.log[message]\n";
7871
- let _try_err$3;
7872
- _L$3: {
7873
- _L$4: {
7874
- const _bind = _M0FP311moonbitlang1x2fs31write__string__to__file_2einner(`${name}/src/main.purus`, main_purus, "utf8");
7875
- if (_bind.$tag === 1) {
7876
- const _ok = _bind;
7877
- _ok._0;
7878
- } else {
7879
- const _err = _bind;
7880
- _try_err$3 = _err._0;
7881
- break _L$4;
7882
- }
7883
- break _L$3;
7884
- }
7885
- let msg;
7886
- _L$5: {
7887
- const _IOError = _try_err$3;
7888
- const _msg = _IOError._0;
7889
- msg = _msg;
7890
- break _L$5;
7891
- }
7892
- _M0FP311moonbitlang4core7builtin7printlnGsE(`Error: ${msg}`);
7893
- return undefined;
7894
- }
7895
- const gitignore = "*.js\nnode_modules/\n";
7896
- let _try_err$4;
7897
- _L$4: {
7898
- _L$5: {
7899
- const _bind = _M0FP311moonbitlang1x2fs31write__string__to__file_2einner(`${name}/.gitignore`, gitignore, "utf8");
7900
- if (_bind.$tag === 1) {
7901
- const _ok = _bind;
7902
- _ok._0;
7903
- } else {
7904
- const _err = _bind;
7905
- _try_err$4 = _err._0;
7906
- break _L$5;
7907
- }
7908
- break _L$4;
7909
- }
7910
- let msg;
7911
- _L$6: {
7912
- const _IOError = _try_err$4;
7913
- const _msg = _IOError._0;
7914
- msg = _msg;
7915
- break _L$6;
7916
- }
7917
- _M0FP311moonbitlang4core7builtin7printlnGsE(`Error: ${msg}`);
7918
- return undefined;
7919
- }
7920
- _M0FP311moonbitlang4core7builtin7printlnGsE(`Created project '${name}'`);
7921
- _M0FP311moonbitlang4core7builtin7printlnGsE(` ${name}/src/main.purus`);
7922
- _M0FP311moonbitlang4core7builtin7printlnGsE(` ${name}/.gitignore`);
7923
- }
7924
7791
  function _M0FP48username4core3cmd4main9cmd__init() {
7925
7792
  if (!_M0FP311moonbitlang1x2fs12path__exists("src")) {
7926
7793
  let _try_err;
@@ -7980,71 +7847,32 @@ function _M0FP48username4core3cmd4main9cmd__init() {
7980
7847
  (() => {
7981
7848
  const args = _M0FP311moonbitlang1x3sys14get__cli__args();
7982
7849
  if (args.length < 2) {
7983
- _M0FP48username4core3cmd4main11print__help();
7984
7850
  return;
7985
7851
  }
7986
7852
  const cmd = _M0MP311moonbitlang4core5array5Array2atGsE(args, 1);
7987
7853
  _L: {
7988
- _L$2: {
7989
- _L$3: {
7990
- _L$4: {
7991
- switch (cmd) {
7992
- case "build": {
7993
- break _L$4;
7994
- }
7995
- case "compile": {
7996
- break _L$4;
7997
- }
7998
- case "check": {
7999
- const file = args.length > 2 ? _M0MP311moonbitlang4core5array5Array2atGsE(args, 2) : "";
8000
- _M0FP48username4core3cmd4main10cmd__check(file);
8001
- return;
8002
- }
8003
- case "new": {
8004
- break _L$3;
8005
- }
8006
- case "create": {
8007
- break _L$3;
8008
- }
8009
- case "init": {
8010
- _M0FP48username4core3cmd4main9cmd__init();
8011
- return;
8012
- }
8013
- case "version": {
8014
- break _L$2;
8015
- }
8016
- case "--version": {
8017
- break _L$2;
8018
- }
8019
- case "-v": {
8020
- break _L$2;
8021
- }
8022
- case "help": {
8023
- break _L;
8024
- }
8025
- case "--help": {
8026
- break _L;
8027
- }
8028
- case "-h": {
8029
- break _L;
8030
- }
8031
- default: {
8032
- _M0FP311moonbitlang4core7builtin7printlnGsE(`Unknown command: ${cmd}`);
8033
- _M0FP48username4core3cmd4main11print__help();
8034
- return;
8035
- }
8036
- }
8037
- }
8038
- _M0FP48username4core3cmd4main10cmd__build(_M0MP311moonbitlang4core5array9ArrayView9to__arrayGsE(_M0MP311moonbitlang4core5array5Array12view_2einnerGsE(args, 2, undefined)));
7854
+ switch (cmd) {
7855
+ case "build": {
7856
+ break _L;
7857
+ }
7858
+ case "compile": {
7859
+ break _L;
7860
+ }
7861
+ case "check": {
7862
+ const file = args.length > 2 ? _M0MP311moonbitlang4core5array5Array2atGsE(args, 2) : "";
7863
+ _M0FP48username4core3cmd4main10cmd__check(file);
7864
+ return;
7865
+ }
7866
+ case "init": {
7867
+ _M0FP48username4core3cmd4main9cmd__init();
7868
+ return;
7869
+ }
7870
+ default: {
7871
+ _M0FP311moonbitlang4core7builtin7printlnGsE(`Unknown command: ${cmd}`);
8039
7872
  return;
8040
7873
  }
8041
- const name = args.length > 2 ? _M0MP311moonbitlang4core5array5Array2atGsE(args, 2) : "";
8042
- _M0FP48username4core3cmd4main8cmd__new(name);
8043
- return;
8044
7874
  }
8045
- _M0FP48username4core3cmd4main14print__version();
8046
- return;
8047
7875
  }
8048
- _M0FP48username4core3cmd4main11print__help();
7876
+ _M0FP48username4core3cmd4main10cmd__build(_M0MP311moonbitlang4core5array9ArrayView9to__arrayGsE(_M0MP311moonbitlang4core5array5Array12view_2einnerGsE(args, 2, undefined)));
8049
7877
  })();
8050
7878
  //# sourceMappingURL=main.js.map
package/lib/purus-core.js CHANGED
@@ -30,14 +30,16 @@ function compile(source, options = {}) {
30
30
  const fs = require("fs");
31
31
  try {
32
32
  fs.writeFileSync(tmpFile, source, "utf8");
33
- const args = ["build", "--stdout"];
34
- if (!header) args.push("--no-header");
33
+ const args = ["build", "--stdout", "--no-header"];
35
34
  args.push(tmpFile);
36
35
  const result = execFileSync(process.execPath, [COMPILER_JS, ...args], {
37
36
  encoding: "utf8",
38
37
  stdio: ["pipe", "pipe", "pipe"],
39
38
  timeout: 30000,
40
39
  });
40
+ if (header) {
41
+ return `// Generated by Purus ${VERSION}\n${result}`;
42
+ }
41
43
  return result;
42
44
  } finally {
43
45
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "purus",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "A language that compiles to JavaScript — no Shift key required",
5
5
  "main": "index.js",
6
6
  "module": "index.mjs",