Skip to content
This repository was archived by the owner on Mar 24, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
f68ed0b
tests
CoreBytee Nov 18, 2023
eef82ee
rework logger
CoreBytee Nov 18, 2023
0cfd1cd
rework buildhelper
CoreBytee Nov 18, 2023
428624c
rework fetchjson
CoreBytee Nov 18, 2023
012aace
clean default packageinfo
CoreBytee Nov 18, 2023
e960b40
Create DependencyParser.js
CoreBytee Nov 18, 2023
6c80a36
Delete DependencyFormatter.js
CoreBytee Nov 18, 2023
3b3deaf
rework packagemanagers
CoreBytee Nov 18, 2023
2faba68
Delete Index.js
CoreBytee Nov 18, 2023
d37f555
rework packagemanager
CoreBytee Nov 18, 2023
a7b4e00
Create RandomString.js
CoreBytee Nov 18, 2023
f4349d8
update builder
CoreBytee Nov 18, 2023
575de02
Update Arguments.js
CoreBytee Nov 18, 2023
40a96cf
Update package.json
CoreBytee Nov 18, 2023
e205289
Update Index.js
CoreBytee Nov 18, 2023
b7df869
Update Index.js
CoreBytee Nov 18, 2023
46699fa
small logger rework
CoreBytee Nov 18, 2023
c494e1f
Update Builder.js
CoreBytee Nov 18, 2023
a034400
move packagemanager
CoreBytee Nov 18, 2023
391e5ad
clean comments
CoreBytee Nov 18, 2023
bc5a961
Update Load.js
CoreBytee Nov 18, 2023
e3ded2f
fix run action
CoreBytee Nov 18, 2023
b4cfb27
load packagemanager
CoreBytee Nov 18, 2023
66c9534
Delete BuildHelper.js
CoreBytee Nov 19, 2023
66c0cbc
Update Load.js
CoreBytee Nov 19, 2023
818b18d
fix redirects
CoreBytee Nov 19, 2023
14f7de4
tests
CoreBytee Nov 19, 2023
473627b
fix run and execute actions
CoreBytee Nov 19, 2023
6f557c0
clean deps
CoreBytee Nov 19, 2023
f43431b
Update NPM.js
CoreBytee Nov 19, 2023
9ac6bd6
move language related stuff to their own files
CoreBytee Nov 19, 2023
e488b33
remove logs
CoreBytee Nov 19, 2023
2a88c74
add more package functionality
CoreBytee Nov 19, 2023
ffd0b7f
Update Index.js
CoreBytee Nov 19, 2023
27c8fa8
add file downloading
CoreBytee Nov 19, 2023
000f100
fixes?
CoreBytee Nov 19, 2023
2eb3894
fixed with pall
CoreBytee Nov 19, 2023
00616b5
fix file fetching
CoreBytee Nov 20, 2023
a005c1d
Update package.info.json
CoreBytee Nov 20, 2023
4e47077
remove old packagemanagers
CoreBytee Nov 20, 2023
02bcf88
fix fetchfile
CoreBytee Nov 20, 2023
0e35d1a
add package linking
CoreBytee Nov 20, 2023
67d946f
remove some autocreating of folders
CoreBytee Nov 20, 2023
cf45b57
GetDependencyFolder func
CoreBytee Nov 20, 2023
4bb5949
update downloading of packages
CoreBytee Nov 20, 2023
fdc8b9b
remove logs
CoreBytee Nov 20, 2023
c3adeae
fix linking
CoreBytee Nov 20, 2023
1d3fb93
fix some small oopsies
CoreBytee Nov 20, 2023
cd71939
update require for new package manager
CoreBytee Nov 20, 2023
5721b8d
MORE LOGGING
CoreBytee Nov 20, 2023
83946cf
boop version
CoreBytee Nov 20, 2023
1e3283f
Update Main.js
CoreBytee Nov 20, 2023
14c8e23
MORE LOGGING part 2
CoreBytee Nov 20, 2023
a08186f
update resourcemanager
CoreBytee Nov 20, 2023
86d2ba3
update load func
CoreBytee Nov 20, 2023
9d980c9
fix require
CoreBytee Nov 20, 2023
006b911
add import
CoreBytee Nov 20, 2023
6f19f48
Update package.json
CoreBytee Nov 20, 2023
a963a73
Update PackageManager.js
CoreBytee Nov 20, 2023
4d84a0b
Update Load.js
CoreBytee Nov 20, 2023
2a31a8b
return
CoreBytee Nov 20, 2023
ea5538f
fix logger
CoreBytee Nov 20, 2023
83905bc
add logger name to log string
CoreBytee Nov 21, 2023
7fef26a
remove deasync
CoreBytee Nov 21, 2023
efdecbd
tests
CoreBytee Nov 22, 2023
9b79173
fix error on build
CoreBytee Nov 23, 2023
f39a499
fix errors
CoreBytee Nov 26, 2023
6f4f778
cleanup and test vars
CoreBytee Nov 26, 2023
8d56728
more test vars
CoreBytee Nov 26, 2023
ba60329
small fixes
CoreBytee Nov 26, 2023
59557b6
dont use stdout
CoreBytee Nov 26, 2023
55d6e89
Update Main.js
CoreBytee Nov 26, 2023
8a43ebf
set process title
CoreBytee Nov 26, 2023
a33dcdc
move code to its own function
CoreBytee Nov 30, 2023
0ad6b89
rework installer
CoreBytee Dec 6, 2023
389f18d
Merge branch 'v6-classify' of https://github.com/Dot-lua/TypeWriter i…
CoreBytee Dec 6, 2023
12493da
Merge branch 'v6' into v6-classify
CoreBytee Dec 6, 2023
0dd2d40
Update Require.js
CoreBytee Dec 6, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
1 change: 1 addition & 0 deletions Test/src/Main/js/Test/Main2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = "a"
58 changes: 35 additions & 23 deletions Test/src/Main/package.info.json
Original file line number Diff line number Diff line change
@@ -1,25 +1,37 @@
{
"Id": "TypeWriterTest",
"Name": "TypeWriter Test",
"Description": "A Test for TypeWriter",
"Version": "1.0.0",
"Authors": {
"Developers": [
"CoreByte"
],
"Contributors": []
},
"Contact": {
"Website": "",
"Source": "",
"Socials": {}
},
"Dependencies": [
"npm+node-fetch@3.3.1",
"npm+types/node-fetch@2.6.4",
"npm+discord.js@14.12.1"
],
"Entrypoints": {
"Main": "Test"
}
"Id": "TypeWriterTest",
"Name": "TypeWriter Test",
"Description": "A Test for TypeWriter",
"Version": "1.0.0",
"Authors": {
"Developers": [
"CoreByte"
],
"Contributors": []
},
"Contact": {
"Website": "",
"Source": "",
"Socials": {}
},
"Dependencies": [
"npm+discord.js@14.14.1",
"npm+argparse@2.0.1",
"npm+colors@1.4.0",
"npm+extract-zip@2.0.1",
"npm+fs-extra@11.1.1",
"npm+get-caller-file@2.0.5",
"npm+is-builtin-module@3.2.1",
"npm+is-online@10.0.0",
"npm+klaw-sync@6.0.0",
"npm+node-fetch@3.3.2",
"npm+randomstring@1.3.0",
"npm+require-from-string@2.0.2",
"npm+require-main-filename@2.0.0",
"npm+sync-fetch@0.5.2",
"npm+tar@6.2.0"
],
"Entrypoints": {
"Main": "Test"
}
}
12 changes: 8 additions & 4 deletions TypeWriter/Actions/build/Index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
const BuildHelper = require("../../Lib/BuildHelper.js")
const BuilderClass = require("../../Classes/Builder.js")

