feat: some cleanup

This commit is contained in:
TopchetoEU 2023-09-09 18:55:20 +03:00
parent 3824d11c97
commit 692fae4049
Signed by: topchetoeu
GPG Key ID: 6531B8583E5F6ED4
12 changed files with 15 additions and 282 deletions

View File

@ -18,7 +18,7 @@ jobs:
repository: 'java-jscript'
- name: "Build"
run: |
ls -R; cd java-jscript; node ./build.js release ${{ github.ref }}
cd java-jscript; node ./build.js release ${{ github.ref }}
- uses: "marvinpinto/action-automatic-releases@latest"
with:

10
.gitignore vendored
View File

@ -1,9 +1,11 @@
.vscode
.gradle
.ignore
out
build
bin
dst
/out
/build
/bin
/dst
/*.js
!/build.js
/dead-code
/Metadata.java

View File

@ -1,9 +1,14 @@
const { spawn } = require('child_process');
const fs = require('fs/promises');
const pt = require('path');
const conf = require('./meta');
const { argv } = require('process');
conf.version ??= argv[3];
const conf = {
name: "java-jscript",
author: "TopchetoEU",
javahome: "",
version: argv[3]
};
if (conf.version.startsWith('refs/tags/')) conf.version = conf.version.substring(10);
if (conf.version.startsWith('v')) conf.version = conf.version.substring(1);

View File

@ -1,5 +0,0 @@
{
"name": "java-jscript",
"author": "TopchetoEU",
"javahome": ""
}

View File

@ -1,22 +0,0 @@
package me.topchetoeu.jscript.filesystem;
import java.io.IOException;
public interface File {
int read(byte[] buff) throws IOException;
void write(byte[] buff) throws IOException;
long tell() throws IOException;
void seek(long offset, int pos) throws IOException;
void close() throws IOException;
Permissions perms();
default String readToString() throws IOException {
seek(0, 2);
long len = tell();
if (len < 0) return null;
seek(0, 0);
byte[] res = new byte[(int)len];
if (read(res) < 0) return null;
return new String(res);
}
}

View File

@ -1,17 +0,0 @@
package me.topchetoeu.jscript.filesystem;
import java.io.IOException;
import java.nio.file.Path;
public interface Filesystem extends PermissionsProvider {
public static enum EntryType {
NONE,
FILE,
FOLDER,
}
File open(Path path) throws IOException;
EntryType type(Path path);
boolean mkdir(Path path);
boolean rm(Path path) throws IOException;
}

View File

@ -1,27 +0,0 @@
package me.topchetoeu.jscript.filesystem;
import java.io.IOException;
public class InaccessibleFile implements File {
@Override
public int read(byte[] buff) throws IOException {
return -1;
}
@Override
public void write(byte[] buff) throws IOException {
}
@Override
public long tell() throws IOException {
return -1;
}
@Override
public void seek(long offset, int pos) throws IOException {
}
@Override
public void close() throws IOException {
}
@Override
public Permissions perms() {
return Permissions.NONE;
}
}

View File

@ -1,51 +0,0 @@
package me.topchetoeu.jscript.filesystem;
import java.io.IOException;
public class MemoryFile implements File {
public byte[] data;
private int ptr = 0;
@Override
public void close() {
data = null;
ptr = -1;
}
@Override
public int read(byte[] buff) throws IOException {
if (data == null) return -1;
if (ptr == data.length) return -1;
int n = Math.min(buff.length, data.length - ptr);
System.arraycopy(data, ptr, buff, 0, n);
return n;
}
@Override
public void seek(long offset, int pos) throws IOException {
if (data == null) return;
if (pos == 0) ptr = (int)offset;
else if (pos == 1) ptr += (int)offset;
else ptr = data.length - (int)offset;
ptr = (int)Math.max(Math.min(ptr, data.length), 0);
}
@Override
public long tell() throws IOException {
if (data == null) return -1;
return ptr;
}
@Override
public void write(byte[] buff) throws IOException { }
@Override
public Permissions perms() {
if (data == null) return Permissions.NONE;
else return Permissions.READ;
}
public MemoryFile(byte[] data) {
this.data = data;
}
}

View File

@ -1,17 +0,0 @@
package me.topchetoeu.jscript.filesystem;
public enum Permissions {
NONE("", false, false),
READ("r", true, false),
READ_WRITE("rw", true, true);
public final String readMode;
public final boolean readable;
public final boolean writable;
private Permissions(String mode, boolean r, boolean w) {
this.readMode = mode;
this.readable = r;
this.writable = w;
}
}

View File

@ -1,7 +0,0 @@
package me.topchetoeu.jscript.filesystem;
import java.nio.file.Path;
public interface PermissionsProvider {
Permissions perms(Path file);
}

View File

@ -1,53 +0,0 @@
package me.topchetoeu.jscript.filesystem;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.file.Path;
public class PhysicalFile implements File {
private RandomAccessFile file;
private Permissions perms;
@Override
public int read(byte[] buff) throws IOException {
if (!perms.readable) return -1;
return file.read(buff);
}
@Override
public void write(byte[] buff) throws IOException {
if (!perms.writable) return;
file.write(buff);
}
@Override
public long tell() throws IOException {
if (!perms.readable) return -1;
return file.getFilePointer();
}
@Override
public void seek(long offset, int pos) throws IOException {
if (!perms.readable) return;
if (pos == 0) file.seek(offset);
else if (pos == 1) file.seek(tell() + offset);
else file.seek(file.length() + offset);
}
@Override
public void close() throws IOException {
if (!perms.readable) return;
file.close();
file = null;
perms = Permissions.NONE;
}
@Override
public Permissions perms() {
return perms;
}
public PhysicalFile(Path path, Permissions perms) throws IOException {
if (!path.toFile().canWrite() && perms.writable) perms = Permissions.READ;
if (!path.toFile().canRead() && perms.readable) perms = Permissions.NONE;
this.perms = perms;
if (perms == Permissions.NONE) this.file = null;
else this.file = new RandomAccessFile(path.toString(), perms.readMode);
}
}

View File

@ -1,75 +0,0 @@
package me.topchetoeu.jscript.filesystem;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Collectors;
public class PhysicalFilesystem implements Filesystem {
public final Path root;
public final PermissionsProvider perms;
private static Path joinPaths(Path root, Path file) {
if (file.isAbsolute()) file = file.getRoot().relativize(file);
file = file.normalize();
while (true) {
if (file.startsWith("..")) file = file.subpath(1, file.getNameCount());
else if (file.startsWith(".")) file = file.subpath(1, file.getNameCount());
else break;
}
return Path.of(root.toString(), file.toString());
}
@Override
public boolean mkdir(Path path) {
if (!perms(path).writable) return false;
path = joinPaths(root, path);
return path.toFile().mkdirs();
}
@Override
public File open(Path path) throws IOException {
var perms = perms(path);
if (perms == Permissions.NONE) return new InaccessibleFile();
path = joinPaths(root, path);
if (path.toFile().isDirectory()) {
return new MemoryFile(String.join("\n", Files.list(path).map(Path::toString).collect(Collectors.toList())).getBytes());
}
else if (path.toFile().isFile()) {
return new PhysicalFile(path, perms);
}
else return new InaccessibleFile();
}
@Override
public boolean rm(Path path) {
if (!perms(path).writable) return false;
return joinPaths(root, path).toFile().delete();
}
@Override
public EntryType type(Path path) {
if (!perms(path).readable) return EntryType.NONE;
path = joinPaths(root, path);
if (!path.toFile().exists()) return EntryType.NONE;
if (path.toFile().isFile()) return EntryType.FILE;
else return EntryType.FOLDER;
}
@Override
public Permissions perms(Path path) {
path = joinPaths(root, path);
var res = perms.perms(path);
if (!path.toFile().canWrite() && res.writable) res = Permissions.READ;
if (!path.toFile().canRead() && res.readable) res = Permissions.NONE;
return res;
}
public PhysicalFilesystem(Path root, PermissionsProvider perms) {
this.root = root;
this.perms = perms;
}
}