Injector
Globusa exports one function, parse()
, that takes a string of javascript code
and returns an object that looks like this:
{
imports: [], // mitosis-style import objects
declarations: [], // strings
exports: [], // strings
domqlComponents: [], // [ { name: null/string, code: string }, ... ]
linesExcludingImports: [], //
identifiers: [], // strings
}
At its core, dependency-injector handles the global scope in a javascript file that exports domql components so that the component can easily be converted to other frameworks using to-mitosis.
Basically, with the help of Globusa, Kalduna can convert something like this:
import { Text } from '@symbo.ls/atoms'
import { someFunction } from './Atoms/Flex'
const localFn = (a,b) => a + b
export const Title = {
extend: Text,
style: { fontSize: '55px' },
on: { click: (ev, el) => { console.log(someFunction(ev), localFn(1, 2)) } }
}
Into this: (notice the imports and the localFn
declaration)
import { Text } from '@symbo.ls/atoms' // Kalduna will include this
import { someFunction } from './Atoms/Flex' // Included by dependency-injector
const localFn = (a,b) => a + b // Copied by dependency-injector
export default function Title(props) {
const el = {
props: ...
parent: ...
...
}
function Text_onClick(ev, el) {
console.log(someFunction(ev), localFn(1, 2))
}
return (
<Text
style={`${css({ fontSize: '55px' })}`)
onClick={(ev) => Text_onClick(ev, el)}
...props />
)
}
Tests
The testing scheme is based off of Kalduna's testing scheme.
We use node's built-in assertion module instead of a separate library.
How to run tests
To run the entire test suite, do yarn test
from the root of this
repository.
To run only specific tests, simply pass a file name or pattern to the script:
yarn test dedup-mitosis-imports.test.js
# or
yarn test dedup*.test.js
How it works
-
tests/esbuild-tests.js
compiles all the.test.js
files fromtests/
and puts them intests/dist/
. - Each compiled test suite file in
tests/dist/
is run with node as a separate process so that if a crash happens in one suite, it doesn't affect the other ones. - If no errors show up during testing then all tests have passeed.