mirror of
https://github.com/ezolenko/rollup-plugin-typescript2.git
synced 2025-12-08 19:06:16 +00:00
10 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
63a644a762
|
clean(cache): remove unused checkNewCache parameter (#368)
- it is set to `true` in every usage, so just always check the new cache and remove the parameter entirely
- rewrite the comments to reflect this change
- and condense them a bit
- modify tests a bit to reflect this change as well
|
||
|
|
67f1d86a96
|
refactor(cache): simplify noCache condition (#362)
- if there is no cache, we don't need to do any operations on a cache at all, so we can just totally skip all the cache operations and return early
- this should be a perf improvement, at the very least on memory usage, as lots of stuff isn't created or processed now
- this may make `clean: true` a more optimal choice for smaller projects, as the FS usage when writing to cache may be slower than the small amount of compilation and type-checking required in small projects
- to start, from the constructor, the only necessary piece when `noCache` is the dependency tree
- this is needed for `walkTree` and `setDependency` to function, but otherwise is unused when `noCache`
- this _might_ be able to be further optimized to remove the graph entirely when `noCache`, but that is saved for potential future work and not part of this commit
- so, we can just move the tree creation further up in the constructor as its previous ordering within the constructor does not actually matter
- once this is done, we can just early return when `noCache` instead of doing all the cache-related actions, since they're not neeeded when there is no cache
- no need to set `cacheDir` or any hashes etc since they're not used
- note that `clean` only uses `cachePrefix` and `cacheRoot`, which are already set, and does not use `cacheDir`
- no need to `init` the cache as it's not used
- also slightly change the ordering to move `init` right after its prereqs are done, i.e. setting `cacheDir`, `hashOptions`, etc
- just keeps with the flow instead of calling it in the middle of the ambient type processing
- no need to check ambient types as that is only used for cache invalidation (marking things dirty), which is not used when there is no cache
- note that `isDirty` is literally never called when `noCache`
- from there, since we don't call `checkAmbientTypes` or `init` when `noCache` (the constructor is the only place they are called and they are both `private`), we can entirely remove their `noCache` branches
- fairly simple for `checkAmbientTypes`, we just remove the tiny if block that sets `ambientTypesDirty`, as, well, "dirty" isn't used when there is no cache
- for `init`, this means we can entirely remove the creation of `NoCache`, which isn't needed when there is no cache
- that means we can also remove the implementation and tests for `NoCache`
- and the reference to it in `CONTRIBUTING.md`
- in `done`, we can also simply skip rolling caches and early return when there is no cache
- the only other tiny change is the non-null assertions for `ambientTypes` and `cacheDir`
- this matches the existing, simplifying non-null assertions for all the caches, so I did not workaround that
- _could_ set a default of an empty array for `ambientTypes` etc to workaround this, but thought it better to match existing code style and not add new things
- this also matches the behavior, as while `ambientTypes` and `cacheDir` could be `null`, this is only if there is no cache, in which case, they are never used
|
||
|
|
d32cf839fa
|
refactor: simplify hosts to directly assign tsModule.sys where possible (#349)
- no need to duplicate types this way, which can and have changed over time -- it's always the same typings this way - also reorganize `host.ts` to have similar categories of functions near each other, instead of a mix of functions wherever - similar to how I organized the tests for `host` as well - shrink the code a bit this way too - add a comment about `getDefaultLibFileName`'s confusing naming pointing to the TS issues about how this is an old mistake but changing it now would be breaking - this is also how the TS Wiki recommends setting up hosts: https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API#incremental-build-support-using-the-language-services - NOTE: because of how `tsproxy` works to support alternate TS implementations, this does require that `tsModule` _exists_ at the time of instantiation, i.e. that `setTypescriptModule` has already been called - for `host.ts`, `LanguageServiceHost` is only instantiated after `setTypescriptModule`, but for `diagnostics-format-host.ts`, it is immediately instantiated (at the bottom of the file), hence why `getCurrentDirectory` can't just be assigned to `tsModule.sys` - there is a way to fix this, but the refactoring is more complex as it would require creating in `index.ts` and then passing it as an argument -- would want to refactor more at that point too, so leaving that out for now in this otherwise small, isolated refactor - for a different, but related reason, the `host.trace` tests have to mock `console` instead of just `console.log`, since `trace` would just be set to the old, unmocked `console.log` otherwise - as it's assigned directly to `console.log` now |
||
|
|
b44b069cb2
|
fix: force noEmitOnError: false (#338)
- `noEmitOnError: true` acts like `noEmit: true` when there is an error
- this is problematic because it will then cause _all_ files to have
`emitSkipped` set to `true`, which this plugin interprets as a fatal
error
- meaning it will treat the first file it finds as having a fatal
error and then abort, but possibly without outputting any
diagnostics what-so-ever as the file with the error in it may not
yet have run through the `transform` hook
- i.e. an initial file that imports an erroring file at some point
in its import chain will cause rpt2 to abort, even if that
initial file _itself_ has no type-check/diagnostic issues
- bc TS does whole-program analysis after all
- this has only been reported as an issue once so far, probably because
it defaults to `false` in TS and, as such, is rarely used:
https://www.typescriptlang.org/tsconfig#noEmitOnError
- we usually have the opposite issue, people trying to set it to
`false` (i.e. the default) because they don't realize the
`abortOnError` option exists
- add `noEmitOnError: false` to the forced options list and tests too
- add it to the docs on what tsconfig options are forced
- and add a reference to the issue like the existing options
- also reference `abortOnError` since they're commonly associated with
each other and that plugin option is often missed (per above)
- briefly explain that `noEmit` and `noEmitOnError` are `false` because
Rollup controls emit settings in the context of this plugin, instead
of `tsc` etc
- should probably watch out for when new emit settings are added to
TS, as we may want to force most with the same reasoning
|
||
|
|
8e580375e1
|
fix: add realpath to host to properly resolve monorepos (#332)
* fix: add `realpath` to host to properly resolve monorepos
- tested this in a pnpm repo with symlinked deps and it worked there,
so I believe this fixes all pnpm issues
- it may also fix some Lerna issues if they were due to symlinks, but
I didn't check those
- not sure about others, e.g. Rush, Yarn workspaces, Yarn PnP
- I figured out this was needed by staring at the TS source code and
then I found this line:
|
||
|
|
d318e9a8fc
|
fix: normalize paths in get-options-overrides (#331)
- the `outDir` was not normalized after the `/placeholder` part was
added to `cacheRoot`
- `cacheRoot` could have `\` directory separators on it on Windows,
which caused some tests to fail on Windows before
- tests have been normalized now too
- `expandIncludeWithDirs` used `path.join` without normalizing after
- `path.join` uses the OS's native separators (`posix.join` would do
POSIX separators only), so when the paths were already normalized
and then `path.join`ed, this would cause mixed separators on Windows
- this fixes the current CI failure on Windows in the `createFilter`
tests (`rootDirs` and `projectReferences`, which use
`expandIncludeWithDirs`)
- c.f. https://github.com/ezolenko/rollup-plugin-typescript2/runs/6516149780?check_suite_focus=true
|
||
|
|
e8240ae505
|
test: 100% coverage in get-options-overrides (createFilter) (#329)
* test: 100% coverage in get-options-overrides (createFilter)
- get the skipped test to work by using absolute paths, as that is what
the `filter` function expects (and is how it is used in this codebase)
- use the same helper func on the main `createFilter` test as well to
ensure that we're consistently testing the same paths
- (though `**/*` basically matches _everything_)
- add a test for project references as well
- and remove the `**/*` from the include for this so it doesn't match
everything
- this also tests the single string include code path as well
- add a test for the `context.debug()` statements as well
- couldn't get to 100% Funcs coverage without this
- used a simplified mock instead of actually using `RollupContext` so
that this doesn't rely on that file/unit to work
* quick fix for Windows?
|
||
|
|
529c8530f5 | - fix for linter | ||
|
|
60f3489e87
|
deps: upgrade tslib to 2.4.0, remove @yarn-tool/resolve-package (#326)
- tslib 2.4.0 is forward and backward-compatible with older and newer
Node exports mechanisms, so the Node 17 error should no longer be
present
- it has the older `./` and the newer `./*` in its package exports,
which should allow for `package.json` to be read in both older and
newer implementations
- this allows us to remove the extra dep on `@yarn-tool/resolve-package`
as well
- other than less unnecessary deps being good,
`@yarn-tool/resolve-package` is also a not well-documented package
with very few users, which does not make for a good security posture
for rpt2 (which has historically prioritized supply chain security
in other issues around deps) or, in particular, its consumers, which
there are very many of (in contrast with `@yarn-tool`)
- per my issue comment, we could also have avoided the extra dep prior
to the tslib upgrade by resolving to absolute paths, as Node only
does a "weak" encapsulation of relative imports
- test: add a small unit test for tslib.ts to ensure that this method
works and passes on different Node versions in CI
- more a smoke test that it runs at all, the testing is additional
and a bit duplicative of the source tbh
|
||
|
|
56716def97
|
test: add initial unit test suite (#321)
* some unit tests
modifications made by agilgur5 to brekk's original commit:
- rebase with `master` that is 3 years newer
- fix conflicts with newer code, esp the `tsModule`/`tsProxy` changes
in this commit
- move `jest` config to the bottom and don't reformat `package.json`
with tabs
* more
modifications made by agilgur5 to brekk's original commit:
- fix merge conflicts with code that is 3 years newer
* fix tests for windows
* flip that test
* deps: upgrade Jest to v28
- and ts-jest to v28
- @types/jest doesn't have a v28 yet
- look ma, no more vulns!
* refactor: split jest config to jest.config.js
- and add JSDoc typings to it
- per https://jestjs.io/docs/configuration
* clean: remove redundant jest config
- most of these options are either unused (like `modulePaths` etc) or
covered by Jest's defaults (`moduleFileExtensions`, `testMatch`, etc)
- also use `ts-jest` preset per its docs and migration docs
- https://kulshekhar.github.io/ts-jest/docs/migration
* refactor: move tests into __tests__ dir
- per ezolenko's request, though I also prefer to separate them
- fix all relative imports to use `../src/` now
formatting changes:
- improve ordering of imports in tests -- externals first, newline, then
internal imports
- do this **consistently**
- consistently put spaces around braces in destructured imports
- really need better linting (and update to ESLint)
- consistently add newline after imports and before declarations
- in general, add more newlines for readability in several files
* deps: import from @jest/globals instead of using globals
- no config needed and uses standard imports too
- also required for future Jest ESM support I believe
- I created the `jest-without-globals` package before this feature was
released in Jest core and contributed a PR for it too, so might have
a bias toward not using globals
* fix(test): update get-options-overrides spec to match latest file
- basically to match the changes I made when fixing declaration map
sources ~1.5 years ago in ec0568ba2c8e206372f94164e697b1469bf3f33d
- also to add `cwd` to options
- fix: use `toStrictEqual` everywhere, in order to actually check
`undefined` properties, as this is necessary for some of the checks
- I believe the original author may have intended to actually check
`undefined` given that they wrote it in the test, but maybe did not
know to use `toStrictEqual` instead of `toEqual`
* refactor(test): use obj spread in get-options-overrides
- instead of re-writing the options multiple times, write up some
defaults and use object spread
- and refactor `makeDefaultConfig()` to just use
`{ ...defaultConfig }` instead to match the rest
- re-write normalizePaths to be a `for ... of` loop instead of using
`Array.map`
- simpler / more straightforward than a function with side-effects
- feat: add typings in several places
- that's why we're using TS and ts-jest right??
* fix(test): update host spec to match latest source
- LanguageServiceHost now requires 3rd argument, cwd, so add that to
all usage
- add afterDecalarations to transformers
- Jest's test.skip can now use async/await, so do that
- it was also giving a type error, and this is simpler anyway
- change expected to use `__tests__` directory now
- fix: use `expect.arrayContaining` for `host.getDirectories` test as
there are more temp directories that get added here, such as
`build-self` and `coverage`
- in general, might be less fragile if this used a generated directory
instead of an actual one
- but save bigger refactors for later
* refactor(test): use async/await, remove truncate func in host spec
- instead of using Promises with `done()`, use async/await for clearer
code and less indentation too
- remove the `truncateName` function as it's not needed; `local` will
result in the same name
- remove commented out test code
- this seemed to just be there for testing the code, and not
ready-for-production comments
* refactor: use consts in host spec instead of locals
- basically using pre-defined fixture vars instead of ones defined
inside the test
- which is more straightforward, easier to read, and less fragile
- shorter names too
- also use a __temp dir for auto-generated files instead of creating
them in the same dir and confusing the editor file tree and potential
watchers
- change jest config to make sure only spec files are being watched
- gitignore __tests__/__temp/ dir in case tests crash etc
* fix(test): update rollupcontext spec to match latest source
- use PluginContext and IContext types instead of `any`
- we're using TypeScript right??
- add `debug` level logging in a few places where it was missing
- update stubbedContext to have latest PluginContext properties
- watcher isn't in there anymore and a few new properties were added
- fix type errors with stubbedContext
- give it an intersection with IContext for `info` and `debug`
verbosity levels
- force the logging funcs to `any` as they don't quite match the
Rollup types
- force them to `any` when deleting them as well because they're not
optional properties
- Note: would be good to not force so much `any` if possible, but this
may be difficult without more advanced internal Rollup mocks
- couldn't find any testing packages for this :/
- test: add verbosity expect for debug too
- refactor: context2 -> context
- there wasn't another one, so just use the same name consistently
- I'm guessing there was another one at some point in the
development of this and then it was removed but not renamed
* lint: add __tests__ to lint dirs, fix lint errors
- surprisingly only in jest.config.js?
- really need to update to @typescript-eslint ...
* ci: add unit tests to matrix
- run after all the builds for now
- it can be done in parallel as a separate job, but then have to
duplicate the NPM install etc, so may not be optimal that way
- refactor: add test:watch and test:coverage scripts
- shortcut scripts so don't have to `npm test -- --coverage" etc
- also remove `--verbose` from `test` as that's not necessary
* test: add unit tests for createFilter
- increases coverage of get-options-overrides significantly
- couldn't figure out `rootDirs` -- either the code or my tests are
wrong, so just skip that one for now
- refactor: move makeStubbedContext etc into a shared fixtures dir so
that it can be used for both rollupcontext tests _and_
createFilter tests
- in my stylistic opinion, I prefer to put nearly _all_ consts like
these into fixtures dir
- configure jest to ignore test helpers in coverage reporting such as
fixture files
- format: '' -> "", add semicolon in some places
- I use single quotes and no semicolons, so missed that in a few
places
- lint didn't check for that and no prettier auto-format :/
* refactor: use consts, async/await, etc in rollingcache spec
- basically using pre-defined fixture vars instead of ones defined
inside the test
- which is more straightforward, easier to read, and less fragile
- shorter names too
- left a couple of ones as is where they were only used once very
quickly -- could make them fixture vars too but 🤷
- use async/await instead of Promises with `done()` etc
- also use more `fs-extra` functions that support Promises instead of
synchronous `fs` functions (e.g. `existsSync` -> `pathExists`)
- async should be a small optimization for tests too
- fix: use __temp dir for auto-generated files instead of creating
them in a fixtures dir and breaking actual fixtures
- format: a few multi-line statements were able to be condensed to a
single line, so do so
- esp as multi-line was not helping readability since this is just
irrelevant test data (may have hampered readability actually)
* docs: add a testing section to CONTRIBUTING.md
- goes over the different ways of running the tests (watch + coverage)
- line about unit and integration tests was moved into this section
- and altered to reflect the current state of the repo now that a good
amount of unit tests exist
- also move "Linting and Style" into its own section with a list
- move "fix any failed PR checks" to the top as overall guidance on
making a PR
- previously it was in the middle of linting and style, which felt a
bit disjointed (maybe made sense earlier before builds were in CI?)
- name the last section "Building and Self-Build"; leave content as is
- well mostly, change the first line as "fastest way to test" is not
necessarily accurate anymore now that there are actual tests
* fix(test): undo tsTypes -> tsModules changes in source code
- original author, brekk, had made these changes, likely because without
them, the tests would throw in the source lines where `tsModule` was
used with things like "Cannot read property 'ModuleKind' of undefined"
- the actual fix for this is to instead use `setTypescriptModule` from
tsproxy as this is how it is used in the source
- it's mainly needed for when an alternate TS is substituted
- brekk probably didn't know the codebase well enough to know that
- add `setTypescriptModule` to all specs that need it
- 100% test coverage of tsproxy now too!
- this should hopefully fix the build errors we were getting as well
* test: get host spec customTransformers test working
- it seemed incomplete and that's why it was skipped, no comment there
stating otherwise, so just modified it a bit to get it to work and
pass properly
* ci: add Node 14, 16, 18, and macOS, Windows to matrix
- drop Node 10 testing
- Node 10 went EoL a while ago and was causing the latest version of
Jest to throw an error
- still test Node 12 since it only went EoL recently, but could drop it
as well if wanted
- may want to set `package.json#engines` or update min requirements in
the README if so, though it likely still works on older Node, we
just can't easily test it
- add macOS and Windows testing to the matrix since TS and Rollup both
behave differently on different OSes, in particular with regard to the
filesystem
- POSIX paths on Windows, case-insensitivity on macOS
- give the job a name that appears in the PR checks and Actions tab
* refactor: use __temp dir in options-overrides spec
- similar to previous commits, don't use the actual fixtures dir, use
the `__temp` dir and a subfolder within for this spec file
specifically so as to not interfere with other tests
* test: 100% coverage for host.ts, refactor host.spec.ts
- test: get the skipped `readFile` test to work
- `ts.sys.readFile` definitely returns stuff, it's used for snapshots
- it wasn't working because it was testing the wrong extension,
`.js` instead of `.ts`
- I thought this was intentional when I first added consts here, but
turns out that was actually a mistake by the original author
- refactor: merge the `readFile` tests with the main test suite
- first I merged them together, but as they were just one-liners, I
merged them with the first set, since it wasn't particularly
different from those
- refactor: split up the main test suite into a few commented sections
- core snapshot functionality, fs functionality, misc
- a lot less random now
- refactor: use `getDirectories` on the testDir instead of project root
- much less fragile to use the dir generated here, and no hack-ish
`arrayContaining()` either
- refactor: one-line the case-insensitive test
- that simplifies it a lot!
- refactor: use fixed consts for the repetitive default config
- and use a `testOpts` variable for less fragile testing
- test: add tests for version 2 branches of snapshot funcs
- these weren't tested before so it had only tested the `|| 0` branch
of the conditional
- also actually test `reset` instead of calling it at the beginning
- refactor: no more "dirty checking" of instances' private interfaces
- we're testing it all through the public interfaces instead!
- test: add a simple test for the new `trace` method
- test: coverage for `after` and `afterDeclarations` transformers
- test: coverage for different `undefined` states of transformers
- refactor the two test suites as one for `undefined` and one for
all 3 transformers
- and put the working one first for naming purposes
- refactor the `setLanguageService` call as a simpler type coercion
- remove the transformer interactions in the main test suite
- yea, this is a big commit, but I was refactoring everything anyway and
this is probably gonna be squashed anyway
* refactor: remove remaining "dirty checking of instance as any"
- no need to check private interfaces in these remaining tests, the
functionality itself is already tested via the public interface
* fix(test): get tests working on Ubuntu and Windows
- host is only case-sensitive on Linux
- prev was everything except Windows; so flipped the conditional a bit
- host and TS itself use "/" normalized paths, so use those
- and add a hacky workaround for a TS bug I managed to find
- formatHost will use OS separators, so no "/"
- make the test more accurate and less fragile by comparing to
`process.cwd()` as well -- which should normalize on Windows
* refactor: use consts and shrink check-tsconfig
- think it's a bit easier to read this way, it's only 3 tests after all
* refactor: remove normalizePaths func from get-options-overrides spec
- this isn't necessary and added some complexity (and verbosity)
- only one dir that needs normalization anymore, and that's just the
cache dir, so just add it to the const/var fixture instead
- shrink the code a bit as a result too
- and use a bit different code style to shrink it too
- annnd found a Windows bug in get-options-overrides.ts here too...
- leave a `// TODO: ` comment here to fix the source as this PR is
solely focused on tests (i.e. no source changes)
Co-authored-by: Brekk <brekk@brekkbockrath.com>
Co-authored-by: bbockrath <bbockrath@goodgamestudios.com>
|