public void Parse_returns_parsed_object()
        {
            var json = OneFile.Parse(GetBinaryFixture("blob", "bin"), TestData.Password);

            Assert.NotNull(json["i"]);
            Assert.NotNull(json["c"]);
        }
Exemple #2
0
    private void UnZipOneFile(object _file)
    {
        OneFile oneFile = (OneFile)_file;

        using (ZipInputStream zipInputStream = new ZipInputStream(File.Open(this.zipFileName, 3, 1, 3)))
        {
            for (int i = 0; i < oneFile.entryCounter; i++)
            {
                zipInputStream.GetNextEntry();
            }
            using (FileStream fileStream = File.Create(oneFile.filePath))
            {
                int    num   = 2048;
                byte[] array = new byte[2048];
                while (true)
                {
                    try
                    {
                        num = zipInputStream.Read(array, 0, array.Length);
                    }
                    catch (Exception ex)
                    {
                        Debug.LogError("zipFile.Read " + ex.ToString());
                        break;
                    }
                    if (num <= 0)
                    {
                        break;
                    }
                    fileStream.Write(array, 0, num);
                }
            }
            this.unZipProgress = (float)zipInputStream.get_Position() / (float)this.fileSize;
        }
    }
 public void Decompress_returns_decompressed_data()
 {
     // Generated with bash
     // $ echo -n decompressed | gzip -c - | base64
     Assert.Equal("decompressed".ToBytes(),
                  OneFile.Decompress("H4sIANRVH1oAA0tJTc7PLShKLS5OTQEACojeBQwAAAA=".Decode64()));
 }
Exemple #4
0
        public void Parse_returns_parsed_object()
        {
            var json = OneFile.Parse(TestData.Blob, TestData.Password);

            Assert.That(json["i"], Is.Not.Null);
            Assert.That(json["c"], Is.Not.Null);
        }
Exemple #5
0
 public ProjectGenerator(string baseDir, string projDir)
 {
     this.baseDir     = baseDir;
     this.projDir     = projDir;
     this.projectFile = null;
     this.projectFile = OneProjectFile.fromJson(OneJson.parse(OneFile.readText($"{projDir}/one.json")).asObject());
     this.srcDir      = $"{this.projDir}/{this.projectFile.sourceDir}";
     this.outDir      = $"{this.projDir}/{this.projectFile.outputDir}";
 }
Exemple #6
0
    private void *LoadMaestro(void *addressToDecompressTo, ref OneFile thisPointer, int fileIndex)
    {
        bool shouldFree  = _buffer.Get(GetSizeOfFile(fileIndex, ref thisPointer), out var newAddress);
        var  returnValue = _loadMaestroHook.OriginalFunction(newAddress, ref thisPointer, fileIndex);

        if (shouldFree)
        {
            _buffer.FreeLargeObject();
        }

        return(returnValue);
    }
Exemple #7
0
    private void *LoadHAnimation(int fileIndex, void *addressToDecompressTo, ref OneFile thisPointer)
    {
        bool isLargeObject = _buffer.Get(GetSizeOfFile(fileIndex, ref thisPointer), out var newAddress);
        var  returnValue   = _loadHAnimationHook.OriginalFunction(fileIndex, newAddress, ref thisPointer);

        if (isLargeObject)
        {
            _buffer.FreeLargeObject();
        }

        return(returnValue);
    }
Exemple #8
0
 public void generate(string dstDir, ObjectValue model)
 {
     foreach (var fn in this.srcFiles)
     {
         var srcFn = $"{this.templateDir}/src/{fn}";
         var dstFn = $"{dstDir}/{fn}";
         if (this.meta.templateFiles.includes(fn))
         {
             var tmpl    = new TemplateParser(OneFile.readText(srcFn)).parse();
             var dstFile = tmpl.format(new VMContext(model));
             OneFile.writeText(dstFn, dstFile);
         }
         else
         {
             OneFile.copy(srcFn, dstFn);
         }
     }
 }
Exemple #9
0
        public static async Task <Compiler> initProject(string projectName, string sourceDir, string lang = "ts", string packagesDir = null)
        {
            if (lang != "ts")
            {
                throw new Error("Only typescript is supported.");
            }

            var compiler = new Compiler();
            await compiler.init(packagesDir ?? $"{CompilerHelper.baseDir}packages/");

            compiler.setupNativeResolver(OneFile.readText($"{CompilerHelper.baseDir}langs/NativeResolvers/typescript.ts"));
            compiler.newWorkspace(projectName);

            foreach (var file in OneFile.listFiles(sourceDir, true).filter(x => x.endsWith(".ts")))
            {
                compiler.addProjectFile(file, OneFile.readText($"{sourceDir}/{file}"));
            }

            return(compiler);
        }
