Skip to content

Commit a8b496f

Browse files
authored
refactor(uploads) Move to new upload system with application/json payloads
* test(jest): move intagration tests to other repo and add unit test with jest * refactor(request): move superagent to axios * refactor(tests): add more unit tests * test(network): Add tests to uplaod start * test(network): Add unit tests for complete method * test(store): update store test for cancel method * fix(cloud): Add cancel method to clouds using token * fix(resolveHostFix): Fix iteration object in resolveHost * refactor(uploads): refactor uploads, update build script * refactor(upload/fallbac): Add multipart true when fallback is enabled * refactor(uploads): Update progress method * refactor(upload): Cleanup upload class * refactor(uploads): Fix fallback mode for files below 5mb * refactor(uploads): Add better cleanup after upload * refactor(uploads): Do not store chunks in memory * refactor(uploads): lower p-queue version, fix file library get slice method * refactor(fix intelligent size header): * refactor(uploads): cleanup * test(file_utils): add file utils test, split test to envs * fix(api/file): Fix params in file reuqests * test(uploads): Add tests to main upload class * test(uploaders/s3): add basic tests * test(uploader/s3): Add tests to uplaoders/s3 class (wip) * test(Uploaders/s3): Refactor tests, Add ii tests * test(uploader/s3): Add more units * test(uploader/s3): Fix store/workflows option * test(request): add request units, update request to support application/json format instead of multi * test(uploads): Add missing units, replace error with FilestackError * refactor(pickeropiotns): remove preferlinkoverstorage option * refactor(cloudClient): remove link option * build(codecov): add code cov to repo * docs(README): Add codecov badge to readme * docs(README): Update readme file * refactor(uploads): Move uploads to new backend * feat(SRI): Add sri manifest.json and update README * docs(README): Update readme -> sri description * refactor(uploads): change multipart to ffi param * ci(codeconv): add codeconv config to repo * refactor(trace-id): comment for now * fix(uploads/fii): send fii field in upload * test(upload/fii): Update tests with fii support * refactor(uploads, validation): update uploads response, move security and storeOptions to json schem * refactor(validation): replace tcomb params validation with jsonschema * refactor(tcomb-validation): remove tcomb-validation and replace it with json schema * refactor(uploads/validation): add validation to uploads and tests for it * fix(uploadSchema): add missing filename * fix(pickerSchema): add filename to picker schema * test(pickerSchema): add tests to picker schema * fix(sanitizer): fix sanitizer "\" in regexp * test(utils): remove only keyword * test(all): Update tests for filelink, uploader/s3 * fix(uploader/s3): do not change oryginal store options/ copy it befre removing filenmae * docs(cleanup): cleanup docs in new files * refactor(upload/s3): change copy function to obj.assign * refactor(validator): Update html element validator * test(FilestackError): add tests for filestack error * refactor(uploads): move store options under store param * refactor(utils): update base64 function to work in both envs * refactor(pr): fixes from pr * test(security): add tests for security * refactor(upload): change name from get/set host to url * feat(filestack/debug): add debug for filestack headers * fix(file_tools): Fix isSvg in browser * refactor(cleanup): cleanup methods, change codeconv percent * docs(releases): Add detailed releases description * docs(README.md): add information about releases * docs(releases_notes): fix typo, move examples to correct pleace * test(cleanup): remove only from tests * fix(sanitizeOptions): pass sanitize options to uploader * docs(release-notes): refactor sanitize section * docs(release-notes): add line break * test(sanitizer): add tests to sanitizer * fix(schema): move sanitizer to correct schema * refactor(schema): remove sanitizer from upload schema * test(upload): add sanitizer check * refactor(ie): Fix require in ie * test(utils): add tests to requireNode * refactor(utils): add one more safety condition to requireNode * fix(memoryleak): Fix memory leak in cancel token (axios) * fix(uploader/s3): move cleaning cancelToken to last promise * refactor(upload/s3): Standarize errors * feat(eventemmiter): add event emmiter with error to upload stack * feat(FilestackError): Add error types * test(cloud): refactor cloud units * refactor(upload/s3): change complete method call * refactor(upload/s3): revert complete request after each file * refactor(types): remove retry event * feat(picker): add imageMinMaxBlock option * feat(picker): add force param to picker transformations * refactor(filelink): add "," to escape chars in filelink * feat(picker): Add viewType option to schema, update picker types * test(cloud): fix wrong promise * docs(release-notes): Add info about escaping , in storeUrl * docs(release-notes): Update release notes - add picker fixed issues * docs(readme): update readme polyfils seciton * feat(picker): bump picker version
1 parent ce77599 commit a8b496f

