mirror of
https://github.com/stablyai/orca.git
synced 2026-11-14 01:47:24 +00:00
* refactor(tooling): organize test runtime and maintenance owners * test(tooling): preserve relocated runtime fixture dependency edges * refactor(tooling): preserve xterm routing owner checks * ci(tooling): include routing owner in sparse checkout * test(tooling): preserve copied workflow dependency closures * fix(tooling): normalize hashed JSON assets in release parity * fix(tooling): distinguish asset aliases from literal references * fix(tooling): frame normalized asset reference payloads * fix(tooling): normalize decoded JSON asset references * refactor(tooling): organize build, CI and release owners * fix(tooling): align moved generator and workflow path contracts * fix(tooling): update generated plugin bundle owner banners * test(tooling): create relocated mobile verifier fixture directories * test(tooling): copy headless detector dependency closure * test(tooling): align native batch policy fixtures with owner path * fix(tooling): link moved reliability command to historical evidence * fix(tooling): preserve nested sandbox owners and canonical guide source * fix(tooling): target release version owners in checkout fixture
29 lines
1.2 KiB
JavaScript
29 lines
1.2 KiB
JavaScript
import { copyFileSync, mkdirSync, readFileSync } from 'node:fs'
|
|
import { dirname, join, relative } from 'node:path'
|
|
|
|
// Walk/copy relative modules instead of maintaining fixture list: omitted dependencies hide target failures behind resolution errors.
|
|
export function copyScriptWithLocalModules(sourceScriptPath, destinationScriptsDir) {
|
|
mkdirSync(destinationScriptsDir, { recursive: true })
|
|
for (const modulePath of collectScriptModules(sourceScriptPath)) {
|
|
const destination = join(destinationScriptsDir, relative(dirname(sourceScriptPath), modulePath))
|
|
mkdirSync(dirname(destination), { recursive: true })
|
|
copyFileSync(modulePath, destination)
|
|
}
|
|
}
|
|
|
|
function collectScriptModules(scriptPath, seen = new Set()) {
|
|
if (seen.has(scriptPath)) {
|
|
return seen
|
|
}
|
|
seen.add(scriptPath)
|
|
// Follow static/dynamic imports and plain require for CJS gates; exclude projectRequire/requireLocal, which resolve from project root rather than this module.
|
|
const source = readFileSync(scriptPath, 'utf8')
|
|
const specifiers = source.matchAll(
|
|
/(?:\bfrom|\brequire\s*\(|\bimport\s*\(|\bimport)\s*'(\.\.?\/[^']+)'/g
|
|
)
|
|
for (const [, specifier] of specifiers) {
|
|
collectScriptModules(join(dirname(scriptPath), specifier), seen)
|
|
}
|
|
return seen
|
|
}
|