Exemple #10
0
    /* Implementation */
    private int GetSizeOfFile(int fileIndex, ref OneFile thisPointer)
    {
        // Sometimes the game may request a file of index 0, despite indices starting at 2.
        if (fileIndex < 2)
        {
            return(_buffer.AllocationSize);
        }

        // Note: The pointer to the start of file in thisPointer might not be initialized, but the other pointers e.g. Start of name section.
        int fileEntry   = fileIndex - 2;
        var startOfFile = ((byte *)thisPointer.NameSectionHeaderPointer) - sizeof(OneArchiveHeader);
        var oneArchive  = new OneArchive(startOfFile);
        var enumerator  = oneArchive.GetFileEntryEnumerator();

        // Move to correct entry.
        for (int x = 0; x <= fileEntry; x++)
        {
            enumerator.MoveNext();
        }

        return(SDK.Prs.Estimate(enumerator.Current->GetCompressedDataPtr(), enumerator.Current->FileSize));
    }
Exemple #11
0
        public async Task <PackageBundle> getAllCached()
        {
            var packages = new Dictionary <string, PackageContent> {
            };
            var allFiles = OneFile.listFiles(this.packagesDir, true);

            foreach (var fn in allFiles)
            {
                var pathParts = fn.split(new RegExp("/")).ToList();
                // [0]=implementations/interfaces, [1]=package-name, [2:]=path
                if (pathParts.length() < 3)
                {
                    continue;
                }
                var type   = pathParts.shift();
                var pkgDir = pathParts.shift();
                if (type != "implementations" && type != "interfaces")
                {
                    continue;
                }
                // skip e.g. bundle.json
                var pkgIdStr = $"{type}/{pkgDir}";
                var pkg      = packages.get(pkgIdStr);
                if (pkg == null)
                {
                    var pkgDirParts = pkgDir.split(new RegExp("-")).ToList();
                    var version     = pkgDirParts.pop().replace(new RegExp("^v"), "");
                    var pkgType     = type == "implementations" ? PackageType.Implementation : PackageType.Interface;
                    var pkgId       = new PackageId(pkgType, pkgDirParts.join("-"), version);
                    pkg = new PackageContent(pkgId, new Dictionary <string, string> {
                    }, true);
                    packages.set(pkgIdStr, pkg);
                }
                pkg.files.set(pathParts.join("/"), OneFile.readText($"{this.packagesDir}/{fn}"));
            }
            return(new PackageBundle(Object.values(packages)));
        }
 public void ParseJson_returns_parsed_json()
 {
     Assert.NotNull(OneFile.ParseJson("{}".ToBytes()));
 }
Exemple #13
0
 public ProjectTemplate(string templateDir)
 {
     this.templateDir = templateDir;
     this.meta        = ProjectTemplateMeta.fromYaml(OneYaml.load(OneFile.readText($"{templateDir}/index.yaml")));
     this.srcFiles    = OneFile.listFiles($"{templateDir}/src", true);
 }
