diff --git a/.gitignore b/.gitignore
index 9d02145..67dc814 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@ dist
/docs/.vitepress/dist/
/dev/win-to-wsl/logs/
/temp/
+/dev/node-fs-utils-dev/tests/dev-specific/temp/
diff --git a/.run/ghGenerateAndDeploy.run.xml b/.run/ghGenerateAndDeploy.run.xml
new file mode 100644
index 0000000..7764ddb
--- /dev/null
+++ b/.run/ghGenerateAndDeploy.run.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/spawncmd empty env.run.xml b/.run/spawncmd empty env.run.xml
new file mode 100644
index 0000000..9d2b8e4
--- /dev/null
+++ b/.run/spawncmd empty env.run.xml
@@ -0,0 +1,17 @@
+
+
+ project
+
+ $PROJECT_DIR$/node_modules/mocha
+ $PROJECT_DIR$
+ false
+ bdd
+
+ SUITE
+ $PROJECT_DIR$/dev/node-fs-utils-dev/tests/dev-specific/spawnCmd-cwd.test.mjs
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/try pwd (no env)_.run.xml b/.run/try pwd (no env)_.run.xml
new file mode 100644
index 0000000..e70356e
--- /dev/null
+++ b/.run/try pwd (no env)_.run.xml
@@ -0,0 +1,18 @@
+
+
+ project
+
+ $PROJECT_DIR$/node_modules/mocha
+ $PROJECT_DIR$
+ false
+ bdd
+
+ TEST
+ $PROJECT_DIR$/dev/node-fs-utils-dev/tests/dev-specific/spawnCmd-cwd.test.mjs
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app.vue b/app.vue
index d1fd51d..f0664ec 100644
--- a/app.vue
+++ b/app.vue
@@ -54,9 +54,12 @@
// import {win32ToWin32Slash, win32ToWin32WSL2} from "~/src/win32ToWin32WSL2.mjs";
import {posixTests, win32Tests} from "~/lib/nodePathTestExamples.mjs";
+import {pathPosixToWin32, pathWin32ToPosix,win32ToWin32JS,win32ToWin32Slash,win32ToWin32WSL2} from "~/lib/dist/index.mjs";
+
+//## not working for some reason
// import {posixTests, win32Tests} from "##/lib/nodePathTestExamples.mjs";
// import {pathPosixToWin32, pathWin32ToPosix,win32ToWin32JS,win32ToWin32Slash,win32ToWin32WSL2} from "##/lib/dist/index.mjs";
-import {pathPosixToWin32, pathWin32ToPosix,win32ToWin32JS,win32ToWin32Slash,win32ToWin32WSL2} from "##/lib/dist/index.mjs";
+// import {pathPosixToWin32, pathWin32ToPosix,win32ToWin32JS,win32ToWin32Slash,win32ToWin32WSL2} from "##/lib/dist/index.mjs";
export default {
name:'app',
mounted(){
@@ -82,7 +85,11 @@ export default {
[
"C:\\Users\\Public\\Documents",
"C:\\\\Users\\\\Public\\\\Documents",
- "C:\\Users\\Public\\temp spaces\\a\\b c\\d"
+ "C:\\Users\\Public\\temp spaces\\a\\b c\\d",
+ `"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"`,
+ `C:\\progra~1\\PowerShell\\7\\pwsh.exe`,
+ `C:\\cygwin64\\bin\\bash.exe`,
+ `C:\\Windows\\System32\\cmd.exe`
].join('\n'),
}
},
diff --git a/dev/node-fs-utils-dev/SpawnCmd.mjs b/dev/node-fs-utils-dev/SpawnCmd.mjs
index 009761a..7421050 100644
--- a/dev/node-fs-utils-dev/SpawnCmd.mjs
+++ b/dev/node-fs-utils-dev/SpawnCmd.mjs
@@ -11,6 +11,13 @@ import { spawn } from 'node:child_process'
import {stdout,stderr} from 'node:process'
/** might be better just to use buffer like they are */
+/**
+ *
+ * @param cmd
+ * @param args
+ * @param opts - {shell:true} or path... to shell?
+ * @return {Promise}
+ */
export function spawnExecCmd(cmd,args=[],opts={}){
const actual = {shell:true,...opts}
return new Promise((resolve, reject) => {
diff --git a/dev/node-fs-utils-dev/SpawnCmd.test.mjs b/dev/node-fs-utils-dev/SpawnCmd.test.mjs
index 2d651ba..61a4716 100644
--- a/dev/node-fs-utils-dev/SpawnCmd.test.mjs
+++ b/dev/node-fs-utils-dev/SpawnCmd.test.mjs
@@ -79,14 +79,18 @@ function writeToFile(fileName,data,space=2){
import {promisify} from 'node:util';
import {spawn,spawnSync} from 'node:child_process';
import {spawnExecCmd} from "##/dev/node-fs-utils-dev/SpawnCmd.mjs";
+import {cwd} from 'node:process';
+function assertEcho(actual,expected){
+ assert.strictEqual(actual.replace(/\r/g,''),expected);
+}
describe('SpawnCmd.test.mjs', function(){
it('spawnExecCmd', async function(){
this.timeout(5000);
let out;
out = await spawnExecCmd('echo hi',[],{shell:true});
// console.log(out);
- assert.strictEqual(out.stdout,'hi\n');
+ assertEcho(out.stdout,'hi\n');
});
it('spawnSync', async function(){
this.timeout(5000);
@@ -100,10 +104,17 @@ describe('SpawnCmd.test.mjs', function(){
// console.log(out);
//UintArrasy
// const tmp = new Uint8Array(stdout);
- assert.strictEqual(hello,'hi\n');
+ assertEcho(hello,'hi\n');
});
+
});
+/**
+ * look at
+ * spawnCmd-cwd.test.mjs
+ * for device specific
+ */
+//
describe('SpawnCmd.test.mjs experiments', function(){
/**
* doesnt work
@@ -116,3 +127,7 @@ describe('SpawnCmd.test.mjs experiments', function(){
console.log(out);
});
});
+
+/**
+ * env seems to be done in vite-press-docs.git
+ */
\ No newline at end of file
diff --git a/dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1 b/dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1
new file mode 100644
index 0000000..96f56af
--- /dev/null
+++ b/dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1
@@ -0,0 +1,24 @@
+#!/usr/bin/env pwsh.exe
+<#
+ node
+ pwsh.exe dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1
+ pwsh.exe dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1 -NODE_FIRST_ARG "pwsh-cli"
+ $env:NODE_FIRST_ARG="pwsh-man-cli";pwsh.exe dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1
+#>
+# addd params
+param(
+ [string] $NODE_FIRST_ARG="pwsh-int"
+)
+if(!$env:NODE_FIRST_ARG){
+ $env:NODE_FIRST_ARG=$NODE_FIRST_ARG
+}
+# set NODE_FIRST_ARG=$NODE_FIRST_ARG
+# get current parent dir
+$parentDir = Split-Path -Path $MyInvocation.MyCommand.Path -Parent
+#
+write-host "$parentDir/temp/$NODE_FIRST_ARG.txt"
+c:/progra~1/PowerShell/7/pwsh.exe -c Get-ChildItem env: > "$parentDir/temp/$NODE_FIRST_ARG.txt"
+#node "$parentDir/generate-env.mjs"
+#which.exe node.exe
+node.exe -v
+write-host "$parentDir/generate-env.mjs"
diff --git a/dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.sh b/dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.sh
new file mode 100644
index 0000000..6e834a2
--- /dev/null
+++ b/dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash.exe
+# cd /mnt/c/Users/Jason/WebstormProjects/nuxt3-win32-posix-path
+# c:/cygwin64/bin/env.exe
+cd /mnt/c/Users/Jason/WebstormProjects/nuxt3-win32-posix-path
+PROOT="/mnt/c/Users/Jason/WebstormProjects/nuxt3-win32-posix-path"
+NODE="/mnt/c/Users/Jason/AppData/Roaming/nvm/v16.20.1/node.exe"
+$NODE -v
+pwd
+# get current file directory
+parentDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+echo $parentDir
+echo "$parentDir/generate-env.mjs"
+# export NODE_FIRST_ARG="cygwin"; $NODE "$parentDir/generate-env.mjs"
+export NODE_PATH="/mnt/c/Users/Jason/WebstormProjects/nuxt3-win32-posix-path/node_modules/.pnpm/node_modules"
+export NODE_FIRST_ARG="cygwin"; $NODE "$PROOT/dev/node-fs-utils-dev/tests/dev-specific/generate-env.mjs"
diff --git a/dev/node-fs-utils-dev/tests/dev-specific/generate-env.mjs b/dev/node-fs-utils-dev/tests/dev-specific/generate-env.mjs
new file mode 100644
index 0000000..601fa6a
--- /dev/null
+++ b/dev/node-fs-utils-dev/tests/dev-specific/generate-env.mjs
@@ -0,0 +1,28 @@
+#!/usr/bin/env node
+/**
+ * .....pnpm run dev/node-fs-utils-dev/tests/dev-specific/generate-env.mjs
+ * assumes pwd is project root
+ node dev/node-fs-utils-dev/tests/dev-specific/generate-env.mjs
+ */
+console.log("process.env.NODE_FIRST_ARG:",process.env.NODE_FIRST_ARG);
+import { log } from "node:console";
+import fs from "node:fs";
+import {dirname} from "node:path"
+import {fileURLToPath} from "node:url"
+console.log("import.meta.url:",import.meta.url);
+const __dirname = dirname(fileURLToPath(import.meta.url)); //Folder of current file (from file://url)
+function writeToFile(fileName,data,space=2){
+ const sFileName = /\./.test(fileName) ? fileName : fileName + '.json';
+ const filePath = `${__dirname}/temp/${sFileName}`
+ fs.writeFileSync(filePath,
+ typeof data === 'string' ? data :JSON.stringify(data,null,+space)
+ );
+}
+
+/* get first args */
+// const args = process.argv.slice(2);
+// console.log(args);
+// const [firstArg] = args || ["cli-env"];
+const firstArg = process.env.NODE_FIRST_ARG || "cli-env";
+
+writeToFile(`${firstArg}.raw.json`,JSON.stringify(process.env,null,2));//this works... lol interesting
diff --git a/dev/node-fs-utils-dev/tests/dev-specific/spawnCmd-cwd.test.mjs b/dev/node-fs-utils-dev/tests/dev-specific/spawnCmd-cwd.test.mjs
new file mode 100644
index 0000000..928ac91
--- /dev/null
+++ b/dev/node-fs-utils-dev/tests/dev-specific/spawnCmd-cwd.test.mjs
@@ -0,0 +1,364 @@
+import {describe, it} from "mocha";
+import {cwd} from "node:process";
+import {spawnExecCmd} from "##/dev/node-fs-utils-dev/SpawnCmd.mjs";
+import assert from "node:assert";
+import {resolve} from "node:path/posix";
+import Path from "node:path";
+import {spawnSync} from "node:child_process";
+import fs from "node:fs";
+
+import {dirname} from "node:path/posix"
+import {fileURLToPath} from "node:url"
+const __dirname = dirname(fileURLToPath(import.meta.url)); //Folder of current file (from file://url)
+//import from url.fileURLToPath and path.dirname
+const __filename = fileURLToPath(import.meta.url); //file (from file://url)
+function writeToFile(fileName,data,space=2){
+ const sFileName = /\./.test(fileName) ? fileName : fileName + '.json';
+ const filePath = `${__dirname}/temp/${sFileName}`
+ fs.writeFileSync(filePath,
+ typeof data === 'string' ? data :JSON.stringify(data,null,+space)
+ );
+}
+/**
+ * Device specific nt machine with cygwin
+ */
+describe('spawnCmd-cwd.test.mjs - cygwin', function(){
+ it('spawnExecCmd cwd nt cygwin', async function(){
+ //assuming cygwin
+ this.timeout(5000);
+ let out;
+ const currentDir = cwd();
+ let shell
+ // shell = `C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`;//slow though
+ shell = true; //23 ms... vs like 1.5s with powershell
+ out = await spawnExecCmd('C:\\cygwin64\\bin\\pwd.exe',[],{shell,cwd:currentDir});
+ const {stdout,output,status,signal,pid,stderr} = out;
+ assert.match(stdout.replace('\n',''),/nuxt3-win32-posix-path$/);
+ });
+ it('spawnExecCmd cwd nt cygwin public', async function(){
+ //assuming cygwin
+ const expected = '/cygdrive/c/Users/Public';
+ this.timeout(5000);
+ let out;
+ let shell,cwd
+ shell = true; //23 ms... vs like 1.5s with powershell
+ cwd = "c:/Users/Public"
+ out = await spawnExecCmd('C:\\cygwin64\\bin\\pwd.exe',[],{shell,cwd});
+ const {stdout,output,status,signal,pid,stderr} = out;
+ const actual = stdout.replace('\n','');
+ assert.strictEqual(actual,expected);
+ // console.log(out);
+ });
+ it('pnpm version', async function(){
+ let out;
+ out = await spawnExecCmd('pnpm',['--version'],{shell:true});
+ assert.match(out.stdout,/^\d+\.\d+\.\d+\n$/);//i.e. 8.6.5
+
+ // out = await spawnExecCmd('where.exe',['pnpm'],{shell:true});
+ // assert.match(out.stdout,/^\d+\.\d+\.\d+\n$/);//i.e. 8.6.5
+ });
+ it('parent of filepath exists', async function(){
+ const childFolderInput = '/cygdrive/c/Users/Public/Downloads';
+ const expected = '/cygdrive/c/Users/Public';
+ const actual = resolve(childFolderInput,'..');
+ assert.strictEqual(actual,expected);
+
+ });
+ //works as expected
+ it('parent of filepath dne', async function(){
+ const childFolderInput = '/cygdrive/c/Users/Public/fsdfsdce';
+ const expected = '/cygdrive/c/Users/Public';
+ const actual = resolve(childFolderInput,'..');
+ assert.strictEqual(actual,expected);
+
+ });
+});
+
+
+/**
+ * spawnSyncAssert - for testing... maybe export later
+ * todo add factory function / class
+ * @param cmd
+ * @param args
+ * @param expected
+ * @param options
+ * @return {SpawnSyncReturns}
+ */
+function spawnSyncAssert(cmd,args,expected,options={}){
+ const actualOptions = {shell:true,...options};
+ const out = spawnSync(cmd,args,actualOptions)
+ if(out.status !==0){
+ console.error('stderr: ',out.stderr?.toString());
+ console.error(out.error)
+ throw out.error;
+ }
+ const stdout = out.stdout?.toString();
+ assert.strictEqual(stdout,expected)
+ return out;
+
+}
+/**
+ * Empty webstorm runner.
+ * i.e. no env variables, no runner. save to project file
+ */
+
+const pwsh = "c:/progra~1/PowerShell/7/pwsh.exe"
+/**
+ * IT's a windows problem. mac didnt need any envs. or it did it ok. at least with node 18
+ */
+describe('spawncmd empty env', function(){
+ it('nodejs dump env',function(done){
+ process.env.NODE_FIRST_ARG = 'empty-env-node-dump'
+ import('./generate-env.mjs').then(({generateEnv})=>{
+ assert.ok(fs.existsSync("dev/node-fs-utils-dev/tests/dev-specific/temp/empty-env-node-dump.raw.json"))
+ done()
+ });
+ });
+ it('dump env',function(){
+ // fixme check
+ writeToFile('no-env.raw.json',JSON.stringify(process.env,null,2));//this works... lol interesting
+ const out = spawnSync(pwsh,['-c','Get-ChildItem env:'],{shell:true})
+ writeToFile('no-env.txt',out.stdout);//this works... lol interesting
+ });
+ /**
+ * https://github.com/codeforwings/nuxt3-win32-posix-path/issues/9
+ *
+ */
+ it("try pwd no env",function(){
+ this.timeout(8000);
+ //shell-no-env.raw.json works but .txt doesnt...
+ //
+ let output,options;
+ options = {
+ // shell:false,
+ // shell:"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
+ shell:true,
+ env:{},
+ envs:{
+ NODE_FIRST_ARG:'shell-no-env',
+ PWD:cwd(),
+ //defn works when copied in... wonder what was missing
+ "COMSPEC": "C:\\Windows\\system32\\cmd.exe",
+ "HOMEDRIVE": "C:",
+ "HOMEPATH": "\\Users\\Jason",
+ "LOGONSERVER": "\\\\DESKTOP-2FU8K8O",
+ // "PATH": "c:\\progra~1\\PowerShell\\7;C:\\Program Files\\ImageMagick-7.1.1-Q16-HDRI;C:\\Program Files (x86)\\OpenSSH\\;C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.7\\bin;C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.7\\libnvvp;C:\\Program Files\\Common Files\\Oracle\\Java\\javapath;C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\windows\\system32;C:\\windows;C:\\windows\\System32\\Wbem;C:\\windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\windows\\System32\\OpenSSH\\;C:\\Program Files\\PuTTY\\;C:\\ProgramData\\chocolatey\\bin;C:\\Program Files\\NVIDIA Corporation\\Nsight Compute 2022.2.0\\;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Program Files\\NVIDIA Corporation\\NVIDIA NvDLISR;C:\\Users\\Jason\\AppData\\Roaming\\nvm;C:\\Program Files\\nodejs;C:\\Program Files\\dotnet\\;C:\\SysinternalsSuite;C:\\Program Files (x86)\\Incredibuild;C:\\Program Files\\Docker\\Docker\\resources\\bin;C:\\Program Files\\Git\\cmd;C:\\Users\\Public\\bins\\ffmpeg\\bin;C:\\Program Files\\PowerShell\\7\\;C:\\Program Files\\ImageMagick-7.1.1-Q16-HDRI;C:\\cygwin64\\bin;C:\\Users\\Jason\\AppData\\Local\\pnpm;C:\\Users\\Jason\\.amplify\\bin;C:\\Users\\Jason\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\Jason\\AppData\\Local\\Programs\\GNU Octave\\Octave-6.2.0\\mingw64\\bin\\;C:\\Program Files (x86)\\GitHub CLI\\;C:\\Users\\Jason\\AppData\\Local\\GitHubDesktop\\bin;C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\MSBuild\\Current\\Bin\\;C:\\Users\\Jason\\AppData\\Roaming\\npm;C:\\Program Files\\Sublime Text 3;C:\\Program Files (x86)\\Nmap;C:\\Users\\Jason\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\Jason\\AppData\\Roaming\\nvm;C:\\Program Files\\nodejs;C:\\Users\\Jason\\.dotnet\\tools;C:\\Program Files\\VirtViewer v11.0-256\\bin;C:\\Users\\Jason\\AppData\\Local\\Pandoc\\;C:\\Users\\Jason\\AppData\\Local\\Programs\\Tesseract-OCR;C:\\Program Files\\ImageMagick-7.1.1-Q16-HDRI;C:\\Users\\Jason\\AppData\\Roaming\\pypoetry\\venv\\Scripts;",
+ "PATH": "c:\\progra~1\\PowerShell\\7;C:\\windows\\system32;C:\\windows;C:\\windows\\System32\\Wbem;C:\\windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\windows\\System32\\OpenSSH\\",
+ "NODE_PATH": "C:\\Users\\Jason\\WebstormProjects\\nuxt3-win32-posix-path\\node_modules\\.pnpm\\node_modules",
+ "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC;.CPL",
+ "PROMPT": "$P$G",
+ "PSModulePath": "C:\\Users\\Jason\\OneDrive\\Documents\\PowerShell\\Modules;C:\\Program Files\\PowerShell\\Modules;c:\\progra~1\\powershell\\7\\Modules;;%ProgramFiles%\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules",
+ "SYSTEMDRIVE": "C:",
+ "SYSTEMROOT": "C:\\Windows",
+ "TEMP": "C:\\Users\\Jason\\AppData\\Local\\Temp",
+ "USERDOMAIN": "DESKTOP-2FU8K8O",
+ "USERNAME": "Jason",
+ "USERPROFILE": "C:\\Users\\Jason",
+ "WINDIR": "C:\\Windows"
+ }
+ };
+ //windowsVerbatimArguments: true,//for windows?
+ //also it uses COMSPEC... interesting...
+ // process.env.comspec = "C:\\Windows\\system32\\cmd.exe";//C:\Windows\system32\cmd.exe /d /s /c '"echo hi"'
+ // output = spawnSync("echo",['hi'],{ shell:true,})
+ /* cmd */
+ output = spawnSync(`C:\\Windows\\system32\\cmd.exe`,[`/d /s /c`,"echo hi"],{ shell:false,windowsVerbatimArguments:true, env:{
+ // "COMSPEC": "C:\\Windows\\system32\\cmd.exe",
+ // "HOMEDRIVE": "C:",
+ // "HOMEPATH": "\\Users\\Jason",
+ // "LOGONSERVER": "\\\\DESKTOP-2FU8K8O",
+ // "PATH": "c:\\progra~1\\PowerShell\\7;C:\\Program Files\\ImageMagick-7.1.1-Q16-HDRI;C:\\Program Files (x86)\\OpenSSH\\;C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.7\\bin;C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.7\\libnvvp;C:\\Program Files\\Common Files\\Oracle\\Java\\javapath;C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\windows\\system32;C:\\windows;C:\\windows\\System32\\Wbem;C:\\windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\windows\\System32\\OpenSSH\\;C:\\Program Files\\PuTTY\\;C:\\ProgramData\\chocolatey\\bin;C:\\Program Files\\NVIDIA Corporation\\Nsight Compute 2022.2.0\\;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Program Files\\NVIDIA Corporation\\NVIDIA NvDLISR;C:\\Users\\Jason\\AppData\\Roaming\\nvm;C:\\Program Files\\nodejs;C:\\Program Files\\dotnet\\;C:\\SysinternalsSuite;C:\\Program Files (x86)\\Incredibuild;C:\\Program Files\\Docker\\Docker\\resources\\bin;C:\\Program Files\\Git\\cmd;C:\\Users\\Public\\bins\\ffmpeg\\bin;C:\\Program Files\\PowerShell\\7\\;C:\\Program Files\\ImageMagick-7.1.1-Q16-HDRI;C:\\cygwin64\\bin;C:\\Users\\Jason\\AppData\\Local\\pnpm;C:\\Users\\Jason\\.amplify\\bin;C:\\Users\\Jason\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\Jason\\AppData\\Local\\Programs\\GNU Octave\\Octave-6.2.0\\mingw64\\bin\\;C:\\Program Files (x86)\\GitHub CLI\\;C:\\Users\\Jason\\AppData\\Local\\GitHubDesktop\\bin;C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\MSBuild\\Current\\Bin\\;C:\\Users\\Jason\\AppData\\Roaming\\npm;C:\\Program Files\\Sublime Text 3;C:\\Program Files (x86)\\Nmap;C:\\Users\\Jason\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\Jason\\AppData\\Roaming\\nvm;C:\\Program Files\\nodejs;C:\\Users\\Jason\\.dotnet\\tools;C:\\Program Files\\VirtViewer v11.0-256\\bin;C:\\Users\\Jason\\AppData\\Local\\Pandoc\\;C:\\Users\\Jason\\AppData\\Local\\Programs\\Tesseract-OCR;C:\\Program Files\\ImageMagick-7.1.1-Q16-HDRI;C:\\Users\\Jason\\AppData\\Roaming\\pypoetry\\venv\\Scripts;",
+ "PATH": "c:\\progra~1\\PowerShell\\7;C:\\windows\\system32;C:\\windows;C:\\windows\\System32\\Wbem;C:\\windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\windows\\System32\\OpenSSH\\", //enough for echo cmd...
+ // "NODE_PATH": "C:\\Users\\Jason\\WebstormProjects\\nuxt3-win32-posix-path\\node_modules\\.pnpm\\node_modules",
+ // "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC;.CPL",
+ // "PROMPT": "$P$G",
+ // "PSModulePath": "C:\\Users\\Jason\\OneDrive\\Documents\\PowerShell\\Modules;C:\\Program Files\\PowerShell\\Modules;c:\\progra~1\\powershell\\7\\Modules;;%ProgramFiles%\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules",
+ // "SYSTEMDRIVE": "C:",
+ // "SYSTEMROOT": "C:\\Windows",
+ // "TEMP": "C:\\Users\\Jason\\AppData\\Local\\Temp",
+ // "USERDOMAIN": "DESKTOP-2FU8K8O",
+ // "USERNAME": "Jason",
+ // "USERPROFILE": "C:\\Users\\Jason",
+ // "WINDIR": "C:\\Windows"
+
+
+
+
+ },})
+ assert.strictEqual(output.status,0);
+ assert.strictEqual(output.stdout.toString().replace('\r',''),"hi\n");
+ /* pwsh */
+ //windowsVerbatimArguments: true,//for windows? doesnt seem to really do anything
+ // output = spawnSync(pwsh,['-Command',"write-host hi"],{ shell:false,windowsVerbatimArguments:true, env:{
+ // output = spawnSync("C:\\cygwin64\\bin\\printenv.exe",[],{ shell:false,windowsVerbatimArguments:true, env:{
+ // output = spawnSync("C:\\cygwin64\\bin\\printenv.exe",[],{ shell:false,windowsVerbatimArguments:false, env:{
+ // output = spawnSync(pwsh,["-Command","ls env:"],{ shell:false,windowsVerbatimArguments:false, env:{
+ output = spawnSync(pwsh,["-Command","(ls env:PATH).value"],{ shell:false,windowsVerbatimArguments:true, env:{
+ "PATH": "c:\\progra~1\\PowerShell\\7;C:\\windows\\system32;C:\\windows;C:\\windows\\System32\\Wbem;C:\\windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\windows\\System32\\OpenSSH\\", //enough for echo cmd...
+ },});
+ // console.log(output);
+ console.log(output.stderr.toString());
+ console.log(output.stdout.toString());
+ assert.strictEqual(output.status,0);
+ // assert.strictEqual(output.stdout.toString().replace('\r',''),"hi\n");
+
+
+ // output = spawnSync(pwsh,['dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1'],options)
+ if(output.status !==0){
+ console.error('stderr: ',output.stderr?.toString());
+ console.error(output.error)
+ throw output.error;
+ }
+
+ });
+ it('dump env -pwsh',function(){
+ // const jsonFile = Path.resolve(__dirname,`temp/pwsh-cli.raw.json`);//doesnt work for some reason todo
+ const jsonFile = Path.resolve(__filename,`../temp/pwsh-cli.raw.json`);
+ const txtFile = Path.resolve(__filename,`../temp/pwsh-cli.txt`);
+ const ps1File = Path.resolve(__filename,`../generate-env-logs.ps1`);
+ if(fs.existsSync(jsonFile)){
+ fs.unlinkSync(jsonFile)
+ }
+ if(fs.existsSync(txtFile)){
+ fs.unlinkSync(txtFile)
+ }
+ // console.log(__dirname);
+ // console.log(jsonFile);
+ const options = {
+ // shell:true,
+ shell:false,
+ env:{
+ "PATH": "c:\\progra~1\\PowerShell\\7;C:\\windows\\system32;C:\\windows;C:\\windows\\System32\\Wbem;C:\\windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\windows\\System32\\OpenSSH\\;C:\\Users\\Jason\\AppData\\Roaming\\nvm\\v16.20.1\\", //enough for echo cmd...
+ "NODE_PATH": "C:\\Users\\Jason\\WebstormProjects\\nuxt3-win32-posix-path\\node_modules\\.pnpm\\node_modules",
+ ...process.env,
+ "NODE_FIRST_ARG":'pwsh-cli',
+ },
+ windowsVerbatimArguments:true,
+ }
+ console.log(process.env);
+ if(!process.env.NODE_FIRST_ARG){
+ process.env.NODE_FIRST_ARG = options.NODE_FIRST_ARG;
+ }
+ if(!process.env.NODE_PATH){
+ process.env.NODE_PATH = options.NODE_PATH;
+ }
+ if(!process.env.PATH){
+ process.env.PATH = options.PATH;
+ }
+ // process.env.NODE_FIRST_ARG = 'pwsh-mocha-cli'
+ // maybe im just calling powershell wrong lol
+ // const output = spawnSync(pwsh,['-File','./dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1'],options)
+ const output = spawnSync(pwsh,['-File',ps1File],options)
+ try{
+
+ assert.strictEqual(output.status,0);
+ }catch (e) {
+ console.error('stdout: ',output.stdout?.toString());
+ console.error('stderr: ',output.stderr?.toString());
+ console.error('output: ',output);
+ /* ENOENT not found */
+ throw output.error;
+ }
+ console.log(output.stdout.toString());
+ console.log(output.stderr.toString());
+ assert.ok(fs.existsSync(jsonFile))
+ assert.ok(fs.existsSync(txtFile))
+ assert.ok(fs.existsSync("dev/node-fs-utils-dev/tests/dev-specific/temp/pwsh-cli.raw.json"))
+ assert.ok(fs.existsSync("dev/node-fs-utils-dev/tests/dev-specific/temp/pwsh-cli.txt"))
+
+ });
+ it('spawnSync diff shell - no env',function(){
+ const expected = 'hi\n';
+ const options = {
+ shell:false,//assuming pwsh... maybe check
+ // shell:"c:/progra~1/PowerShell/7/pwsh.exe",//assuming pwsh... maybe check
+ // argv0:"c:/progra~1/PowerShell/7/pwsh.exe",//assuming pwsh... maybe check
+ }
+ let cmd = "c:/progra~1/PowerShell/7/pwsh.exe"
+ cmd = "c:/cygwin64/bin/bash.exe"
+ cmd = "C:\\cygwin64\\bin\\bash.exe"
+ const output = spawnSyncAssert(cmd,['-c','echo hi'],expected,options)
+ })
+ it('spawnSync - no env',function(){
+ const expected = 'hi\n';
+ const output = spawnSyncAssert('echo',['hi'],expected)
+ })
+ it('printenv spawnsync - no env',function(){
+ const expected = 'hi\n';
+ const output = spawnSyncAssert('set',[],expected)
+ })
+
+});
+
+/**
+ * Chaining env
+ * raw cmd
+ * inside pwsh
+ * inside terminal
+ */
+describe('spawncmd env', function(){
+ it('dump env',function(){
+ writeToFile('ws-env.raw.json',JSON.stringify(process.env,null,2));//this works... lol interesting
+ assert.ok(fs.existsSync("dev/node-fs-utils-dev/tests/dev-specific/temp/ws-env.raw.json"))
+
+ const out = spawnSync(pwsh,['-c','Get-ChildItem env:'],{shell:true})
+ writeToFile('ws-env.txt',out.stdout.toString());//this works... lol interesting
+ assert.ok(fs.existsSync("dev/node-fs-utils-dev/tests/dev-specific/temp/ws-env.txt"))
+
+ });
+ //default
+ it('dump env generate-env.mjs',function(done){
+ this.timeout(8000);
+ import('./generate-env.mjs').then(({generateEnv})=>{
+ // generateEnv()//not needed
+ assert.ok(fs.existsSync("dev/node-fs-utils-dev/tests/dev-specific/temp/cli-env.raw.json"))
+ done()
+ });
+
+ });
+ //newname
+ it('dump env generate-env.mjs newname',function(done){
+ this.timeout(8000);
+ process.env.NODE_FIRST_ARG = 'newname'
+ import('./generate-env.mjs').then(({generateEnv})=>{
+ // generateEnv()//not needed
+ assert.ok(fs.existsSync("dev/node-fs-utils-dev/tests/dev-specific/temp/newname.raw.json"))
+ //maybe grep NODE_FIRST_ARG from newname.raw.json
+ done()
+ });
+
+ });
+ /**
+ * overriding defn loses some
+ */
+ it('dump env generate-env.mjs override',async function(){
+ this.timeout(8000);
+ //
+ let output,options;
+ output = spawnSync(pwsh,['dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1 -NODE_FIRST_ARG "shellt-cli"'],{shell:true})
+ options = {
+ shell:true,
+ env:{
+ NODE_FIRST_ARG:'override',
+ }
+ }
+ //shell true
+ // output = spawnSync(pwsh,['dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1 -NODE_FIRST_ARG "override-shellt-cli"'],options)
+ output = spawnSync(pwsh,['dev/node-fs-utils-dev/tests/dev-specific/generate-env-logs.ps1 -NODE_FIRST_ARG "override-shellt-cli"'],options)
+
+ });
+ it('dump path to array PATH.json',function(){
+ const output = process.env.PATH;
+ writeToFile('PATH.json',JSON.stringify(output.split(Path.delimiter),null,2));
+ })
+ it('compare env count',function(){
+ let output,output2,pEnv;
+ let outputKeys,output2Keys,pEnvKeys;
+ let outputLen, output2Len, pEnvLen;
+ pEnv = {...process.env};
+ pEnvKeys = Object.keys(pEnv);
+ pEnvLen = pEnvKeys.length;
+ console.log(pEnvLen);//56, quite a lot
+ writeToFile('pEnv.json',pEnv);
+ });
+});
\ No newline at end of file
diff --git a/docs/src/dev/docs_readme_spawn_cmd.md b/docs/src/dev/docs_readme_spawn_cmd.md
new file mode 100644
index 0000000..e183bcd
--- /dev/null
+++ b/docs/src/dev/docs_readme_spawn_cmd.md
@@ -0,0 +1 @@
+# Spawn Cmd
diff --git a/lib/deploy/SpawnExecOnController.mjs b/lib/deploy/SpawnExecOnController.mjs
deleted file mode 100644
index c57c615..0000000
--- a/lib/deploy/SpawnExecOnController.mjs
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * https://nodejs.org/api/child_process.html#child_processspawncommand-args-options
- *
- * spawn for executing commands on controller. make it SSH2Pool like?
- * future add support for abort / signal
- */
-import { spawn } from 'node:child_process'
-export function execCmdOnController(cmd){
- return new Promise((resolve, reject) => {
- let code, stdouts = [], stderrs = [], signal;
-
- let spawnCmd = spawn(cmd,[],{shell:true});
-
- //i think on error need to double check
- spawnCmd.on('error',(err)=>{
- reject(err);
- });
- spawnCmd.stdout.on('data', (data) => {
- // console.log(`stdout: ${data}`);
- stdouts.push(data);
- });
-
- spawnCmd.stderr.on('data', (data) => {
- // console.error(`stderr: ${data}`);
- stderrs.push(data);
- });
- //close after exit
- spawnCmd.on('close', (_code,_signal) => {
- // console.log(`child process exited with code ${code} ${signal}`);
- code=_code;
- signal=_signal;
- let stdout,stderr;
- if(stdouts.length > 0) stdout = stdouts.join('\n')
- if(stderrs.length > 0) stderr = stderrs.join('\n')
-
- return resolve({cmd,stdout,stderr,code,signal})
-
- });
- });
-}
-export default {execCmdOnController}
diff --git a/lib/deploy/ghPagesDeploy.mjs b/lib/deploy/ghPagesDeploy.mjs
index 28a309d..995f651 100644
--- a/lib/deploy/ghPagesDeploy.mjs
+++ b/lib/deploy/ghPagesDeploy.mjs
@@ -1,3 +1,5 @@
+import {spawnExecCmd} from "##/dev/node-fs-utils-dev/SpawnCmd.mjs";
+
/**
* pnpm install gh-pages -D
* https://yarnpkg.com/package/gh-pages
@@ -14,24 +16,47 @@
*/
const dir = 'dist';//or from env variable? perhaps or from args
import * as ghpages from 'gh-pages'
-import {execCmdOnController} from "./SpawnExecOnController.mjs";
import fs from 'node:fs';
+/* set env variable */
process.env.NUXT_APP_BASE_URL="/nuxt3-win32-posix-path/"
+
+//i.e. rename and then rename back... might be too late for it to even work
+// fixme vite.config.mjs...
+//workaround 1/2
+const viteConfigPath = 'vite.config.mjs'
+// const viteConfigTmp = '.vite.config.mjs.tmp'
+const viteConfigTmp = '.bak.vite.config.mjs.bak'
+if(fs.existsSync(viteConfigPath)){
+ fs.renameSync(viteConfigPath,viteConfigTmp)
+}
+
//build
{
//because nuxt3 is broken, at least this version. fixme update later. version is 3...
// latest is 3.5... and uses vite i believe... nowonder this felt so odd
fs.rmSync(dir, { recursive: true, force: true });
- fs.rmSync('.nuxt', { recursive: true, force: true });
+ fs.rmSync('.nuxt', { recursive: true, force: true });//feels like it has to be done outside
// const {cmd,stdout,stderr,code,signal} = await execCmdOnController('pnpm run build')//vite
- const {cmd,stdout,stderr,code,signal} = await execCmdOnController('pnpm run generate')//nuxt3 static
+ let cmd,stdout,stderr,code,signal
+ try{
+
+ ({cmd,stdout,stderr,code,signal} = await spawnExecCmd('pnpm run generate'));//nuxt3 static
+ }catch (e) {
+ throw e
+ }finally {
+ // fixme vite.config.mjs... update nuxt...
+ //workaround 2/2
+ if(fs.existsSync(viteConfigTmp)){
+ fs.renameSync(viteConfigTmp,viteConfigPath)
+ }
+ }
console.log(stdout);
if(stderr || code !== 0){
console.error(stderr);
}
- if(code !==0){process.exit()}
+ if(code !==0){process.exit(code)}
}
/* add nojekyl */
diff --git a/lib/deploy/ghPagesDeploy.ps1 b/lib/deploy/ghPagesDeploy.ps1
new file mode 100644
index 0000000..e92efd9
--- /dev/null
+++ b/lib/deploy/ghPagesDeploy.ps1
@@ -0,0 +1,64 @@
+#!/usr/bin/env pwsh
+<#
+ try being run with powershell.exe or pwsh? doesnt matter i guess
+ ERROR EPERM: operation not permitted, mkdir 'C:\Users\Jason\WebstormProjects\nuxt3-win32-posix-path\.nuxt'
+ ERROR [vite]: Rollup failed to resolve import "##/lib/dist/index.mjs" from "app.vue".
+
+ cd ../nuxt3-win32-posix-path
+ ls |grep --color='auto' vite.config
+
+ Test-Path -Path vite.config.mjs
+
+ delete
+ .output
+ .nuxt
+ dist
+ #>
+
+ #>
+ #>
+
+#>
+
+# 1. verify pwd is like nuxt3-win32-posix-path
+# $pwd=(Get-Location).Path
+if($pwd -notmatch "nuxt3-win32-posix-path"){
+ Write-Host "pwd is not nuxt3-win32-posix-path"
+ $pwd
+ exit
+}
+# 2. verify node / maybe pnpm
+$isNod316=node -v | Select-String -Pattern "v16" -Quiet
+if(!$isNod316){
+ Write-Host "node version 16 required"
+ Write-Host "nvm install 16"
+ Write-Host "nvm use 16"
+ exit
+}
+# delete .nuxt if exists... just because bug
+if(Test-Path -Path .nuxt){
+ Write-Host "delete .nuxt"
+ Remove-Item -Path .nuxt -Recurse -Force
+}
+
+# move vite.config.mjs to .bak.vite.config.mjs
+## if exists
+if(Test-Path -Path vite.config.mjs){
+ # Write-Host "vite.config.mjs exists"
+ # Write-Host "move vite.config.mjs to .bak.vite.config.mjs"
+ Move-Item -Path vite.config.mjs -Destination .bak.vite.config.mjs.bak -PassThru
+}else{
+
+}
+# runner:
+pnpm run ghGenerateAndDeploy
+
+# move back
+if(Test-Path -Path .bak.vite.config.mjs.bak){
+ Move-Item -Path .bak.vite.config.mjs.bak -Destination vite.config.mjs
+ # Move-Item -Path .bak.vite.config.mjs -Destination vite.config.mjs
+}else{
+ Write-Host ".bak.vite.config.mjs does not exist... something is wrong?"
+ Write-Host "ghpagesDeploy will also set vite.config.mjs back to original"
+}
+write-host "https://codeforwings.github.io/nuxt3-win32-posix-path/"
diff --git a/package.json b/package.json
index 875270c..3ff6440 100644
--- a/package.json
+++ b/package.json
@@ -6,12 +6,14 @@
"build": "nuxt build",
"dev": "nuxt dev",
"generate": "nuxt generate",
+ "pwsh:generate:gh": "set NUXT_APP_BASE_URL=\"/nuxt3-win32-posix-path/\" && nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare",
"test:unit": "mocha --recursive --timeout 10000 --exit tests/unit",
"testPathSep:os": "node tests/concepts/printSep.dev.mjs",
"gh-pages-deploy": "gh-pages --dotfiles --dist dist",
"ghGenerateAndDeploy": "node lib/deploy/ghPagesDeploy.mjs",
+ "pwsh:ghGenerateAndDeploy": "c:/progra~1/PowerShell/7/pwsh.exe -File lib/deploy/ghPagesDeploy.ps1",
"docs:dev": "vitepress dev docs",
"docs:build": "vitepress build docs",
"docs:preview": "vitepress preview docs",