File tree

113 files changed

+15220
-13289
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+15220
-13289
lines changed

.codecov.yml

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
codecov:
2+
notify:
3+
require_ci_to_pass: yes
4+
5+
coverage:
6+
precision: 2
7+
round: down
8+
range: "99...100"

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ coverage
66
*.log
77
.env
88
.nyc_output
9+
.stats.json
910
.DS_Store
1011

1112
# VS Code
1213
.vscode
13-
!.vscode/tasks.js
14+
!.vscode/tasks.js

.npmignore

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ tsconfig.json
55
tslint.json
66
.travis.yml
77
.github
8+
.codecov.yml
9+
.stats.json
810
build/temp
911
build/docs
1012

.prettierrc

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"trailingComma": "all",
3+
"tabWidth": 2,
4+
"semi": true,
5+
"singleQuote": true,
6+
"printWidth" : 180,
7+
"parser": "typescript",
8+
"useTabs": false,
9+
"bracketSpacing": true,
10+
"arrowParens": "avoid"
11+
}

.travis.yml

+4-6
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@ git:
33
submodules: false
44
depth: 1
55

6-
addons:
7-
firefox: latest
8-
chrome: stable
9-
106
before_install:
117
- npm i -g npm@latest
128

9+
after_success:
10+
- npm run test:codecov
11+
1312
env:
1413
global:
15-
- secure: uveWmRaiGKxKAYEP86LTSGmTmUvIXqBi0uNai087MDKvzdPuMQZSay3DSN9MLxAskbch1OjKoRCpkKy+z6tJsQL5z8tptpEcI5mD7LJU8U2akskEXANgqH8nPjqC0YPMPU2y8gWSLd/y22VaIKsF8WxXmVpjc57EXrXQtSqCUI9PI3cnyw9eqcv6Pf+3iXLEL4nr+ORvq+bQgEYk8U6ME+49KULRz+R4VhltZxy5F7T0vFEpAyRfsVYyKBwPss1NXE/M+EMqECRgTyXe1+roDO+DFHP+L0qrOrNEbjJSY5iYDfYOIfdtNYz6rvSbTl9jmsLYphb/BJy4eEB1DV38/K3WJ510gi0n3lWgFPlZB9Wh3S7LXQh4yieHbB2ddWYtX6IP9LNeNpdn/vgJwmuNyiAYsEdeqYdPSUynJ50RlwDVCLd4GkB5qpMBjMgtfXiY4NkqDECjc0BykjKqBZR4iWlDKygFVmBHAgzWrylNAhhiHcClRBLXaRoLa4/lJrpfefVShs5G+y5vxfptDFIbeQs6R2k6Xy5JTx36qMUZoVvdLyg+FqAjaadUGzVNadGw8Sk2DrVODigGB9Zbrmvay8yOYJL2/3JVD2SJua7wEaJnltIItG2F1smR4EcyxDKcOOUhPeat+vm2bXCCYf1MEgw+46iNIxIS05BD+B2aumk=
16-
- secure: tuCHqcmWvzE5diSBB7jcgAbkzvEbUktR7eCn6wx2A/ntJmmEm2PRuoYQjIX99hF5d16QwgbxunjWihvLYskL7+t+Cwx4K9pyGFUojFQFK7X72py3ZGWrTRL0b1YdtZJ4tZjOK5C4IRy5FmMYV4OP3QHL7aeamFJikCdLHXiT3zfHjlsAwS4pHN8yfmcYgf5+xOrZ9FqVQu6M/HSJIOq/wpEKdFv7dZCxHcsPhjIAO4yCyfUw7pvk0RzOv7owf9LDIGpH5X8wI9GxzuREXSyzX3KBa2a1FdX8ctrxNTAjUepY4AjxAk6ZCcNUHcTeeOfVtZIfztGvryQddhvdWIveMUiGeiLS26L8sEo1xVcVLXpff3LB3vKHIoaDAiGAfp1ZAjRhMAI08yqE61E0h3n+5/fwgcni6p9gdp0eyfRv+QImxUFM+5caI7U6KkP5pjfRWi6zpLu1txCLKXeeh5IiKgnEHBtPu9LeM1UvOIqObOElXuRuPGuJAOH75mtferiWQL2kjjZlZSNGq0/ra+mn6HccuhDq7aIacOkrrz0q0oLSjGCknlCWmgfeP4P3zgm60+vbnOxM6PMm1avDibPyY2zdewGuvVg1p1CmUOoapbttzbptwOfFde/8U/AaSvMTehSTakSnMTj9JBiUa8mQZwRy64euuL2WZaX+D7DGwz4=
14+
- secure: mIxTbk9QmMvSJ2BJL3rD/TBJppH4JIaMatoBBLsQzJYPtPzhvoEdgsPySh2jf3DAx7IUiQGbQEGsEyLfARanwZIkh5DggHWdMvYsP0ypCiNR7KV7BHCPfQd9v4OW7WF/KQCXzN3TIH+07KvF2swaNuEhKwnI+joVWMMgmEsCWQlTFiEbnieb2xxTMNrzl1WsrtANC9aQTeWVsNcW8xtDA/aQYefaQykOjHPJyyWaiLeBZ9Te0nMD7SeCSQUVywLT77saQJfsnHiCIKvv4lk+rvi6hQypAjBSznFwBa+Zkgk6y5DjT0SDhYXUVY3Kb8AJDFhgIwRlz74/ST9lGuEGnOjHZcQfqarbhcgbg8/HrsPP+spZwa4h0eRPNHfSDmrxTFDZXYDkULeLFPheMkvKKSqq0O+QdMmaL7hPuNWmEQINQg+quxHTjj/ldolL9Vb5db2zMu/jAYGmPDqQOk3GCilUcT4Eh64NmwEShfPY3VMuO/Weg37MJaFNX2efcKxCRWthpwEApqg/4GSk2Qeev7TY/mKkxNFXiXjMwjrXpobEtbQf4Kdy/vpyNE1YtxGiXBsSMMheMeDcVG2ryxaMNcKEyB2uncKqMH3jCU2lDJ/xoJfLmx2+FgxlrTtISl424lshQitWPU9co+FzBnXfyyZILxjsJZSzzZXe3ppWqAg=