module.exports.Name = "Build"
module.exports.Execute = async function() {
const InputPath = TypeWriter.Arguments.input
const InputBranch = TypeWriter.Arguments.branch
const OutputPath = TypeWriter.Arguments.output

const BuildId = BuildHelper.Build(InputPath, InputBranch)
BuildHelper.CompressBuild(BuildId, TypeWriter.Arguments.output)
BuildHelper.CleanupBuild(BuildId)
const Builder = new BuilderClass(InputPath, InputBranch, OutputPath)
await Builder.ValidatePackageInfo()
await Builder.ScanCode()
await Builder.ScanResources()
await Builder.Compress()
await Builder.Cleanup()
}
12 changes: 6 additions & 6 deletions TypeWriter/Actions/execute/Index.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
const FS = require("fs-extra")
const RandomString = require("randomstring")
const Path = require("path")
const LoadEnvoirment = require("../../Lib/LoadEnvoirment")
const RandomString = require("../../Lib/RandomString.js")


module.exports.Name = "Execute"
module.exports.Execute = async function() {
const InputPath = TypeWriter.Arguments.input
const ExecuteId = RandomString.generate(32)
const ExecuteId = RandomString(32)
const ExecuteFolder = Path.normalize(`${TypeWriter.Folder}/Cache/ExecuteCache/${ExecuteId}/`)
FS.mkdirSync(ExecuteFolder)

TypeWriter.Logger.Debug(`Input is ${InputPath}`)
TypeWriter.Logger.Debug(`ExecuteId is ${ExecuteId}`)
TypeWriter.Logger.Debug(`ExecuteFolder is ${ExecuteFolder}`)

FS.mkdirSync(ExecuteFolder)

await LoadEnvoirment(ExecuteFolder)
const Package = TypeWriter.LoadFile(InputPath)
TypeWriter.LoadEntrypointAsync(Package.Id, "Main")
const Package = await TypeWriter.PackageManager.LoadPackage(OutputFile)
await Package.LoadEntrypoint("Main")
}
28 changes: 14 additions & 14 deletions TypeWriter/Actions/run/Index.js
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
const RandomString = require("randomstring")
const FS = require("fs-extra")
const Path = require("path")