Exemple #14
0
        public async Task generate()
        {
            // copy native source codes from one project
            var nativeSrcDir = $"{this.projDir}/{this.projectFile.nativeSourceDir}";

            foreach (var fn in OneFile.listFiles(nativeSrcDir, true))
            {
                OneFile.copy($"{nativeSrcDir}/{fn}", $"{this.outDir}/{fn}");
            }

            var generators = new IGenerator[] { ((IGenerator) new JavaGenerator()), ((IGenerator) new CsharpGenerator()), ((IGenerator) new PythonGenerator()), ((IGenerator) new PhpGenerator()) };

            foreach (var tmplName in this.projectFile.projectTemplates)
            {
                var compiler = await CompilerHelper.initProject(this.projectFile.name, this.srcDir, this.projectFile.sourceLang, null);

                compiler.processWorkspace();

                var projTemplate = new ProjectTemplate($"{this.baseDir}/project-templates/{tmplName}");
                var langId       = projTemplate.meta.language;
                var generator    = generators.find(x => x.getLangName().toLowerCase() == langId);
                var langName     = generator.getLangName();
                var outDir       = $"{this.outDir}/{langName}";

                foreach (var trans in generator.getTransforms())
                {
                    trans.visitFiles(Object.values(compiler.projectPkg.files));
                }

                // copy implementation native sources
                var oneDeps    = new List <ImplementationPackage>();
                var nativeDeps = new Dictionary <string, string> {
                };
                foreach (var dep in this.projectFile.dependencies)
                {
                    var impl = compiler.pacMan.implementationPkgs.find(x => x.content.id.name == dep.name);
                    oneDeps.push(impl);
                    var langData = impl.implementationYaml.languages.get(langId);
                    if (langData == null)
                    {
                        continue;
                    }

                    foreach (var natDep in langData.nativeDependencies ?? new ImplPkgNativeDependency[0])
                    {
                        nativeDeps.set(natDep.name, natDep.version);
                    }

                    if (langData.nativeSrcDir != null)
                    {
                        if (projTemplate.meta.packageDir == null)
                        {
                            throw new Error("Package directory is empty in project template!");
                        }
                        var srcDir   = langData.nativeSrcDir + (langData.nativeSrcDir.endsWith("/") ? "" : "/");
                        var dstDir   = $"{outDir}/{projTemplate.meta.packageDir}/{langData.packageDir ?? impl.content.id.name}";
                        var depFiles = Object.keys(impl.content.files).filter(x => x.startsWith(srcDir)).map(x => x.substr(srcDir.length()));
                        foreach (var fn in depFiles)
                        {
                            OneFile.writeText($"{dstDir}/{fn}", impl.content.files.get($"{srcDir}{fn}"));
                        }
                    }

                    if (langData.generatorPlugins != null)
                    {
                        foreach (var genPlugFn in langData.generatorPlugins)
                        {
                            generator.addPlugin(new TemplateFileGeneratorPlugin(generator, impl.content.files.get(genPlugFn)));
                        }
                    }
                }

                // generate cross compiled source code
                console.log($"Generating {langName} code...");
                var files = generator.generate(compiler.projectPkg);
                foreach (var file in files)
                {
                    OneFile.writeText($"{outDir}/{projTemplate.meta.destinationDir ?? ""}/{file.path}", file.content);
                }

                // generate files from project template
                var model = new ObjectValue(new Dictionary <string, IVMValue> {
                    ["dependencies"] = ((IVMValue) new ArrayValue(Object.keys(nativeDeps).map(name => new ObjectValue(new Dictionary <string, IVMValue> {
                        ["name"] = ((IVMValue) new StringValue(name)),
                        ["version"] = ((IVMValue) new StringValue(nativeDeps.get(name)))
                    })))),
                    ["onepackages"] = ((IVMValue) new ArrayValue(oneDeps.map(dep => new ObjectValue(new Dictionary <string, IVMValue> {
                        ["vendor"] = ((IVMValue) new StringValue(dep.implementationYaml.vendor)),
                        ["id"] = ((IVMValue) new StringValue(dep.implementationYaml.name))
                    }))))
                });
                projTemplate.generate($"{outDir}", model);
            }
        }
Exemple #15
0
 public void ParseJson_throws_on_invalid_json()
 {
     Assert.That(() => OneFile.ParseJson("}{".ToBytes()),
                 ExceptionsTest.ThrowsParseErrorWithMessage("Corrupted"));
 }
Exemple #16
0
 private static TestDelegate Parse(byte[] content)
 {
     return(() => OneFile.Parse(content, "password"));
 }
Exemple #17
0
 private static TestDelegate Decrypt(byte[] content)
 {
     return(() => OneFile.Decrypt(content, "password"));
 }
 private static void Decrypt(byte[] content)
 {
     OneFile.Decrypt(content, "password");
 }
 private static void Parse(byte[] content)
 {
     OneFile.Parse(content, "password");
 }
Exemple #20
0
 public void ParseJson_returns_parsed_json()
 {
     Assert.That(OneFile.ParseJson("{}".ToBytes()), Is.Not.Null);
 }
 public void listXCompiledNativeSources()
 {
     console.log(OneFile.listFiles($"{this.baseDir}/xcompiled-src/native", true).join("\n"));
 }
Exemple #22
0
 public void afterStage(string stageName)
 {
     console.log($"Stage finished: {stageName}");
     OneFile.writeText($"{this.artifactDir}/stages/{this.stage}_{stageName}.txt", new PackageStateCapture(this.compiler.projectPkg).getSummary());
     this.stage++;
 }
 public void ParseJson_throws_on_invalid_json()
 {
     Exceptions.AssertThrowsInternalError(() => OneFile.ParseJson("}{".ToBytes()), "Corrupted");
 }