diff --git a/package-lock.json b/package-lock.json index c48bdbe..64e3cf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7406,14 +7406,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fuzzy": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", - "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -8296,6 +8288,7 @@ "version": "10.1.6", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-10.1.6.tgz", "integrity": "sha512-TDqkT2B9MpzzsuJYi139mJDmhRwE9iJejdIy4hWIDmBkmkg8aKB0O4F2/Dz1Zex77zyqm9GrYK1xFhlD6yn4zg==", + "dev": true, "dependencies": { "@inquirer/prompts": "^5.3.6", "@inquirer/type": "^1.5.1", @@ -12387,6 +12380,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -12418,6 +12412,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, "dependencies": { "tslib": "^2.1.0" } @@ -13300,7 +13295,8 @@ "node_modules/tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, "node_modules/type-check": { "version": "0.4.0", @@ -14074,9 +14070,7 @@ "version": "0.1.1", "dependencies": { "@inquirer/prompts": "^5.1.2", - "@jspsych/metadata": "^0.0.3", - "fuzzy": "^0.1.3", - "inquirer": "^10.0.1", + "@jspsych/metadata": "*", "yargs": "^17.7.2" }, "bin": { diff --git a/packages/cli/package.json b/packages/cli/package.json index b05b06a..0a09710 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -21,32 +21,14 @@ "require": "./dist/cjs/index.cjs" }, "scripts": { - "data": "node dist/esm/cli.js ../../dev/data", - "data:abs": "node dist/esm/cli.js ~/Documents/work/ursi2024/metadata/dev/data ~/Documents/work/ursi2024/metadata/dev/options/metadata-options.json", - "data:rec": "node dist/esm/cli.js ../../dev/data-rec", - "options": "node dist/esm/cli.js ../../dev/data ../../dev/options/metadata-options.json", "build": "npm run build:esm && npm run build:cjs", - "build:esm": "npm run build:no-prompt:esm && npm run build:data:esm && npm run build:validate:esm && npm run build:files:esm && npm run build:utils:esm && npm run build:cli:esm", - "build:no-prompt:esm": "esbuild src/cli.ts --bundle --format=esm --platform=node --outfile=dist/esm/cli.js", - "build:data:esm": "esbuild src/data.ts --packages=external --format=esm --platform=node --outfile=dist/esm/data.js", - "build:validate:esm": "esbuild src/validatefunctions.ts --packages=external --format=esm --platform=node --outfile=dist/esm/validatefunctions.js", - "build:files:esm": "esbuild src/handlefiles.ts --packages=external --format=esm --platform=node --outfile=dist/esm/handlefiles.js", - "build:utils:esm": "esbuild src/utils.ts --packages=external --format=esm --platform=node --outfile=dist/esm/utils.js", - "build:cli:esm": "esbuild src/index.ts --packages=external --format=esm --platform=node --outfile=dist/esm/index.js", - "cli": "node dist/esm/index.js", - "build:cjs": "npm run build:no-prompt:cjs && npm run build:data:cjs && npm run build:validate:cjs && npm run build:files:cjs && npm run build:utils:cjs && npm run build:cli:cjs", - "build:no-prompt:cjs": "esbuild src/cli.ts --bundle --format=cjs --platform=node --outfile=dist/cjs/cli.js", - "build:data:cjs": "esbuild src/data.ts --packages=external --format=cjs --platform=node --outfile=dist/cjs/data.js", - "build:validate:cjs": "esbuild src/validatefunctions.ts --packages=external --format=cjs --platform=node --outfile=dist/cjs/validatefunctions.js", - "build:files:cjs": "esbuild src/handlefiles.ts --packages=external --format=cjs --platform=node --outfile=dist/cjs/handlefiles.js", - "build:utils:cjs": "esbuild src/utils.ts --packages=external --format=cjs --platform=node --outfile=dist/cjs/utils.js", - "build:cli:cjs": "npm run build:utils:cjs && npm run build:files:cjs && npm run build:validate:cjs && npm run build:data:cjs && esbuild src/index.ts --packages=external --format=cjs --platform=node --outfile=dist/cjs/index.cjs" + "build:esm": "esbuild src/index.ts --bundle --format=esm --platform=node --outfile=dist/esm/index.js", + "build:cjs": "esbuild src/index.ts --bundle --format=cjs --platform=node --outfile=dist/cjs/index.cjs", + "cli": "node dist/esm/index.js" }, "dependencies": { "@inquirer/prompts": "^5.1.2", - "fuzzy": "^0.1.3", - "inquirer": "^10.0.1", - "@jspsych/metadata": "^0.0.3", + "@jspsych/metadata": "*", "yargs": "^17.7.2" } } diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts deleted file mode 100644 index 4ec8489..0000000 --- a/packages/cli/src/cli.ts +++ /dev/null @@ -1,33 +0,0 @@ -import JsPsychMetadata from "@jspsych/metadata"; -import { processDirectory, processOptions, saveTextToFile, generatePath } from "./data.js"; - -const metadata = new JsPsychMetadata(); - -if (!process.argv[2]) { - console.error("Providing the path is a required argument"); - process.exit(1); -} -const dataPath = generatePath(process.argv[2]); - -// Processes the different arguments -const update = async () => { - await processDirectory(metadata, dataPath); - - if (process.argv[3]){ // only call if pass in metadata options - processOptions(metadata, process.argv[3]); - } -} - -// figuring out the logic on how to save the data and how shoudl dicate hwo to write hte method to save it -const onFinish = () => { - const metadataString = JSON.stringify(metadata.getMetadata(), null, 2); // Assuming getMetadata() is the function that retrieves your metadata - console.log(metadataString); // Pretty print with 2 spaces for indentation - saveTextToFile(metadataString, "dataset_description.json", dataPath); -} - -async function main() { - await update(); - onFinish(); -} - -main(); \ No newline at end of file diff --git a/packages/cli/src/data.ts b/packages/cli/src/data.ts index 9a1b88a..b0993be 100644 --- a/packages/cli/src/data.ts +++ b/packages/cli/src/data.ts @@ -1,9 +1,10 @@ import fs from "fs"; import path from "path"; -import { expandHomeDir } from "./utils.js"; +import JsPsychMetadata from "@jspsych/metadata"; +import { expandHomeDir } from "./utils"; // creating path -> handles the absolute vs non-absolute paths -export const generatePath = (inputPath) => { +export const generatePath = (inputPath: string): string => { if (path.isAbsolute(inputPath)) { return inputPath; } else { @@ -11,7 +12,7 @@ export const generatePath = (inputPath) => { } }; -const copyFileWithStructure = async (sourceFilePath, verbose, targetDirectoryPath) => { +const copyFileWithStructure = async (sourceFilePath: string, verbose: boolean, targetDirectoryPath: string) => { try { sourceFilePath = expandHomeDir(sourceFilePath); targetDirectoryPath = expandHomeDir(targetDirectoryPath); @@ -32,7 +33,7 @@ const copyFileWithStructure = async (sourceFilePath, verbose, targetDirectoryPat }; // processing single file, need to refactor this into a seperate call -const processFile = async (metadata, directoryPath, file, verbose, targetDirectoryPath?) => { +const processFile = async (metadata: JsPsychMetadata, directoryPath: string, file: string, verbose: boolean, targetDirectoryPath?: string) => { const filePath = path.join(directoryPath, file); if (verbose) console.log("Reading file:", filePath); @@ -63,12 +64,12 @@ const processFile = async (metadata, directoryPath, file, verbose, targetDirecto } // Processing directory recursively up to one level -export const processDirectory = async (metadata, directoryPath, verbose=false, targetDirectoryPath?) => { +export const processDirectory = async (metadata: JsPsychMetadata, directoryPath: string, verbose: boolean = false, targetDirectoryPath?: string) => { directoryPath = expandHomeDir(directoryPath); let total = 0; let failed = 0; - const processDirectoryRecursive = async (currentPath, level) => { + const processDirectoryRecursive = async (currentPath: string, level: number) => { if (level > 1){ console.warn("Can only read subdirectories one level deep:", directoryPath); return; @@ -110,7 +111,7 @@ export const processDirectory = async (metadata, directoryPath, verbose=false, t }; // Processing metadata options json -export const processOptions = async (metadata, filePath, verbose=false) => { +export const processOptions = async (metadata: JsPsychMetadata, filePath: string, verbose: boolean = false) => { try { const metadata_options_path = expandHomeDir(generatePath(filePath)); const data = fs.readFileSync(metadata_options_path, "utf8"); // synchronous read @@ -127,21 +128,7 @@ export const processOptions = async (metadata, filePath, verbose=false) => { } } -// Saving data -export function saveTextToFile(textstr, filename, directory = '.') { - const filePath = path.join(directory, filename); - - fs.writeFile(filePath, textstr, 'utf8', (err) => { - if (err) { - console.error(`Error writing to file ${filePath}:`, err); - } else { - console.log(`File ${filePath} has been saved.`); - } - }); -} - -// in case path goes to file already -export function saveTextToPath(textstr, filePath = './file.txt') { +export function saveTextToPath(textstr: string, filePath: string = './file.txt') { filePath = expandHomeDir(filePath); fs.writeFile(filePath, textstr, 'utf8', (err) => { @@ -154,7 +141,7 @@ export function saveTextToPath(textstr, filePath = './file.txt') { } // function for loading metadata -export const loadMetadata = async (metadata, filePath) => { +export const loadMetadata = async (metadata: JsPsychMetadata, filePath: string) => { filePath = expandHomeDir(filePath); const fileName = path.basename(filePath).toLowerCase(); // Extract the file name from the filePath diff --git a/packages/cli/src/handlefiles.ts b/packages/cli/src/handlefiles.ts index ecf6572..a085d09 100644 --- a/packages/cli/src/handlefiles.ts +++ b/packages/cli/src/handlefiles.ts @@ -1,6 +1,6 @@ import fs from 'fs'; import path from 'path'; -import { expandHomeDir } from './utils.js'; +import { expandHomeDir } from './utils'; // creates directory structure for the Psych-Ds format allowing future functions to write data to here diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 802f379..255a33f 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -4,9 +4,9 @@ import yargs from 'yargs'; import { hideBin } from 'yargs/helpers'; import { input, select } from '@inquirer/prompts'; import JsPsychMetadata from "@jspsych/metadata"; -import { processDirectory, processOptions, saveTextToPath, loadMetadata } from "./data.js"; -import { validateDirectory, validateJson } from './validatefunctions.js'; -import { createDirectoryWithStructure } from './handlefiles.js'; +import { processDirectory, processOptions, saveTextToPath, loadMetadata } from "./data"; +import { validateDirectory, validateJson } from './validatefunctions'; +import { createDirectoryWithStructure } from './handlefiles'; // Define a type for the parsed arguments interface Argv { @@ -43,7 +43,7 @@ const argv = yargs(hideBin(process.argv)) .help() .argv as Argv; -async function metadataOptionsPrompt(metadata, verbose){ +async function metadataOptionsPrompt(metadata: JsPsychMetadata, verbose: boolean){ const answer = await select({ message: 'Would you like to customize the metadata by providing a .json specifying changes?', choices: [ @@ -78,7 +78,7 @@ async function metadataOptionsPrompt(metadata, verbose){ } -const promptProjectStructure = async (metadata) => { +const promptProjectStructure = async (metadata: JsPsychMetadata) => { const answer = await select({ message: 'Would you like to generate a new project directory or update an existing project directory?', choices: [ @@ -144,7 +144,7 @@ const promptName = async () => { return project_name; } -const promptData = async (metadata, verbose, targetDirectoryPath) => { +const promptData = async (metadata: JsPsychMetadata, verbose: boolean, targetDirectoryPath: string) => { // can prompt an additional reading data -> keeps reading data until it is done and then writes it to the data_directory of the folder var data_path; diff --git a/packages/cli/src/validatefunctions.ts b/packages/cli/src/validatefunctions.ts index 51b02ec..a5e0301 100644 --- a/packages/cli/src/validatefunctions.ts +++ b/packages/cli/src/validatefunctions.ts @@ -1,6 +1,6 @@ import fs from "fs"; import path from "path"; -import { expandHomeDir } from "./utils.js"; +import { expandHomeDir } from "./utils"; // Validating if input is a directory export const validateDirectory = async (filePath: string): Promise => {