const BuildHelper = require("../../Lib/BuildHelper.js")
const BuilderClass = require("../../Classes/Builder.js")
const LoadEnvoirment = require("../../Lib/LoadEnvoirment")
const RandomString = require("../../Lib/RandomString.js")

module.exports.Name = "Run"
module.exports.Execute = async function() {
const InputPath = TypeWriter.Arguments.input
const InputBranch = TypeWriter.Arguments.branch

const BuildId = BuildHelper.Build(InputPath, InputBranch)
const ExecuteId = RandomString.generate(32)
const ExecuteId = RandomString(32)
const ExecuteFolder = Path.normalize(`${TypeWriter.Folders.Cache.ExecuteCacheFolder}/${ExecuteId}/`)
FS.mkdirSync(ExecuteFolder)

TypeWriter.Logger.Debug(`ExecuteId is ${ExecuteId}`)
const ExecuteFolder = Path.normalize(`${TypeWriter.Folder}/Cache/ExecuteCache/${ExecuteId}/`)
TypeWriter.Logger.Debug(`ExecuteFolder is ${ExecuteFolder}`)

FS.mkdirSync(ExecuteFolder)

BuildHelper.CompressBuild(BuildId, ExecuteFolder)
BuildHelper.CleanupBuild(BuildId)
if (BuildId == false) {
return
}
const Builder = new BuilderClass(InputPath, InputBranch, ExecuteFolder)
await Builder.ValidatePackageInfo()
await Builder.ScanCode()
await Builder.ScanResources()
const OutputFile = await Builder.Compress()
await Builder.Cleanup()

await LoadEnvoirment(ExecuteFolder)
const Package = TypeWriter.LoadFile(`${ExecuteFolder}/${FS.readdirSync(ExecuteFolder)}`)
TypeWriter.LoadEntrypointAsync(Package.Id, "Main")
const Package = await TypeWriter.PackageManager.LoadPackage(OutputFile)
await Package.LoadEntrypoint("Main")
}
15 changes: 4 additions & 11 deletions TypeWriter/Assets/package.info.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@
"Developers": [
"CoreByte"
],
"Contributors": [

]
"Contributors": []
},

"Contact": {
Expand All @@ -19,14 +17,9 @@
"Socials": {}
},

"Dependencies": [
{
"Source": "LIT",
"Package": "coro-spawn",
"Version": null,
"Type": "Packaged"
}
],
"Dependencies": [],

"Preload": [],

