vaderjs 1.3.3-alpha-3 → 1.3.3-alpha-4

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.md CHANGED
@@ -64,6 +64,7 @@ public - used for anything
64
64
 
65
65
  4. And your done - Run `bun run vader --build` and the compiled output is visible inside of the `/dist/` folder!
66
66
 
67
+
67
68
  ## Key Features & Examples
68
69
 
69
70
  ### File based routing
package/package.json CHANGED
@@ -2,20 +2,12 @@
2
2
  "name": "vaderjs",
3
3
  "description": "A Reactive library aimed to helping you build reactive applications inspired by react.js",
4
4
  "module": "vader.js",
5
- "version": "1.3.3-alpha-3",
5
+ "version": "1.3.3-alpha-4",
6
6
  "bin": {
7
7
  "vader": "./vader.js"
8
8
  },
9
- "scripts": {
10
- "build": "bunx vader --build",
11
- "watch": "bun run vader --watch",
12
- "help": "bunx vader"
13
- },
14
9
  "type": "module",
15
10
  "devDependencies": {
16
- "@types/bun": "latest"
17
- },
18
- "peerDependencies": {
19
- "typescript": "^5.0.0"
11
+ "glob": "^10.3.10"
20
12
  }
21
- }
13
+ }
@@ -10,7 +10,7 @@
10
10
  <body>
11
11
  <div id="root"></div>
12
12
  <script type="module">
13
- import VaderRouter from './public/vader/router.js'
13
+ import VaderRouter from './router.js'
14
14
 
15
15
  const router = new VaderRouter('/', 3000)
16
16
  window.router = router
package/vader.js CHANGED
@@ -1,24 +1,20 @@
1
- #!/usr/bin/env bun
2
-
3
- import fs, { watchFile } from "fs";
4
-
5
- import { Glob } from "bun";
1
+ #!/usr/bin/env node
2
+ import fs from "fs";
3
+ import { glob, globSync, globStream, globStreamSync, Glob } from 'glob'
4
+
6
5
  let bundleSize = 0;