LICENSE

+15-17
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
1-
/*
2-
* Copyright (c) ${year} by Filestack.
3-
* Some rights reserved.
4-
*
5-
* Licensed under the Apache License, Version 2.0 (the "License");
6-
* you may not use this file except in compliance with the License.
7-
* You may obtain a copy of the License at
8-
*
9-
* http://www.apache.org/licenses/LICENSE-2.0
10-
*
11-
* Unless required by applicable law or agreed to in writing, software
12-
* distributed under the License is distributed on an "AS IS" BASIS,
13-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14-
* See the License for the specific language governing permissions and
15-
* limitations under the License.
16-
*
17-
*/
1+
Copyright (c) ${year} by Filestack.
2+
Some rights reserved.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+

README.md

+100-43
Original file line numberDiff line numberDiff line change
@@ -4,71 +4,129 @@
44
<p align="center">
55
<strong>Javascript SDK for the Filestack API and content management system.</strong>
66
</p>
7+
<p align="center">
8+
<a href="https://codecov.io/gh/filestack/filestack-js">
9+
<img src="https://codecov.io/gh/filestack/filestack-js/branch/master/graph/badge.svg" />
10+
</a>
11+
12+
<a href="https://travis-ci.org/filestack/filestack-js">
13+
<img src="https://travis-ci.org/filestack/filestack-js.svg?branch=master" />
14+
</a>
15+
</p>
716
<p align="center">
817
<a href="https://npmjs.com/package/filestack-js"><img src="https://img.shields.io/npm/v/filestack-js.svg" /></a>
9-
<a href="https://static.filestackapi.com/filestack-js/2.x.x/filestack.min.js"><img src="https://img.badgesize.io/https://static.filestackapi.com/filestack-js/2.x.x/filestack.min.js?compression=gzip&color=green" /></a>
10-
<a href="https://static.filestackapi.com/filestack-js/2.x.x/filestack.min.js"><img src="https://img.badgesize.io/https://static.filestackapi.com/filestack-js/2.x.x/filestack.min.js?color=green" /></a>
18+
<a href="https://static.filestackapi.com/filestack-js/3.x.x/filestack.min.js"><img src="https://img.badgesize.io/https://static.filestackapi.com/filestack-js/3.x.x/filestack.min.js?compression=gzip&color=green" /></a>
19+
<a href="https://static.filestackapi.com/filestack-js/3.x.x/filestack.min.js"><img src="https://img.badgesize.io/https://static.filestackapi.com/filestack-js/3.x.x/filestack.min.js?color=green" /></a>
1120
<img src="https://img.shields.io/badge/module%20formats-umd%2C%20esm%2C%20cjs-green.svg" />
1221
<br/>
1322
<img src="https://badges.herokuapp.com/browsers?labels=none&googlechrome=latest&firefox=latest&microsoftedge=latest&iexplore=11&safari=latest&iphone=latest" />
1423
</p>
1524
<hr/>
1625

