Release v0.4.0

This commit is contained in:
winlifes
2026-06-10 20:26:09 -07:00
parent 03e5ab8dfe
commit 6405dced7d
27 changed files with 1983 additions and 52 deletions
+58
View File
@@ -0,0 +1,58 @@
'use strict';
const assert = require('node:assert/strict');
const path = require('node:path');
const test = require('node:test');
const {
assertJavascriptSafety,
inspectJavascriptSafety,
} = require('../lib/javascript-safety');
const PROJECT_PATH = path.resolve('/tmp/funplay-cocos-test-project');
test('JavaScript safety allows project-local write snippets by default', () => {
const result = inspectJavascriptSafety(
"fs.writeFileSync(path.join(context.projectPath, 'assets/generated.ts'), 'export {};');",
{ projectPath: PROJECT_PATH }
);
assert.equal(result.ok, true);
});
test('JavaScript safety blocks delete operations', () => {
assert.throws(
() => assertJavascriptSafety("fs.rmSync(path.join(context.projectPath, 'assets'), { recursive: true });", {
projectPath: PROJECT_PATH,
}),
/delete\/truncate/
);
});
test('JavaScript safety blocks traversal and home path literals', () => {
const result = inspectJavascriptSafety(
"fs.writeFileSync('../outside.txt', 'x'); fs.writeFileSync('~/secret.txt', 'x');",
{ projectPath: PROJECT_PATH }
);
assert.equal(result.ok, false);
assert.equal(result.violations.some((item) => item.includes('path traversal')), true);
assert.equal(result.violations.some((item) => item.includes('user-home')), true);
});
test('JavaScript safety blocks absolute paths outside the project', () => {
const result = inspectJavascriptSafety("fs.writeFileSync('/tmp/outside.txt', 'x');", {
projectPath: PROJECT_PATH,
});
assert.equal(result.ok, false);
assert.equal(result.violations.some((item) => item.includes('absolute path outside')), true);
});
test('JavaScript safety blocks child_process usage', () => {
assert.throws(
() => assertJavascriptSafety("const cp = require('child_process'); cp.execSync('rm -rf /tmp/x');", {
projectPath: PROJECT_PATH,
}),
/child_process/
);
});