feat: update package.json to include mocha and chai for testing, add ansi-colors and fastest-levenshtein dependencies
refactor: modify sliceAndWriteCalls function to accept folderPath parameter and update driver function to use it fix: enhance isNodeModule function to utilize builtinModules for better module detection chore: remove unused constants file from utils test: clean up instantiation.spec.js by removing commented assertions
This commit is contained in:
832
package-lock.json
generated
832
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -5,13 +5,14 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node src/index.mjs",
|
"start": "node src/index.mjs",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "mocha test"
|
||||||
},
|
},
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"description": "",
|
"description": "",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"all-the-package-repos": "^2.0.2306",
|
"all-the-package-repos": "^2.0.2306",
|
||||||
|
"ansi-colors": "^4.1.3",
|
||||||
"csv": "^6.3.11",
|
"csv": "^6.3.11",
|
||||||
"download-counts": "^2.20250701.0",
|
"download-counts": "^2.20250701.0",
|
||||||
"eslint-scope": "^8.4.0",
|
"eslint-scope": "^8.4.0",
|
||||||
@@ -19,12 +20,14 @@
|
|||||||
"esquery": "^1.6.0",
|
"esquery": "^1.6.0",
|
||||||
"esrecurse": "^4.3.0",
|
"esrecurse": "^4.3.0",
|
||||||
"estraverse": "^5.3.0",
|
"estraverse": "^5.3.0",
|
||||||
|
"fastest-levenshtein": "^1.0.16",
|
||||||
"find-package-json": "^1.2.0",
|
"find-package-json": "^1.2.0",
|
||||||
"git-client": "^1.9.3",
|
"git-client": "^1.9.3",
|
||||||
"glob": "^11.0.3",
|
"glob": "^11.0.3",
|
||||||
"jalangi2": "^0.2.6",
|
"jalangi2": "^0.2.6",
|
||||||
"semver": "^7.7.2",
|
"semver": "^7.7.2",
|
||||||
"set.prototype.intersection": "^1.1.7",
|
"set.prototype.intersection": "^1.1.7",
|
||||||
|
"slice-js": "file:/home/atreyab/Documents/Docs/SlicingImport/repos-js/slice-js",
|
||||||
"ts-morph": "^26.0.0",
|
"ts-morph": "^26.0.0",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.3",
|
||||||
"webpack": "^5.99.9"
|
"webpack": "^5.99.9"
|
||||||
@@ -34,6 +37,8 @@
|
|||||||
"@types/eslint-scope": "^8.3.0",
|
"@types/eslint-scope": "^8.3.0",
|
||||||
"@types/estree": "^1.0.8",
|
"@types/estree": "^1.0.8",
|
||||||
"@types/node": "^24.0.0",
|
"@types/node": "^24.0.0",
|
||||||
"classnames": "^2.5.1"
|
"chai": "^5.2.1",
|
||||||
|
"classnames": "^2.5.1",
|
||||||
|
"mocha": "^11.7.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,8 +11,9 @@ import { LibraryTypesRecorder } from './libcalls.mjs';
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {ReturnType<LibraryTypesRecorder['generateAllArgumentsForRecordedCalls']>} calls
|
* @param {ReturnType<LibraryTypesRecorder['generateAllArgumentsForRecordedCalls']>} calls
|
||||||
|
* @param {string} folderPath
|
||||||
*/
|
*/
|
||||||
export async function sliceAndWriteCalls(calls) {
|
export async function sliceAndWriteCalls(calls, folderPath) {
|
||||||
const writePromises = [];
|
const writePromises = [];
|
||||||
|
|
||||||
for (const [moduleName, callBox] of calls) {
|
for (const [moduleName, callBox] of calls) {
|
||||||
@@ -24,8 +25,9 @@ export async function sliceAndWriteCalls(calls) {
|
|||||||
|
|
||||||
// const relatedModuleNamePath = import.meta.resolve(moduleName);
|
// const relatedModuleNamePath = import.meta.resolve(moduleName);
|
||||||
// console.log(`Related module path`, relatedModuleNamePath);
|
// console.log(`Related module path`, relatedModuleNamePath);
|
||||||
|
console.log("[wp] Compressing module", moduleName);
|
||||||
const relatedModuleNamePath = await wpCompress(moduleName)
|
// throw Error("Module slicing not implemented yet");
|
||||||
|
const relatedModuleNamePath = await wpCompress(moduleName,folderPath );
|
||||||
const fileSource = readFileSync(relatedModuleNamePath).toString('utf-8');
|
const fileSource = readFileSync(relatedModuleNamePath).toString('utf-8');
|
||||||
// continue; // TODO - handle relative modules
|
// continue; // TODO - handle relative modules
|
||||||
const { slicedCode } = getSliceAndInfoSync(fileSource, (moduleExports) => {
|
const { slicedCode } = getSliceAndInfoSync(fileSource, (moduleExports) => {
|
||||||
@@ -66,11 +68,12 @@ export async function sliceAndWriteCalls(calls) {
|
|||||||
}).catch(console.log);
|
}).catch(console.log);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// is-glob WORKED
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {string} filePath
|
* @param {string} filePath
|
||||||
*/
|
*/
|
||||||
function driver(folderPath = './test_src/anymatch') {
|
function driver(folderPath = './candidates/braces') {
|
||||||
// const FILE_PATH = './test_src/index.cjs';
|
// const FILE_PATH = './test_src/index.cjs';
|
||||||
|
|
||||||
const project = new Project({ compilerOptions: { allowJs: true, checkJs: false, } });
|
const project = new Project({ compilerOptions: { allowJs: true, checkJs: false, } });
|
||||||
@@ -96,15 +99,19 @@ function driver(folderPath = './test_src/anymatch') {
|
|||||||
const callMap = libraryTypesRecorder.generateAllArgumentsForRecordedCalls();
|
const callMap = libraryTypesRecorder.generateAllArgumentsForRecordedCalls();
|
||||||
|
|
||||||
|
|
||||||
logCallList(callMap, 'FakeModuleName');
|
logCallList(callMap, folderPath);
|
||||||
sliceAndWriteCalls(callMap).then(() => {
|
sliceAndWriteCalls(callMap, folderPath).then(() => {
|
||||||
console.log("Slicing and writing calls done");
|
console.log("Slicing and writing calls done");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.argv[1] === import.meta.filename) {
|
if (process.argv[1] === import.meta.filename) {
|
||||||
console.log("[SafeImport] started");
|
if(process.argv.length >2 && process.argv[2] !== '') {
|
||||||
driver();
|
console.log(`[SafeImport] started ${process.argv[2]}`);
|
||||||
|
driver(process.argv[2]);
|
||||||
|
}else{
|
||||||
|
console.log("[SafeImport] started");
|
||||||
|
driver();}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import tsm, { Identifier, ImportSpecifier, StringLiteral, SyntaxKind, ts, } from 'ts-morph';
|
import tsm, { Identifier, ImportSpecifier, StringLiteral, SyntaxKind, ts, } from 'ts-morph';
|
||||||
import { LibraryTypesRecorder } from './libcalls.mjs';
|
import { LibraryTypesRecorder } from './libcalls.mjs';
|
||||||
|
import {builtinModules} from 'node:module'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -50,6 +51,7 @@ export function getImportCallsAndArgumentTypes(importDecls, checker, mainFilePat
|
|||||||
// const importArgs = importDecl.getArguments();
|
// const importArgs = importDecl.getArguments();
|
||||||
|
|
||||||
const parent = importDecl.getParent();
|
const parent = importDecl.getParent();
|
||||||
|
console.log("Parent of import call", parent?.getKindName(), parent?.getText());
|
||||||
if (parent?.isKind(SyntaxKind.VariableDeclaration)) {
|
if (parent?.isKind(SyntaxKind.VariableDeclaration)) {
|
||||||
// this is a variable declaration
|
// this is a variable declaration
|
||||||
const varDecl = parent;
|
const varDecl = parent;
|
||||||
@@ -76,9 +78,6 @@ export function getImportCallsAndArgumentTypes(importDecls, checker, mainFilePat
|
|||||||
console.log("Variable name", varName);
|
console.log("Variable name", varName);
|
||||||
// check if declaration is identifier or object pattern
|
// check if declaration is identifier or object pattern
|
||||||
}
|
}
|
||||||
console.log("Require arguments. Skipping");
|
|
||||||
continue;
|
|
||||||
throw Error("Not implemented yet");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,8 +297,11 @@ export function isRelativeModule(moduleName) {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export function isNodeModule(moduleName) {
|
export function isNodeModule(moduleName) {
|
||||||
if (moduleName.startsWith('node:')) return true;
|
if (builtinModules.includes(moduleName) ) return true;
|
||||||
const nodeModules = ['fs', 'fs/promises', 'path', 'http', 'https', 'os', 'crypto','assert'];
|
if (moduleName.startsWith('node:')) {
|
||||||
return nodeModules.includes(moduleName);
|
return builtinModules.includes(moduleName.substring(5));// strip node: prefix
|
||||||
|
}
|
||||||
|
// const nodeModules = ['fs', 'fs/promises', 'path', 'http', 'https', 'os', 'crypto','assert'];
|
||||||
|
// return nodeModules.includes(moduleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,3 +0,0 @@
|
|||||||
|
|
||||||
export const prependString = `(function(exports, require, module, __filename, __dirname) {\n`
|
|
||||||
export const appendString = `\n});`
|
|
@@ -113,9 +113,6 @@ describe('Instantiation tests',function () {
|
|||||||
console.log(ans);
|
console.log(ans);
|
||||||
assert.isArray(ans);
|
assert.isArray(ans);
|
||||||
assert.isArray([10, 'a'], ans);
|
assert.isArray([10, 'a'], ans);
|
||||||
// assert.isBoolean(ans.x);
|
|
||||||
// assert.isObject(ans.parent);
|
|
||||||
// assert.isNumber(ans.data);
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user