diff --git a/package-lock.json b/package-lock.json index 66e4c3e..2837878 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,12 +27,30 @@ "webpack": "^5.99.9" }, "devDependencies": { + "@faker-js/faker": "^9.9.0", "@types/eslint-scope": "^8.3.0", "@types/estree": "^1.0.8", "@types/node": "^24.0.0", "classnames": "^2.5.1" } }, + "node_modules/@faker-js/faker": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.9.0.tgz", + "integrity": "sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0.0", + "npm": ">=9.0.0" + } + }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", diff --git a/package.json b/package.json index fc2f0d5..3641c8d 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "webpack": "^5.99.9" }, "devDependencies": { + "@faker-js/faker": "^9.9.0", "@types/eslint-scope": "^8.3.0", "@types/estree": "^1.0.8", "@types/node": "^24.0.0", diff --git a/src_bundle/index.mjs b/src/bundle/index.mjs similarity index 100% rename from src_bundle/index.mjs rename to src/bundle/index.mjs diff --git a/src/index.mjs b/src/index.mjs index 6f8289e..d1036de 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -1,16 +1,16 @@ -import { readFileSync ,realpathSync ,mkdirSync} from 'node:fs'; +import { readFileSync ,mkdirSync} from 'node:fs'; import { writeFile } from 'node:fs/promises'; -import tsm, { Project, SyntaxKind ,ts} from 'ts-morph'; +import { Project} from 'ts-morph'; import {getSliceAndInfoSync} from 'slice-js/src/slice-code/test/helpers/utils.js'; -import path, { dirname,join } from 'node:path'; +import path from 'node:path'; import { getImportCallsAndArgumentTypes } from './tsCalls.mjs'; -import { LibraryCallsRecorder } from './libcalls.mjs'; -import { wpCompress } from '../src_bundle/index.mjs'; +import { wpCompress } from './bundle/index.mjs'; +import { LibraryTypesRecorder } from './libcalls.mjs'; /** * - * @param {LibraryCallsRecorder['calls']} calls + * @param {ReturnType} calls * @param {string} FILE_PATH */ export async function sliceAndWriteCalls(calls, FILE_PATH) { diff --git a/src/js/LibraryCallsRecorder.mjs b/src/js/LibraryCallsRecorder.mjs new file mode 100644 index 0000000..58d34a0 --- /dev/null +++ b/src/js/LibraryCallsRecorder.mjs @@ -0,0 +1,30 @@ +/** + * Record library calls + */ + +export class LibraryCallsRecorder { + /** + * @type {Map>} + */ + #calls = new Map(); + /** + * + * @param {string} moduleName + * @param {string} libraryFunctionSegment + * @param {any[]} argumentsCalled + */ + pushToMap(moduleName, libraryFunctionSegment, argumentsCalled) { + const modulePortion = this.#calls.get(moduleName) ?? new Map(); + + const defArgs = modulePortion.get(libraryFunctionSegment) ?? []; + defArgs.push(argumentsCalled); + + modulePortion.set(libraryFunctionSegment, defArgs); + this.#calls.set(moduleName, modulePortion); + } + + get calls() { + return this.#calls; + } + +} diff --git a/src/libcalls.mjs b/src/libcalls.mjs index 12c647b..5c58598 100644 --- a/src/libcalls.mjs +++ b/src/libcalls.mjs @@ -1,82 +1,64 @@ - //@ts-check /** * @typedef {import('estree').Literal["value"]} GenericLiteralType */ import tsm, { Type } from 'ts-morph'; - -/** - * Record library calls - */ -export class LibraryCallsRecorder{ - /** - * @type {Map>} - */ - #calls = new Map(); - /** - * - * @param {string} moduleName - * @param {string} libraryFunctionSegment - * @param {any[]} argumentsCalled - */ - pushToMap(moduleName, libraryFunctionSegment, argumentsCalled){ - const modulePortion = this.#calls.get(moduleName)?? new Map(); - - const defArgs = modulePortion.get(libraryFunctionSegment) ?? []; - defArgs.push(argumentsCalled); - - modulePortion.set(libraryFunctionSegment,defArgs); - this.#calls.set(moduleName, modulePortion); - } - - get calls(){ - return this.#calls; - } - -} - -export class LibraryTypesRecorder{ +import { simpleFaker, faker } from '@faker-js/faker' +export class LibraryTypesRecorder { /** * @type {Map>} */ #calls = new Map(); /** - * @param {tsm.TypeChecker} checker + * @type {tsm.TypeChecker} checker */ checker; + + /** + * + * @param {tsm.TypeChecker} checker + */ + constructor(checker) { + this.checker = checker; + } /** * * @param {string} moduleName * @param {string} libraryFunctionSegment * @param {Type[]} argumentsCalled */ - pushToMap(moduleName, libraryFunctionSegment, argumentsCalled){ - const modulePortion = this.#calls.get(moduleName)?? new Map(); - + pushToMap(moduleName, libraryFunctionSegment, argumentsCalled) { + const modulePortion = this.#calls.get(moduleName) ?? new Map(); + const defArgs = modulePortion.get(libraryFunctionSegment) ?? []; defArgs.push(argumentsCalled); - modulePortion.set(libraryFunctionSegment,defArgs); + modulePortion.set(libraryFunctionSegment, defArgs); this.#calls.set(moduleName, modulePortion); } - get calls(){ + get calls() { return this.#calls; } - generateAllArgumentsForRecordedCalls(){ + generateAllArgumentsForRecordedCalls() { + /** + * @type {Map>} + */ const callMap = new Map(); - for(const [moduleName, modulePortion] of this.#calls){ + for (const [moduleName, modulePortion] of this.#calls) { /** * @type {Map} */ const moduleCallMap = new Map();// todo refactor - for(const [libraryFunctionSegment, argsList] of modulePortion){ - const argsForFunction = argsList.map(args=>args.map(arg=>this.instantiateType(arg))); - moduleCallMap.set(libraryFunctionSegment,argsForFunction); + for (const [libraryFunctionSegment, argsList] of modulePortion) { + const argsForFunctionSimple = argsList.map(args => args.map(arg => this.instantiateType(arg))); + const argsForFunction = argsList.flatMap(args => simpleFaker.helpers.multiple(()=> args.map(arg => this.instantiateFakerOnType(arg)))); + + moduleCallMap.set(libraryFunctionSegment, argsForFunction); } - callMap.set(moduleName,moduleCallMap); + callMap.set(moduleName, moduleCallMap); } return callMap; } @@ -87,50 +69,137 @@ export class LibraryTypesRecorder{ * @param {string} libraryFunctionSegment * @returns {(GenericLiteralType|null|undefined|{})[][]|undefined} */ - generateArgumentsForCall(moduleName, libraryFunctionSegment){ + generateArgumentsForCall(moduleName, libraryFunctionSegment) { const modulePortion = this.#calls.get(moduleName); - if(modulePortion===undefined){ + if (modulePortion === undefined) { return undefined; } - + const argsTypesForFunctionCalls = modulePortion.get(libraryFunctionSegment); - if(argsTypesForFunctionCalls===undefined){ + if (argsTypesForFunctionCalls === undefined) { return undefined; } - return argsTypesForFunctionCalls.map(argTypeForSingleCall=>{ - return argTypeForSingleCall.map(type=>{ - return LibraryTypesRecorder.instantiateType(type); - + return argsTypesForFunctionCalls.map(argTypeForSingleCall => { + return argTypeForSingleCall.map(type => { + return this.instantiateType(type); + }); }); + } + /** + * + * @param {Type} type + */ + instantiateFakerOnType(type) { + const literalValue = type.getLiteralValue(); + if (literalValue !== undefined) { + return literalValue; + } else if (type.isUndefined()) { + return undefined; + } else if (type.isString()) { + return simpleFaker.string.alphanumeric(); + } else if (type.isNumber()) { + return simpleFaker.number.int(); + } else if (type.isBoolean()) { + return simpleFaker.datatype.boolean(); + } else if (type.isArray()) { + return []// TODO - handle arrays; + } else if (type.isObject()) { + const newObj = {}; + for (const prop of type.getProperties()) { + const propName = prop.getName(); + const declarations = prop.getDeclarations(); + let propType = prop.getDeclaredType(); + if (declarations.length !== 1) { + console.warn("Multiple declarations for property", propName, "in type", type.getText()); + } else { + propType = this.checker.getTypeOfSymbolAtLocation(prop, declarations[0]); + } + newObj[propName] = this.instantiateFakerOnType(propType); + } + // TODO - handle functions + return newObj; + } else { + console.warn("Unknown type to instantiate", type.getText()); + if (type.isAny()) { + return simpleFaker.helpers.arrayElement([ + simpleFaker.string.sample(), + simpleFaker.number.int(), + simpleFaker.datatype.boolean(), + {}, + [] + ]); + } + return undefined; + } + } /** * * @param {Type} type * @returns */ - instantiateType(type){ - if(type.isStringLiteral()){ - return type.getLiteralValue(); - }else if(type.isNumberLiteral()){ - return Number(type.getText()); - }else if(type.isBooleanLiteral()){ - return type.getText() === 'true'; - }else if(type.isString()){ + instantiateType(type) { + const literalValue = type.getLiteralValue(); + if (literalValue !== undefined) { + return literalValue; + } else if (type.isUndefined()) { + return undefined; + } else if (type.isString()) { return ""; - }else if(type.isNumber()){ + } else if (type.isNumber()) { return 0; - }else if(type.isBoolean()){ + } else if (type.isBoolean()) { return false;// BAD IDEA - }else if(type.isArray()){ + } else if (type.isArray()) { return []; - }else if(type.isObject()){ + } else if (type.isObject()) { + const newObj = {}; + for (const prop of type.getProperties()) { + const propName = prop.getName(); + const declarations = prop.getDeclarations(); + let propType = prop.getDeclaredType(); + if (declarations.length !== 1) { + console.warn("Multiple declarations for property", propName, "in type", type.getText()); + } else { + propType = this.checker.getTypeOfSymbolAtLocation(prop, declarations[0]); + } + newObj[propName] = this.instantiateType(propType); + } // TODO - handle functions - return {}; - }else{ - console.warn("Unknown type to instantiate",type.getText()); + return newObj; + } else { + console.warn("Unknown type to instantiate", type.getText()); return undefined; } } + /** + * + * @param {Type} type + */ + instantiateMultipleFromType(type) { + if (type.isStringLiteral()) { + return [type.getLiteralValue()]; + } else if (type.isNumberLiteral()) { + return [Number(type.getText())]; + } else if (type.isBooleanLiteral()) { + return [type.getText() === 'true']; + } else if (type.is) { + + } else if (type.isString()) { + return ["", "a", "b"]; + } else if (type.isNumber()) { + return [0, 1, 2]; + } else if (type.isBoolean()) { + return [false, true]; + } else if (type.isArray()) { + return [[]]; + } else if (type.isObject()) { + // TODO - handle functions + return [{}]; + } + console.warn("Unknown type to instantiate", type.getText()); + return []; + } } \ No newline at end of file diff --git a/src/tsCalls.mjs b/src/tsCalls.mjs index a0c5bc2..b51845d 100644 --- a/src/tsCalls.mjs +++ b/src/tsCalls.mjs @@ -11,7 +11,7 @@ import { LibraryTypesRecorder } from './libcalls.mjs'; * @returns {LibraryTypesRecorder} instance of recorded library calls */ export function getImportCallsAndArgumentTypes(importDecls, checker, mainFilePath) { - const libraryCallsRecorder = new LibraryTypesRecorder(); + const libraryCallsRecorder = new LibraryTypesRecorder(checker); for (const importStringDecl of importDecls) { // console.log(importStringDecl); const importDecl = importStringDecl.getFirstAncestor(); diff --git a/src_bundle/README b/src_bundle/README deleted file mode 100644 index 2ac9a32..0000000 --- a/src_bundle/README +++ /dev/null @@ -1 +0,0 @@ -Reads a bundle and bundles its dependencies into objects. \ No newline at end of file diff --git a/src_bundle/install.sh b/src_bundle/install.sh deleted file mode 100644 index 16fd1c0..0000000 --- a/src_bundle/install.sh +++ /dev/null @@ -1 +0,0 @@ -npm i classnames semver ansi-styles debug supports-color chalk ms minimatch strip-ansi tslib has-flag ansi-regex color-convert color-name type-fest string-width \ No newline at end of file diff --git a/src_bundle/package-lock.json b/src_bundle/package-lock.json deleted file mode 100644 index 0d768a5..0000000 --- a/src_bundle/package-lock.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "name": "src_bundle", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "src_bundle", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "ansi-regex": "^6.1.0", - "ansi-styles": "^6.2.1", - "chalk": "^5.4.1", - "classnames": "^2.5.1", - "color-convert": "^3.1.0", - "color-name": "^2.0.0", - "debug": "^4.4.1", - "has-flag": "^5.0.1", - "minimatch": "^10.0.3", - "ms": "^2.1.3", - "semver": "^7.7.2", - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0", - "supports-color": "^10.0.0", - "tslib": "^2.8.1", - "type-fest": "^4.41.0" - } - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.0.tgz", - "integrity": "sha512-TVoqAq8ZDIpK5lsQY874DDnu65CSsc9vzq0wLpNQ6UMBq81GSZocVazPiBbYGzngzBOIRahpkTzCLVe2at4MfA==", - "license": "MIT", - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=14.6" - } - }, - "node_modules/color-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", - "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "license": "MIT" - }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/has-flag": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", - "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/supports-color": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz", - "integrity": "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/src_bundle/package.json b/src_bundle/package.json deleted file mode 100644 index 15e3e86..0000000 --- a/src_bundle/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "src_bundle", - "version": "1.0.0", - "description": "Reads a bundle and bundles its dependencies into objects.", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "ansi-regex": "^6.1.0", - "ansi-styles": "^6.2.1", - "chalk": "^5.4.1", - "classnames": "^2.5.1", - "color-convert": "^3.1.0", - "color-name": "^2.0.0", - "debug": "^4.4.1", - "has-flag": "^5.0.1", - "minimatch": "^10.0.3", - "ms": "^2.1.3", - "semver": "^7.7.2", - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0", - "supports-color": "^10.0.0", - "tslib": "^2.8.1", - "type-fest": "^4.41.0" - } -} diff --git a/test_src/index.mjs b/test_src/index.mjs index 857c3e0..99e7ae8 100644 --- a/test_src/index.mjs +++ b/test_src/index.mjs @@ -1,10 +1,10 @@ import fs,{readFile} from 'node:fs' -// import classnames from 'classnames' -import * as s from 'esprima' +import classnames from 'classnames' +// import * as s from 'esprima' // import {sum, div} from './arithmetic.cjs'; console.log(s.parseScript("const a = 5;")); // $ExpectType boolean -// console.log(classnames({a:true,b:true})); // $ExpectType string +console.log(classnames(Object.freeze({a:true,b:true}))); // $ExpectType string // console.log(sum(2, 3)); // console.log(neq('1.0.0', '1.0.1')); // $ExpectType boolean \ No newline at end of file