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.
- package/compiler/parser.js +17 -20
- package/compiler/scanner.js +22 -22
- package/compiler/writer.js +16 -7
- package/compiler.js +45 -24
- package/package.json +1 -1
package/compiler/parser.js
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
12
|
+
// অন্য কোনো সাধারণ জাভাস্ক্রিপ্ট কোড থাকলে সরাসরি বসাবে
|
|
13
|
+
if (tokens[i].trim() !== "") {
|
|
14
|
+
jsCode += tokens[i] + " ";
|
|
15
|
+
}
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
output += " ";
|
|
18
17
|
}
|
|
19
|
-
|
|
20
|
-
return
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
module.exports = parser;
|
|
18
|
+
|
|
19
|
+
return jsCode.trim();
|
|
20
|
+
};
|
package/compiler/scanner.js
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
const fs = require(
|
|
2
|
-
const path = require(
|
|
3
|
-
const config = require("../config");
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
4
3
|
|
|
5
|
-
function
|
|
6
|
-
const
|
|
4
|
+
function scanDir(dirPath, fileList = []) {
|
|
5
|
+
const files = fs.readdirSync(dirPath);
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
files.forEach(file => {
|
|
8
|
+
const filePath = path.join(dirPath, file);
|
|
9
|
+
const stat = fs.statSync(filePath);
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
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 =
|
|
27
|
+
module.exports = function() {
|
|
28
|
+
return scanDir(process.cwd());
|
|
29
|
+
};
|
package/compiler/writer.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
const fs = require(
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
2
3
|
|
|
3
|
-
function
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
32
|
-
|
|
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
|
+
});
|