7
- switch (true) {
8
- case !fs.existsSync(process.cwd() + "/pages"):
9
- fs.mkdirSync(process.cwd() + "/pages");
10
- break;
11
- case !fs.existsSync(process.cwd() + "/dist"):
12
- fs.mkdirSync(process.cwd() + "/dist");
13
- console.log("Created dist folder");
14
- case !fs.existsSync(process.cwd() + "/public"):
15
- fs.mkdirSync(process.cwd() + "/public");
16
- break;
17
- case !fs.existsSync(process.cwd() + "/src"):
18
- fs.mkdirSync(process.cwd() + "/src");
19
- break;
6
+ if(!fs.existsSync(process.cwd() + '/dist')){
7
+ fs.mkdirSync(process.cwd() + '/dist')
8
+ fs.mkdirSync(process.cwd() + '/dist/public')
9
+ fs.mkdirSync(process.cwd() + '/dist/src')
10
+ fs.mkdirSync(process.cwd() + '/dist/pages')
11
+ }else if(!fs.existsSync(process.cwd() + '/dist/public')){
12
+ fs.mkdirSync(process.cwd() + '/dist/public')
13
+ }else if(!fs.existsSync(process.cwd() + '/src') && !fs.existsSync(process.cwd() + '/dist/src')){
14
+ fs.mkdirSync(process.cwd() + '/dist/src')
15
+ fs.mkdirSync(process.cwd() + '/src')
20
16
  }
21
-
17
+
22
18
  function Compiler(func) {
23
19
  let string = func;
24
20
  let comments = string
@@ -222,7 +218,8 @@ function Compiler(func) {
222
218
  otherdata["jsx"] = isJSXComponent;
223
219
  otherdata["ref"] = ref;
224
220
 
225
- newvalue = newvalue.replaceAll(/\s+/g, "\n");
221
+ newvalue = newvalue.split('\n').map(line => line.trim() ? line.trim() + ';' : line).join('\n');
222
+
226
223
  let newatribute = `${attributeName}="\${this.bind(\`${newvalue}\` ${isJSXComponent ? "" : ","
227
224
  }${JSON.stringify(otherdata)} )}"`;
228
225
 
@@ -258,8 +255,9 @@ function Compiler(func) {
258
255
  params ? (otherdata["params"] = params) : null;
259
256
  otherdata["jsx"] = isJSXComponent;
260
257
  otherdata["ref"] = ref;
261
- newvalue = newvalue.replaceAll(/\s+/g, ";");
262
- let newattribute = `${attributeName}="\${this.bind(\`${newvalue}\`, ${isJSXComponent ? "" : ","}${JSON.stringify(otherdata)} )}"`;
258
+ // since js is all in one line split it
259
+ newvalue = newvalue.split('\n').map(line => line.trim() ? line.trim() + ';' : line).join('\n');
260
+ let newattribute = `${attributeName}="\${this.bind(\`${newvalue}\` ${isJSXComponent ? "" : ","}${JSON.stringify(otherdata)} )}"`;
263
261
  newattribute = newattribute.replace(/\s+/g, " ")
264
262
  string = string.replace(old, newattribute);
265
263
  }
@@ -581,91 +579,86 @@ async function Build() {
581
579
  globalThis.isBuilding = true
582
580
  console.log('Compiling......')
583
581
  let reader = async (file) => {
584
- let text = await Bun.file(file).text();
582
+ let text = await fs.readFileSync(file, "utf8");
585
583
  return text;
586
584
  };
587
585
  let writer = async (file, data) => {
588
- await Bun.write(file, data);
586
+ switch (true) {
587
+ case !fs.existsSync(file):
588
+ fs.mkdirSync(file.split('/').slice(0, -1).join('/'), { recursive: true })
589
+ break;
590
+ }
591
+ await fs.writeFileSync(file, data);
589
592
 
590
593
  return { _written: true };
591
594
  };
592
595
 
593
596
 
594
- const glob = new Glob("**/*.{jsx,js}");
595
- for await (let file of glob.scan({ cwd: process.cwd() + '/pages/', absolute: true })) {
596
- let origin = file.split(process.cwd())[1] || file
597
+ const glb = await glob("**/**/**/**.{jsx,js}", {
598
+ ignore: ["node_modules/**/*", "dist/**/*"],
599
+ cwd: process.cwd() + '/pages/',
600
+ absolute: true,
601
+ recursive: true
602
+ });
603
+ for await (let file of glb) {
604
+
605
+ let origin = file.split(process.cwd())[1] || file
606
+ let fileName = file.split(process.cwd() + '/pages/')[1]
597
607
  file = file.split(process.cwd() + '/pages/')[1]
598
- bindings[file] = ''
599
- const router = new Bun.FileSystemRouter({
600
- style: "nextjs",
601
- dir: process.cwd() + "/pages/",
602
- origin: process.env.ORIGIN || "http://localhost:3000",
603
- assetPrefix: "_next/static/",
604
- fileExtensions: [".jsx", ".js"],
605
- });
606
-
607
-
608
- let m = router.match(origin.includes('/pages/index.jsx') ? '/' : '/' + file)
609
- router.reload()
610
-
611
- if (!m) {
612
- console.error(`Error: ${file} is not a valid route\nFollow Proper Routing Structure:
613
- `)
614
- console.info(`
615
- /pages/index.jsx
616
- /pages/folder/index.jsx
617
- /pages/folder/[param].jsx
618
- `)
619
- process.exit(1)
620
- }
608
+
609
+ file === 'index.jsx' ? file = '/' : null
610
+ let isBasePath = file === '/' ? true : false
611
+ // ex: /pages/index.jsx - / or /pages/[id].jsx - /:id or /pages/folder/index.jsx - /folder
612
+ let aburl = origin.split('pages')[1].split('.jsx')[0].replace('.jsx', '').replace('/index', '').replace('/_', '/:').replace('/[', '/:').replace(']', '')
621
613
 
614
+ aburl.includes('[') ? aburl = '/' + aburl.split('[')[0].replace('/', '') : null
615
+
622
616
 
623
- let writtenpath = ''
624
- // change /home/[app].jsx to /home
625
- m && m.kind === 'dynamic' ? writtenpath = m.pathname.split('[')[0] : null
617
+
618
+
619
+
626
620
 
627
621
  let obj = {
628
- filePath: m.filePath,
629
- kind: m.kind,
630
- params: m.params,
631
- query: m.query,
632
- scriptSrc: m.scriptSrc,
633
- src: m.src,
634
- pathname: writtenpath || m.pathname,
635
- }
636
-
637
- let data = await reader(process.cwd() + "/pages/" + file)
622
+ url: isBasePath ? '/' : aburl,
623
+ pathname: origin,
624
+ }
625
+ let data = await reader(process.cwd() + origin)
626
+
638
627
  data = Compiler(data)
639
- await writer(process.cwd() + "/dist/pages/" + file, data);
628
+ await writer(process.cwd() + "/dist/pages/" + fileName, data);
640
629
  let params = obj.params ? Object.keys(obj.params).map((r) => {
641
630
  r = r.replace('[', '').replace(']', '')
642
631
  return `:${r}`
643
632
  }) : ''
644
633
 
645
- obj.pathname === '//' ? obj.pathname = '/' : null
634
+
646
635
 
647
636
 
648
637
 
649
638
  let js = `
650
- router.get('${obj.pathname.includes('.jsx') ? obj.pathname.replace('.jsx', '') + params : obj.pathname + params}', async (req, res) => {
651
- res.render(await require('./pages/${file}'), req, res)
639
+ router.get('${obj.url}', async (req, res) => {
640
+ res.render(await require('.${obj.pathname}'), req, res)
652
641
  })
653
- //@desc ${obj.filePath}
642
+ //@desc ${obj.pathname}
654
643
  ` + '\n'
655
644
 
656
645
 
657
646
 
658
- let before = await Bun.file(process.cwd() + "/dist/app.js").exists() ? await reader(process.cwd() + "/dist/app.js") : ''
647
+ let before = fs.existsSync(process.cwd() + "/dist/app.js") ? await reader(process.cwd() + "/dist/app.js") : ''
659
648
 
660
649
  let newfile = before + '\n' + js
661
- if (!before.includes(`//@desc ${obj.filePath}`)) {
650
+ if (!before.includes(`//@desc ${obj.pathname}`)) {
662
651
  await writer(process.cwd() + "/dist/app.js", newfile);
663
652
  }
664
653
 
665
654
  }
666
655
 
667
- const gb = new Glob("*");
668
- const scannedSourceFiles = await Array.fromAsync(gb.scan({ cwd: process.cwd() + '/src/', absolute: true }));
656
+
657
+ const scannedSourceFiles = await glob("**/**.{jsx,js}", {
658
+ ignore: ["node_modules/**/*", "dist/**/*"],
659
+ cwd: process.cwd() + '/src/',
660
+ absolute: true,
661
+ });
669
662
  scannedSourceFiles.forEach(async (file) => {
670
663
 
671
664
  file = file.split(process.cwd() + '/src/')[1]
@@ -678,57 +671,43 @@ async function Build() {
678
671
  await writer(process.cwd() + "/dist/src/" + file, data);
679
672
  })
680
673
 
681
- const scannedPublicFiles = await Array.fromAsync(gb.scan({ cwd: process.cwd() + '/public/', absolute: true }));
674
+ const scannedPublicFiles = await glob("**/**.{css,js,html}", {
675
+ ignore: ["node_modules/**/*", "dist/**/*"],
676
+ cwd: process.cwd() + '/public/',
677
+ absolute: true,
678
+ });
682
679
  scannedPublicFiles.forEach(async (file) => {
683
680
  file = file.split(process.cwd() + '/public/')[1]
684
681
  let data = await reader(process.cwd() + "/public/" + file)
685
682
  bundleSize += fs.statSync(process.cwd() + "/public/" + file).size;
686
683
  await writer(process.cwd() + "/dist/public/" + file, data);
687
- })
688
- const scannedFiles = await Array.fromAsync(gb.scan({ cwd: process.cwd() + '/node_modules/vaderjs/' + './runtime/static' }));
689
- const scannedVaderFiles = await Array.fromAsync(
690
- gb.scan({ cwd: process.cwd() + '/node_modules/vaderjs/' + "/runtime/" })
691
- );
684
+ })
685
+ const scannedFiles = await glob("**/**.{css,js,html}", {
686
+ ignore: ["node_modules/**/*", "dist/**/*"],
687
+ cwd: process.cwd() + "/runtime/",
688
+ absolute: true,
689
+ })
692
690
 
693
691
  if (!fs.existsSync(process.cwd() + "/dist/index.html")) {
694
692
  scannedFiles.forEach(async (file) => {
693
+ file = file.split(process.cwd() + '/runtime/')[1]
695
694
 
696
695
  if (file === "app.js") {
697
696
  return
698
697
  }
699
- bundleSize += fs.statSync(process.cwd() + '/node_modules/vaderjs/' + "/runtime/static/" + file).size;
700
- let data = await reader(process.cwd() + '/node_modules/vaderjs/' + "/runtime/static/" + file);
698
+ bundleSize += fs.statSync(process.cwd() + "/runtime/" + file).size;
699
+ let data = await reader(process.cwd() + "/runtime/" + file)
701
700
  await writer(process.cwd() + "/dist/" + file, data);
702
701
  });
703
- scannedVaderFiles.forEach(async (file) => {
704
- bundleSize += fs.statSync(
705
- process.cwd() + '/node_modules/vaderjs/' + "/runtime/" + file
706
- ).size;
707
- let data = await reader(process.cwd() + '/node_modules/vaderjs/' + "/runtime/" + file);
708
- await writer(process.cwd() + "/dist/public/vader/" + file, data);
709
- });
702
+
710
703
  }
711
704
 
712
-
713
- if (!fs.existsSync(process.cwd() + "/dist/index.html")) {
714
- scannedFiles.forEach(async (file) => {
715
-
716
- bundleSize += fs.statSync(process.cwd() + '/node_modules/vaderjs/' + "/runtime/static/" + file).size;
717
- let data = await reader(process.cwd() + '/node_modules/vaderjs/' + "/runtime/static/" + file);
718
- await writer(process.cwd() + "/dist/" + file, data);
719
- });
720
- scannedVaderFiles.forEach(async (file) => {
721
- bundleSize += fs.statSync(
722
- process.cwd() + "/runtime/" + file
723
- ).size;
724
- let data = await reader(process.cwd() + "/runtime/" + file);
725
- await writer(process.cwd() + '/node_modules/vaderjs/' + "/dist/public/vader/" + file, data);
726
- });
727
- }
705
+
728
706
  console.log(`Compilation completed`)
729
707
  globalThis.isBuilding = false
730
708
  }
731
709
  import { watch } from "fs";
710
+ import { url } from "inspector";
732
711
 
733
712
  switch (true) {
734
713
  case process.argv.includes('--watch'):
@@ -737,19 +716,20 @@ switch (true) {
737
716
  Vader.js v1.3.3
738
717
  `)
739
718
  Build()
740
- const watcher = watch(
741
- process.cwd() + '/pages',
742
- { recursive: true },
743
- (event, filename) => {
744
- if (event == 'change'
745
- && !globalThis.isBuilding
746
- ) {
747
- Build()
748
- }
749
- },
750
- );
751
- watcher.on('error', (err) => console.log(err))
752
- console.log('Watching for changes')
719
+
720
+ const watcher = watch(
721
+ process.cwd() + '/pages',
722
+ { recursive: true },
723
+ (event, filename) => {
724
+ if (event == 'change'
725
+ && !globalThis.isBuilding
726
+ ) {
727
+ Build()
728
+ }
729
+ },
730
+ );
731
+ watcher.on('error', (err) => console.log(err))
732
+
753
733
  break;
754
734
  case process.argv.includes('--build'):
755
735