mystic-yard 2.0.2 → 2.0.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.
@@ -1,23 +1,20 @@
1
- const rules = require("./rules");
2
-
3
- function parser(tokens) {
4
- let output = "";
5
-
6
- for (let token of tokens) {
7
- const rule = rules.find(
8
- r => r.from.toLowerCase() === token.toLowerCase()
9
- );
10
-
11
- if (rule) {
12
- output += rule.to;
1
+ module.exports = function(tokens) {
2
+ let jsCode = "";
3
+
4
+ // উদাহরণ: টোকেনাইজড কোড প্রসেস করার লুপ
5
+ for (let i = 0; i < tokens.length; i++) {
6
+ if (tokens[i] === 'print') {
7
+ // print এর পরের টোকেনটিকে console.log এ কনভার্ট করবে
8
+ let value = tokens[i + 1] || '""';
9
+ jsCode += `console.log(${value});\n`;
10
+ i++;
13
11
  } else {
14
- output += token;
12
+ // অন্য কোনো সাধারণ জাভাস্ক্রিপ্ট কোড থাকলে সরাসরি বসাবে
13
+ if (tokens[i].trim() !== "") {
14
+ jsCode += tokens[i] + " ";
15
+ }
15
16
  }
16
-
17
- output += " ";
18
17
  }
19
-
20
- return output.trim();
21
- }
22
-
23
- module.exports = parser;
18
+
19
+ return jsCode.trim();
20
+ };
@@ -1,29 +1,29 @@
1
- const fs = require("fs");
2
- const path = require("path");
3
- const config = require("../config");
1
+ const fs = require('fs');
2
+ const path = require('path');
4
3
 
5
- function scanner() {
6
- const sourcePath = path.join(process.cwd(), config.sourceFolder);
4
+ function scanDir(dirPath, fileList = []) {
5
+ const files = fs.readdirSync(dirPath);
7
6
 
8
- if (!fs.existsSync(sourcePath)) {
9
- throw new Error(`Source folder not found: ${sourcePath}`);
10
- }
7
+ files.forEach(file => {
8
+ const filePath = path.join(dirPath, file);
9
+ const stat = fs.statSync(filePath);
11
10
 
12
- const files = fs.readdirSync(sourcePath);
13
-
14
- const sourceFiles = files.filter(file => {
15
- return path.extname(file) === config.sourceExtension;
11
+ // node_modules এবং dist ফোল্ডার বাদ দিয়ে বাকি সব ফোল্ডারে খুঁজবে
12
+ if (stat.isDirectory() && file !== 'node_modules' && file !== 'dist') {
13
+ scanDir(filePath, fileList);
14
+ }
15
+ // যদি ফাইলটির এক্সテンশন .my হয়, তবে সেটি রিড করবে
16
+ else if (stat.isFile() && path.extname(file) === '.my') {
17
+ fileList.push({
18
+ name: file,
19
+ code: fs.readFileSync(filePath, 'utf8')
20
+ });
21
+ }
16
22
  });
17
23
 
18
- return sourceFiles.map(file => {
19
- const fullPath = path.join(sourcePath, file);
20
-
21
- return {
22
- name: file,
23
- path: fullPath,
24
- code: fs.readFileSync(fullPath, "utf8")
25
- };
26
- });
24
+ return fileList;
27
25
  }
28
26
 
29
- module.exports = scanner;
27
+ module.exports = function() {
28
+ return scanDir(process.cwd());
29
+ };
@@ -1,8 +1,17 @@
1
- const fs = require("fs");
1
+ const fs = require('fs');
2
+ const path = require('path');
2
3
 
3
- function writer(code, fileName) {
4
- fs.writeFileSync(fileName, code);
5
- console.log("File created:", fileName);
6
- }
7
-
8
- module.exports = writer;
4
+ module.exports = function(jsCode, outputPath) {
5
+ try {
6
+ // ফাইলটি যে ডিরেক্টরিতে তৈরি হবে, তা নিশ্চিত করা
7
+ const dir = path.dirname(outputPath);
8
+ if (!fs.existsSync(dir)){
9
+ fs.mkdirSync(dir, { recursive: true });
10
+ }
11
+
12
+ // জাভাস্ক্রিপ্ট কোডটি ফাইলে লিখে দেওয়া
13
+ fs.writeFileSync(outputPath, jsCode, 'utf8');
14
+ } catch (error) {
15
+ console.error(`❌ ফাইল রাইট করতে সমস্যা হয়েছে (${outputPath}):`, error.message);
16
+ }
17
+ };
package/compiler.js CHANGED
@@ -1,33 +1,54 @@
1
1
  const fs = require('fs');
2
2
  const path = require('path');
3
-
4
3
  const scanner = require("./compiler/scanner");
5
4
  const parser = require("./compiler/parser");
6
5
  const writer = require("./compiler/writer");
7
6
 
8
- // 🌟 নতুন যুক্ত করা স্বয়ংক্রিয় রানার ফাংশন (আগের কোনো কোড পরিবর্তন না করে)
9
- function initFramework() {
10
- const files = scanner();
11
-
12
- console.log("Files:", files);
13
-
14
- for (const file of files) {
15
- console.log("Reading:", file.name);
16
- console.log("Code:", file.code);
17
-
18
- const tokens = file.code.split(/\s+/);
19
- console.log("Tokens:", tokens);
20
-
21
- const jsCode = parser(tokens);
22
- console.log("Generated JS:", jsCode);
23
-
24
- writer(jsCode, "./dist/output.js");
7
+ // ফাইল কম্পাইল করার মূল লজিক (যা আপনার আগের কোডেই ছিল)
8
+ function compileFiles() {
9
+ console.log("\n🔄 ফাইল পরিবর্তন সনাক্ত হয়েছে! কম্পাইল করা হচ্ছে...");
10
+
11
+ try {
12
+ const files = scanner();
13
+
14
+ for (const file of files) {
15
+ console.log("Reading:", file.name);
16
+ console.log("Code:", file.code);
17
+
18
+ const tokens = file.code.split(/\s+/);
19
+ console.log("Tokens:", tokens);
20
+
21
+ const jsCode = parser(tokens);
22
+ console.log("Generated JS:", jsCode);
23
+
24
+ // .my ফাইলের নামের ওপর ভিত্তি করে ডাইনামিকালি .js ফাইল তৈরি হবে
25
+ // যেমন: Index.my থাকলে তৈরি হবে Index.js, Shks.my থাকলে Shks.js
26
+ const outputFileName = file.name.replace(/\.my$/, '.js');
27
+
28
+ // রুট ডিরেক্টরিতে সরাসরি .js ফাইল রাইট করা
29
+ writer(jsCode, `./${outputFileName}`);
30
+ console.log(`✅ সফলভাবে আপডেট হয়েছে: ${outputFileName}`);
31
+ }
32
+ console.log("✨ সব ফাইল আপডেট কমপ্লিট! পরবর্তী পরিবর্তনের জন্য অপেক্ষা করা হচ্ছে...\n");
33
+ } catch (error) {
34
+ console.error("❌ কম্পাইল করার সময় ভুল হয়েছে:", error.message);
25
35
  }
26
-
27
- console.log("Compilation complete!");
28
36
  }
29
37
 
30
- // আপনার আগের কোডের সব ফাংশনালিটি অক্ষুণ্ণ রেখে এক্সপোর্ট করা হলো
31
- module.exports = {
32
- init: initFramework
33
- };
38
+ // 🚀 প্রথমবার ফাইলগুলো রান করার জন্য কল করা হলো
39
+ compileFiles();
40
+
41
+ // 👁️ লাইভ ওয়াচ সিস্টেম (Watch Mode)
42
+ // এটি আপনার বর্তমান প্রজেক্টের ফোল্ডারটিকে সারাক্ষণ পাহারা দেবে
43
+ console.log("👀 লাইভ ওয়াচ মোড চালু হয়েছে... আপনার .my ফাইলে কোড লিখে সেভ করুন।");
44
+
45
+ fs.watch(process.cwd(), { recursive: true }, (eventType, filename) => {
46
+ // যদি কোনো ফাইল পরিবর্তন হয় এবং সেটির এক্সটেনশন .my হয়
47
+ if (filename && filename.endsWith('.my')) {
48
+ // node_modules বা dist ফোল্ডারের ভেতর হলে ইগনোর করবে
49
+ if (filename.includes('node_modules') || filename.includes('dist')) return;
50
+
51
+ // ফাইলটি সেভ হওয়ার সাথে সাথে অটোমেটিক কম্পাইল ফাংশন রান হবে
52
+ compileFiles();
53
+ }
54
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mystic-yard",
3
- "version": "2.0.2",
3
+ "version": "2.0.4",
4
4
  "description": "It is total best a framework, become it have a very shortcut",
5
5
  "main": "compiler.js",
6
6
  "scripts": {