mirror of
https://github.com/hanzoai/gui.git
synced 2026-10-25 02:31:41 +00:00
This repo could never sync. There was NO merge-base with tamagui — 372 commits
here against 15,791 there, unrelated histories — because it began as a
copy-paste rebrand with a flattened layout. Every "sync" since was a hand
re-application that drifted, which is why the tree sat on 7.3.1 while upstream
shipped fixes we then rediscovered by hand.
This commit's PARENT IS TAMAGUI. A future sync is `git merge tama/main` then
`node scripts/rebrand.mjs` — a real merge, because the history is now shared.
174 packages: 166 upstream, our 8 restored (chrome, shell, telemetry, recipes,
get, font-geist-{sans,mono}, @hanzo/booker), bento-get gained. 170/170 build.
Our patches to files UPSTREAM ALSO OWNS are carried, which the package-level
delta missed and which was where the value actually was:
- useMedia's server snapshot (`initState ?? getMedia()`). Upstream still
returns undefined there, so every Tamagui Dialog kills a prerender — the
exact crash hanzo.app spent a day on.
- data-slot on web host nodes, absent upstream entirely.
Both applied ONTO upstream's newer files (it rewrote useMedia +150/-63 and
createComponent +160/-55), marked `PATCH (ours, carried across the transplant)`.
Seven traps are encoded in scripts/rebrand.mjs, each found by a gate:
skip itself and lockfiles; special-case the double-branded names in BOTH scoped
and bare form; map path strings, not just paths; drop a level for the flattened
group; check disk rather than a stale index.
Rust build artifacts are NOT committed. An earlier draft of this commit swept
apps/desktop/src-tauri/target/debug in via `git add -A` — 3,859 files including
a 272MB .a, over GitHub's 100MB cap, so the push could never have landed. They
are gitignored now.
Co-Authored-By: Hanzo Dev <[email protected]>
134 lines
3.3 KiB
JavaScript
134 lines
3.3 KiB
JavaScript
const { execFileSync } = require('node:child_process')
|
|
const { existsSync, unlinkSync } = require('node:fs')
|
|
const { basename, join, normalize } = require('node:path')
|
|
|
|
const compilerFixtures = [
|
|
{
|
|
testFile: 'e2e/CompilerExtraction.test.ts',
|
|
sourceFile: 'src/usecases/CompilerExtraction.tsx',
|
|
nativeFile: 'src/usecases/CompilerExtraction.native.tsx',
|
|
extraArgs: ['--expect-optimizations', '18'],
|
|
},
|
|
{
|
|
testFile: 'e2e/CompilerTernaryActive.test.ts',
|
|
sourceFile: 'src/usecases/CompilerTernaryActive.tsx',
|
|
nativeFile: 'src/usecases/CompilerTernaryActive.native.tsx',
|
|
extraArgs: [],
|
|
},
|
|
]
|
|
|
|
const projectRoot = join(__dirname, '..')
|
|
|
|
function normalizeTestPath(testFile) {
|
|
return normalize(testFile).replace(/\\/g, '/')
|
|
}
|
|
|
|
function getSelectedTestFiles() {
|
|
const envTestFiles = (process.env.GUI_DETOX_TEST_FILES || '')
|
|
.split(/\s+/)
|
|
.map((entry) => entry.trim())
|
|
.filter(Boolean)
|
|
|
|
if (envTestFiles.length > 0) {
|
|
return envTestFiles.map(normalizeTestPath)
|
|
}
|
|
|
|
return process.argv.filter((entry) => entry.endsWith('.test.ts')).map(normalizeTestPath)
|
|
}
|
|
|
|
function getTestNamePattern() {
|
|
for (let i = 0; i < process.argv.length; i++) {
|
|
const arg = process.argv[i]
|
|
|
|
if (arg === '-t' || arg === '--testNamePattern') {
|
|
return process.argv[i + 1] || ''
|
|
}
|
|
|
|
if (arg.startsWith('--testNamePattern=')) {
|
|
return arg.slice('--testNamePattern='.length)
|
|
}
|
|
}
|
|
|
|
return ''
|
|
}
|
|
|
|
function testNamePatternMatchesFixture(testNamePattern, fixture) {
|
|
const fixtureName = basename(fixture.testFile, '.test.ts')
|
|
|
|
try {
|
|
return new RegExp(testNamePattern, 'i').test(fixtureName)
|
|
} catch {
|
|
return fixtureName.toLowerCase().includes(testNamePattern.toLowerCase())
|
|
}
|
|
}
|
|
|
|
function getCompilerFixturesForSelectedTests() {
|
|
const selectedTestFiles = getSelectedTestFiles()
|
|
|
|
if (selectedTestFiles.length > 0) {
|
|
return compilerFixtures.filter((fixture) => {
|
|
const fixturePath = normalizeTestPath(fixture.testFile)
|
|
const fixtureName = basename(fixturePath)
|
|
|
|
return selectedTestFiles.some(
|
|
(testFile) => testFile.endsWith(fixturePath) || basename(testFile) === fixtureName
|
|
)
|
|
})
|
|
}
|
|
|
|
const testNamePattern = getTestNamePattern()
|
|
|
|
if (testNamePattern) {
|
|
return compilerFixtures.filter((fixture) =>
|
|
testNamePatternMatchesFixture(testNamePattern, fixture)
|
|
)
|
|
}
|
|
|
|
return compilerFixtures
|
|
}
|
|
|
|
function buildCompilerFixturesForSelectedTests() {
|
|
const selectedFixtures = getCompilerFixturesForSelectedTests()
|
|
|
|
if (selectedFixtures.length === 0) {
|
|
return
|
|
}
|
|
|
|
console.info(
|
|
`Building ${selectedFixtures.length} compiler fixture${
|
|
selectedFixtures.length === 1 ? '' : 's'
|
|
} for Detox...`
|
|
)
|
|
|
|
for (const fixture of selectedFixtures) {
|
|
const nativePath = join(projectRoot, fixture.nativeFile)
|
|
|
|
if (existsSync(nativePath)) {
|
|
unlinkSync(nativePath)
|
|
}
|
|
|
|
const args = [
|
|
'hanzogui',
|
|
'build',
|
|
fixture.sourceFile,
|
|
'--target',
|
|
'native',
|
|
'--output-around',
|
|
...fixture.extraArgs,
|
|
]
|
|
|
|
console.info(`Running: npx ${args.join(' ')}`)
|
|
execFileSync('npx', args, { cwd: projectRoot, stdio: 'inherit' })
|
|
|
|
if (!existsSync(nativePath)) {
|
|
throw new Error(
|
|
`Expected compiler fixture was not generated: ${fixture.nativeFile}`
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
buildCompilerFixturesForSelectedTests,
|
|
}
|