"Entrypoints": {
"Main": "me.corebyte.test"
Expand Down
173 changes: 173 additions & 0 deletions TypeWriter/Classes/Builder.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
const FS = require("fs-extra")
const Path = require("path")
const KlawSync = require('klaw-sync')
const RandomString = require("../Lib/RandomString.js")
const DependencyParser = require("../Lib/DependencyParser.js")
const Tar = require("tar")

async function FixDependencyVersions(Dependencies) {
let Updated = false
const VersionFixes = []

let DependencyIndex = -1
for (const Dependency of Dependencies) {
let ParsedDependency = DependencyParser.Parse(Dependency)
DependencyIndex++

if (ParsedDependency.Version != undefined) { continue }

Updated = true
TypeWriter.Logger.Warning(`No version specified for ${ParsedDependency.FullName}, fixing...`)
VersionFixes.push(
[
DependencyIndex,
ParsedDependency,
async function (DependencyIndex, ParsedDependency) {
const LatestVersion = await TypeWriter.DependencyManager.GetLatestVersion(ParsedDependency)
ParsedDependency.Version = LatestVersion
Dependencies[DependencyIndex] = DependencyParser.Format(ParsedDependency)
}
]

)

}

await Promise.all(VersionFixes.map(D => D[2](D[0], D[1])))

return [Updated, Dependencies]
}

async function ScanCode(ScanFolder, Extension) {
ScanFolder = Path.normalize(ScanFolder)
const ScannedCode = {}
const Files = KlawSync(ScanFolder, { nodir: true })
for (const File of Files) {
const FilePath = File.path
const CodePath = FilePath.split(ScanFolder)[1].replaceAll("\\", "/").replaceAll("/", ".").substring(1).split(".").slice(0, -1).join(".")

ScannedCode[CodePath] = {
Type: Extension,
Code: encodeURIComponent(FS.readFileSync(FilePath, "utf-8"))
}

if (CodePath.endsWith(".Main")) {
ScannedCode[CodePath.substring(0, CodePath.length - 5)] = {
Type: "Redirect",
Path: CodePath
}
} else if (CodePath.endsWith(".Index")) {
ScannedCode[CodePath.substring(0, CodePath.length - 6)] = {
Type: "Redirect",
Path: CodePath
}
}
}

return ScannedCode
}

class Builder {
constructor(Folder, Branch, OutputPath) {
this.BuildFolder = Folder
this.BranchFolder = Path.normalize(`${Folder}/${Branch}/`)
this.OutputPath = OutputPath
this.BuildId = RandomString(32)
this.BuildFolder = Path.normalize(`${TypeWriter.Folders.Cache.BuildCacheFolder}/${this.BuildId}/`)
this.PackageInfoFile = Path.normalize(`${this.BranchFolder}/package.info.json`)

TypeWriter.Logger.Debug(`Building to ${this.BuildFolder}`)

FS.ensureDirSync(this.BuildFolder)
FS.cpSync(this.BranchFolder + "/package.info.json", this.BuildFolder + "/package.info.json")

this.CreateRequiredFolders()
}

CreateRequiredFolders() {
FS.ensureDirSync(this.BranchFolder + "/js")
FS.ensureDirSync(this.BranchFolder + "/lua")
FS.ensureDirSync(this.BranchFolder + "/resources")
}

async ValidatePackageInfo() {
const PackageInfo = FS.readJsonSync(this.PackageInfoFile)
let NeedsUpdate = false

const [Updated, Dependencies] = await FixDependencyVersions(PackageInfo.Dependencies)
NeedsUpdate = Updated || NeedsUpdate
PackageInfo.Dependencies = Dependencies

if (NeedsUpdate) {
FS.writeJsonSync(this.PackageInfoFile, PackageInfo, { spaces: 4 })
FS.writeJSONSync(this.BuildFolder + "/package.info.json", PackageInfo, { spaces: 4 })
}
}

async ScanCode() {
const ScannedCode = Object.assign(
{},
await ScanCode(this.BranchFolder + "/lua", "lua"),
await ScanCode(this.BranchFolder + "/js", "js")
)

FS.writeJSONSync(
`${this.BuildFolder}/Code.json`,
ScannedCode,
{
spaces: "\t"
}
)
}

async ScanResources() {
const ResourceFolder = Path.normalize(`${this.BranchFolder}/resources`)
const DestinationResourceFolder = `${this.BuildFolder}/resources/`

const ResourceIndex = KlawSync(
this.BranchFolder + "/resources",
{
nodir: true
}
).map(
(File) => {
const FilePath = File.path
const ResourceFilePath = Path.normalize(FilePath.split(ResourceFolder)[1]).replaceAll("\\", "/")
return ResourceFilePath
}
)

FS.copySync(ResourceFolder, DestinationResourceFolder)
FS.writeJSONSync(
`${this.BuildFolder}/ResourceIndex.json`,
ResourceIndex,
{
spaces: "\t"
}
)
}

async Compress() {
const PackageInfo = FS.readJsonSync(this.PackageInfoFile)
const OutputFile = Path.join(this.OutputPath + `/${PackageInfo.Id}.twr`)
TypeWriter.Logger.Debug(`Outputting to ${OutputFile} in ${this.BuildFolder}`)
Tar.create(
{
file: OutputFile,
cwd: this.BuildFolder,
sync: true,
noMtime: true,
portable: true
},
FS.readdirSync(this.BuildFolder)
)

return OutputFile
}

async Cleanup() {
FS.rmSync(this.BuildFolder, { recursive: true, force: true })
}
}

module.exports = Builder
Loading