26+
**Table of Contents**
27+
28+
<!-- toc -->
29+
- [What's in the box?](#whats-in-the-box)
30+
- [Installation](#installation)
31+
- [API Documentation](#api-documentation)
32+
- [Usage](#usage)
33+
- [Browsers](#browsers)
34+
- [ES module](#es-module)
35+
- [UMD module](#umd-module)
36+
- [GZIP support](#gzip-support)
37+
- [SRI](#sri)
38+
- [Node](#node)
39+
- [CommonJS module](#commonjs-module)
40+
- [Module Overview](#module-overview)
41+
- [Releases Info](#releases-info)
42+
- [Live examples (JSFiddle)](#live-examples-jsfiddle)
43+
- [Picker Quick Start](#picker-quick-start)
44+
- [Promises](#promises)
45+
- [Development](#development)
46+
- [Debugging](#debugging)
47+
- [Node](#node-1)
48+
- [Browser](#browser)
49+
- [Versioning](#versioning)
50+
- [Contributing](#contributing)
51+
52+
1753
## What's in the box?
1854

1955
* A multi-part uploader powered on the backend by the [Filestack CIN](https://www.filestack.com/products/content-ingestion-network).
2056
* An interface to the [Filestack Processing Engine](https://www.filestack.com/docs/image-transformations) for transforming assets via URLs.
2157
* The Filestack Picker - an upload widget for the web that integrates over a dozen cloud providers and provides pre-upload image editing.
2258

59+
2360
## Installation
2461

2562
```sh
2663
npm install filestack-js
2764
```
65+
66+
## API Documentation
67+
68+
[https://filestack.github.io/filestack-js/](https://filestack.github.io/filestack-js/)
69+
2870
## Usage
2971

3072
### Browsers
3173

32-
**ES module**:
74+
#### ES module
3375
```js
3476
import * as filestack from 'filestack-js';
3577
const client = filestack.init('apikey');
3678
```
3779

38-
**UMD module**:
80+
#### UMD module
3981
```HTML
40-
<script src="//static.filestackapi.com/filestack-js/{MAJOR_VERSION}.x.x/filestack.min.js"></script>
82+
<script src="//static.filestackapi.com/filestack-js/{MAJOR_VERSION}.x.x/filestack.min.js" crossorigin="anonymous"></script>
4183
<script>
4284
const client = filestack.init('apikey');
4385
</script>
4486
```
4587

46-
where VERSION is one of the MAJOR versions of the filestack-js ie:
88+
where ```{MAJOR_VERSION}``` is one of the MAJOR versions of the filestack-js ie:
4789
```HTML
48-
<script src="//static.filestackapi.com/filestack-js/2.x.x/filestack.min.js"></script>
90+
<script src="//static.filestackapi.com/filestack-js/3.x.x/filestack.min.js" crossorigin="anonymous"></script>
4991
<script>
5092
const client = filestack.init('apikey');
5193
</script>
5294
```
5395

54-
**GZIP support**
96+
#### GZIP support
97+
To speed up library loading you can use gzipped file available after adding gz to file extension
5598
```HTML
56-
To speed up library loading you can use gzipped file available after adding gz before the file extension
57-
58-
<script src="//static.filestackapi.com/filestack-js/{MAJOR_VERSION}.x.x/filestack.min.gz.js"></script>
99+
<script src="//static.filestackapi.com/filestack-js/{MAJOR_VERSION}.x.x/filestack.min.js.gz" crossorigin="anonymous"></script>
59100
<script>
60101
const client = filestack.init('apikey');
61102
</script>
62103
```
63104

105+
#### SRI
106+
Subresource Integrity (SRI) is a security feature that enables browsers to verify that files they fetch (for example, from a CDN) are delivered without unexpected manipulation. It works by allowing you to provide a cryptographic hash that a fetched file must match
107+
108+
To obtain sri hashes for filestack-js library check manifest.json file on CDN:
109+
110+
```
111+
https://static.filestackapi.com/filestack-js/{LIBRARY_VERSION}/manifest.json
112+
```
113+
114+
```HTML
115+
<script src="//static.filestackapi.com/filestack-js/{LIBRARY_VERSION}/filestack.min.js.gz" integrity="{FILE_HASH}" crossorigin="anonymous"></script>
116+
```
117+
118+
Where ```{LIBRARY_VERSION}``` is currently used library version and ```{FILE_HASH}``` is one of the hashes from integrity field in manifest.json file
119+
120+
64121
### Node
65122

66-
**CommonJS module**:
123+
#### CommonJS module
67124
```js
68125
const client = require('filestack-js').init('apikey');
69126
```
70127

71-
### Module Overview
128+
129+
## Module Overview
72130

73131
The `package.json` specifies two separate modules:
74132

@@ -79,8 +137,13 @@ Node projects which depend on filestack-js will follow the `main` field in `pack
79137

80138
The pre-bundled browser module is also available in UMD format. This is useful if you are using script tags on a web page instead of bundling your application. It can be retrieved from both the Filestack CDN and the unpkg CDN:
81139

82-
* [Filestack CDN](https://static.filestackapi.com/filestack-js/1.x.x/filestack.min.js)
83-
* [unpkg](https://unpkg.com/[email protected])
140+
* [Filestack CDN](https://static.filestackapi.com/filestack-js/3.x.x/filestack.min.js)
141+
* [unpkg](https://unpkg.com/[email protected])
142+
143+
## Releases Info
144+
145+
Major releases will bo listed (with detailed examples) in releases folder starting from version 3.0.0
146+
84147

85148
## Live examples (JSFiddle)
86149

@@ -114,58 +177,52 @@ The picker instance returned from `client.picker` can be controlled with a few m
114177

115178
Please see our examples above to learn more about customizing the picker for your use case.
116179

117-
## API Documentation
118-
119-
[https://filestack.github.io/filestack-js/](https://filestack.github.io/filestack-js/)
120-
121-
### Promises
180+
## Promises
122181

123182
This library requires an environment that implements the [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) object spec.
124-
If you target IE11 or iOS before 8.0 you will need to add a `Promise` polyfill to your page or application.
183+
If you target IE11 or iOS before 8.0 you will need to add a `Promise` and `Symbol` polyfill to your page or application.
125184

126-
**Polyfills we recommend:**
185+
Polyfills we recommend:**
127186

128187
Module (for bundling):
129-
* https://github.com/taylorhakes/promise-polyfill
188+
* https://babeljs.io/docs/en/babel-polyfill
130189

131190
Script (for script tag):
132-
* https://cdn.polyfill.io/v2/polyfill.min.js?features=Promise
191+
* https://polyfill.io/v3/polyfill.min.js?features=Promise%2CPromise.prototype.finally%2CSymbol
133192

134193
## Development
135194

136-
Most tests in this library are expected to interface with actual backend services. Because we like to run tests during development, these services are mocked
137-
during unit testing.
195+
Most tests in this library are expected to interface with actual backend services. Because we like to run tests during development, these services are mocked during unit testing.
138196

139-
All tests are using Mocha. Browser tests are run with Karma.
197+
All tests are using Jest.
140198

141199
To run units:
142200

143201
```
144202
npm test
145203
```
146204

147-
To run integration tests:
205+
## Debugging
148206

149-
```
150-
npm run test:integration
207+
Filestack-js uses [`debug`](https://github.com/visionmedia/debug), so just run with environmental variable `DEBUG` set to `fs.*`.
208+
209+
### Node
210+
```js
211+
DEBUG=fs.* node example_upload.js
151212
```
152213

153-
Integration tests require a `.env` file in the root of your project with the following fields:
214+
### Browser
215+
Debug's enable state is persisted by localStorage
154216

217+
```js
218+
localStorage.debug = 'fs:*'
155219
```
156-
BROWSERSTACK_USERNAME=
157-
BROWSERSTACK_ACCESS_KEY=
158-
TEST_APIKEY=
159-
TEST_CLOUD_APIKEY=
160-
TEST_INTELLIGENT_APIKEY=
161-
TEST_SECURE_APIKEY=
162-
TEST_SIGNATURE=
163-
TEST_POLICY=
164-
TEST_FILELINK=
165-
TEST_SECURE_FILELINK=
166-
```
167220

168-
You will need to acquire this data from a Filestack developer if you plan on running the integration suite.
221+
And then refresh the page.
222+
223+
## Versioning
224+
225+
We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags](https://github.com/filestack/filestack-js/tags) on this repository.
169226

170227
## Contributing
171228

examples/transform/demo.js

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ window.addEventListener('DOMContentLoaded', function () {
99
}
1010
);
1111

12-
1312
const img = document.createElement('img');
1413
img.src = src.toString();
1514

jest.config.js

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module.exports = {
2+
name: 'filestack-js',
3+
collectCoverage: true,
4+
clearMocks: true,
5+
projects: [{
6+
displayName: 'Common',
7+
clearMocks: true,
8+
testMatch: ['<rootDir>/src/**/*.spec.ts'],
9+
testEnvironment: 'node',
10+
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
11+
transform: {
12+
'^.+\\.tsx?$': 'ts-jest'
13+
},
14+
}, {
15+
displayName: 'Node',
16+
clearMocks: true,
17+
testMatch: ['<rootDir>/src/**/*.spec.ts'],
18+
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
19+
testMatch: ['<rootDir>/src/**/*.spec.node.ts'],
20+
testEnvironment: 'node',
21+
transform: {
22+
'^.+\\.tsx?$': 'ts-jest'
23+
},
24+
}, {
25+
displayName: 'Browser',
26+
testMatch: ['<rootDir>/src/**/*.browser.spec.ts'],
27+
clearMocks: true,
28+
testEnvironment: 'jsdom',
29+
setupFiles: ['jest-localstorage-mock'],
30+
testMatch: ['<rootDir>/src/**/*.spec.browser.ts'],
31+
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
32+
transform: {
33+
'^.+\\.tsx?$': 'ts-jest'
34+
},
35+
}]
36+
};

0 commit comments

Comments
 (0)