
Research
Supply Chain Attack on Axios Pulls Malicious Dependency from npm
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.
RazzaqJS - Kumpulan fungsi dan prototipe yang berguna untuk pengembangan JavaScript.
razzaqjsrazzaqjs adalah sebuah modul Node.js yang menyediakan berbagai fungsi prototype & global yang memudahkan manipulasi jalur file, pengelolaan kelas, deklarasi variabel global, dan lain-lain. Modul ini dirancang untuk menyederhanakan dan mempercepat pengembangan aplikasi dengan memberikan utilitas yang sering dibutuhkan dalam pengembangan aplikasi berbasis JavaScript.
wadah digunakan untuk mengelola variabel global dengan menggunakan proxy: Kelas ini menyediakan metode untuk menetapkan (setel), mengambil (ambil), dan menghapus (hapus) variabel global.Letak di awal file pada script kamu. (misalnya: main.js / index.js)
import 'razzaqjs';
Untuk mengimpor modul, cukup panggil metode import pada string yang berisi jalur modul. Metode ini mendukung jalur relatif, jalur absolut, nama modul npm, dan nama modul bawaan Node.js.
import { fileURLToPath } from 'url';
import { createRequire } from 'module';
import path from 'path';
import fs from 'fs';
const require = createRequire(import.meta.url);
const watchedFiles = new Set();
String.prototype.import = async function() {
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
let modulePath;
let shouldWatch = false;
if (this.startsWith('./') || this.startsWith('../')) {
modulePath = path.resolve(__dirname, this);
shouldWatch = true;
} else if (this.startsWith('/')) {
modulePath = path.resolve(this);
shouldWatch = true;
} else {
try {
const npmModule = await import(`${this}?t=${Date.now()}`);
return npmModule.default !== undefined ? npmModule.default : npmModule;
} catch (npmError) {
try {
const builtInModule = await import(`node:${this}?t=${Date.now()}`);
return builtInModule.default !== undefined ? builtInModule.default : builtInModule;
} catch (builtInError) {
try {
const projectRoot = path.resolve(__dirname, '../../');
modulePath = path.resolve(projectRoot, this);
shouldWatch = true;
} catch (projectRootError) {
console.error(`Gagal mengimpor modul ${this} sebagai npm, modul bawaan, atau dari akar proyek:`, projectRootError);
throw projectRootError;
}
}
}
}
if (shouldWatch && !watchedFiles.has(modulePath)) {
try {
if (fs.existsSync(modulePath)) {
fs.watch(modulePath, (eventType, filename) => {
if (eventType === 'change') {
console.log(`File berubah: ${modulePath}. Reloading...`);
watchedFiles.delete(modulePath);
delete require.cache[require.resolve(modulePath)];
}
});
watchedFiles.add(modulePath);
} else {
console.error(`Membaca File: ${modulePath}`);
}
} catch (watchError) {
console.error(`Gagal melihat file ${modulePath}:`, watchError);
}
}
try {
const importedModule = await import(`${modulePath}?t=${Date.now()}`);
return importedModule.default !== undefined ? importedModule.default : importedModule;
} catch (error) {
console.error(`Gagal mengimpor modul ${this}:`, error);
throw error;
}
};
const myModule = await './myModule.js'.import();
const myModule = await '/path/to/myModule.js'.import();
const express = await 'express'.import();
const fs = await 'fs'.import();
Ketika Anda mengimpor modul lokal (dengan jalur relatif atau absolut), utility ini akan memantau perubahan pada file tersebut dan memuat ulang modul secara otomatis saat file berubah.
const myLocalModule = await './myLocalModule.js'.import();
Setelah file ./myLocalModule.js berubah, utility akan mendeteksi perubahan dan memuat ulang modul.
Berikut adalah contoh penggunaan fungsi-fungsi pewarnaan:
import warnaTambahan from './path/to/your/module';
const teksBerwarna = warnaTeks('Hello, world!', '31');
console.log(teksBerwarna);
const teksDenganLatar = warnaLatar('Hello, world!', '47');
console.log(teksDenganLatar);
const teksTebalDenganLatar = teksTebal('Hello, world!', '44');
console.log(teksTebalDenganLatar);
const teksLatarMerahHijau = latarMerahTeksHijau('Hello, world!');
console.log(teksLatarMerahHijau);
const teksHijauStabilo = teksHijau('Hello, world!');
console.log(teksHijauStabilo);
Berikut adalah contoh penggunaan template literal untuk pewarnaan:
const teksMerah = warna.warnaTeks`Hello, world!`('31');
console.log(teksMerah);
const latarPutihTeksHitam = warna.warnaLatar`Hello, world!`('47');
console.log(latarPutihTeksHitam);
const teksTebalDenganLatar = warna.teksTebal`Hello, world!`('44');
console.log(teksTebalDenganLatar);
Anda juga dapat menggunakan metode pewarnaan pada prototype string:
const teksBerwarna = 'Hello, world!'.warnaTeks('31');
console.log(teksBerwarna);
const teksDenganLatar = 'Hello, world!'.warnaLatar('47');
console.log(teksDenganLatar);
const teksTebalDenganLatar = 'Hello, world!'.teksTebal('44');
console.log(teksTebalDenganLatar);
const teksLatarMerahHijau = 'Hello, world!'.latarMerahTeksHijau();
console.log(teksLatarMerahHijau);
const teksHijauStabilo = 'Hello, world!'.teksHijau();
console.log(teksHijauStabilo);
Utility ini mendukung berbagai warna dan efek tambahan yang dapat digunakan sesuai kebutuhan:
const teksBiruTerang = 'Hello, world!'.biruTerang();
console.log(teksBiruTerang);
const teksMerahTebal = 'Hello, world!'.merahTebal();
console.log(teksMerahTebal);
Utility ini juga mengekspor objek warnaTambahan yang berisi kode-kode warna tambahan:
export default warnaTambahan;
Fungsi paket dan kelas wadah dalam modul razzaqjs memberikan cara untuk mendeklarasikan dan mengelola variabel global secara dinamis. Mereka memanfaatkan template string untuk deklarasi variabel dan menggunakan proxy untuk pengelolaan variabel global.
paketFungsi paket digunakan untuk mendeklarasikan variabel global menggunakan template string. Fungsi ini akan mengevaluasi nilai variabel dan menjadikannya variabel global jika belum ada dengan nilai yang berbeda.
paket`
server = "localhost";
`;
console.log(global.server); // Output: localhost
wadahKelas wadah digunakan untuk mengelola variabel global dengan menggunakan proxy. Kelas ini menyediakan metode untuk menetapkan (setel), mengambil (ambil), dan menghapus (hapus) variabel global.
// Menetapkan variabel global
wadah.setel('port', 8080);
console.log(wadah.ambil('port')); // Output: 8080
// Menghapus variabel global
wadah.hapus('port');
console.log(wadah.ambil('port')); // Error: Variabel "port" tidak ditemukan.
Metode setel, ambil, dan hapus ditambahkan ke Object.prototype untuk memudahkan penggunaan kelas wadah pada objek apapun.
setel, ambil, dan hapus pada semua objek secara langsung.const obj = {};
obj.setel('database', 'myDatabase');
console.log(obj.ambil('database')); // Output: myDatabase
obj.hapus('database');
console.log(obj.ambil('database')); // Error: Variabel "database" tidak ditemukan.
global.pathToFileURLMengkonversi jalur file ke URL file. Bisa menambahkan timestamp sebagai query parameter untuk keperluan cache busting.
const fileUrl = pathToFileURL('/path/to/file.txt', true);
console.log(fileUrl.href); // Output: file:///path/to/file.txt?v=1653465678901
Memudahkan konversi jalur file lokal ke URL file yang bisa digunakan dalam berbagai operasi yang membutuhkan URL file.
global.fileURLToPathMengkonversi URL file ke jalur file.
const filePath = fileURLToPath('file:///path/to/file.txt');
console.log(filePath); // Output: /path/to/file.txt
Memudahkan konversi URL file kembali ke jalur file lokal, yang berguna dalam operasi file sistem.
global.isAbsolutePathMemeriksa apakah sebuah jalur merupakan jalur absolut.
const isAbsolute = isAbsolutePath('/path/to/file.txt');
console.log(isAbsolute); // Output: true
Memudahkan validasi jalur file untuk memastikan apakah jalur tersebut bersifat absolut.
global.kelasMendeklarasikan kelas secara global dengan opsi pewarisan dari kelas induk.
kelas('Animal', function(name) {
this.name = name;
});
const myDog = new global.Animal('Dog');
console.log(myDog.name); // Output: Dog
kelas('Dog', function(name, breed) {
this.breed = breed;
}, 'Animal');
const myPet = new global.Dog('Rex', 'Labrador');
console.log(myPet.name); // Output: Rex
console.log(myPet.breed); // Output: Labrador
Memudahkan pembuatan dan pewarisan kelas secara dinamis tanpa harus menulis banyak boilerplate code.
global.paketMendeklarasikan variabel global dengan format template string. Memungkinkan deklarasi variabel dalam jumlah banyak sekaligus.
paket`
server = "localhost";
port = 8080;
`;
console.log(server); // Output: localhost
console.log(port); // Output: 8080
Mempercepat dan menyederhanakan deklarasi variabel global dengan format yang mudah dibaca dan ditulis.
String.prototype.cepatMendeklarasikan variabel global dengan memanfaatkan template string pada objek string. Memberikan cara alternatif untuk mendeklarasikan variabel global.
"Hello".cepat()`
greeting = "Hello, World!";
`;
console.log(greeting); // Output: Hello, World!
Memberikan fleksibilitas lebih dalam mendeklarasikan variabel global, terutama ketika bekerja dengan objek string.
Install modul razzaqjs dengan npm:
npm install razzaqjs
Kontribusi terbuka untuk siapa saja. Silakan buat pull request atau buka issue untuk fitur atau bug yang ingin Anda tambahkan atau perbaiki.
razzaqjs dilisensikan di bawah MIT License.
Semoga penjelasan ini membantu Anda memahami dan menggunakan razzaqjs dengan lebih baik.
Proyek ini dibuat oleh [Arifi Razzaq].
FAQs
RazzaqJS - Kumpulan fungsi dan prototipe yang berguna untuk pengembangan JavaScript.
We found that razzaqjs demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.

Security News
TeamPCP is partnering with ransomware group Vect to turn open source supply chain attacks on tools like Trivy and LiteLLM into large-scale ransomware operations.