Skip to content

Commit

Permalink
allow custom url for coco ssd model (tensorflow#278)
Browse files Browse the repository at this point in the history
* allow custom url for coco ssd model

* updated the load api to use a modelConfig interface

* update the major version

* fix the demo package.json
  • Loading branch information
pyu10055 authored Jul 29, 2019
1 parent 08c57d7 commit 0fdc5e3
Show file tree
Hide file tree
Showing 9 changed files with 81 additions and 132 deletions.
14 changes: 10 additions & 4 deletions coco-ssd/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,16 +70,22 @@ You can also take a look at the [demo app](./demo).
`coco-ssd` is the module name, which is automatically included when you use the `<script src>` method. When using ES6 imports, `coco-ssd` is the module.

```ts
cocoSsd.load(
base?: 'mobilenet_v1' | 'mobilenet_v2' | 'lite_mobilenet_v2'
)
export interface ModelConfig {
base?: ObjectDetectionBaseModel;
modelUrl?: string;
}

cocoSsd.load(config: ModelConfig = {});
```

Args:
**base:** Controls the base cnn model, can be 'mobilenet_v1', 'mobilenet_v2' or 'lite_mobilenet_v2'. Defaults to 'lite_mobilenet_v2'.
**config** Type of ModelConfig interface with following attributes:
- **base:** Controls the base cnn model, can be 'mobilenet_v1', 'mobilenet_v2' or 'lite_mobilenet_v2'. Defaults to 'lite_mobilenet_v2'.
lite_mobilenet_v2 is smallest in size, and fastest in inference speed.
mobilenet_v2 has the highest classification accuracy.

- **modelUrl:** An optional string that specifies custom url of the model. This is useful for area/countries that don't have access to the model hosted on GCP.

Returns a `model` object.

#### Detecting the objects
Expand Down
2 changes: 1 addition & 1 deletion coco-ssd/demo/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ select.onchange = async (event) => {
const model = await modelPromise;
model.dispose();
modelPromise = cocoSsd.load(
event.srcElement.options[event.srcElement.selectedIndex].value);
{base: event.srcElement.options[event.srcElement.selectedIndex].value});
};

const image = document.getElementById('image');
Expand Down
3 changes: 2 additions & 1 deletion coco-ssd/demo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
},
"dependencies": {
"@tensorflow-models/coco-ssd": "1.1.0",
"@tensorflow/tfjs": "1.2.1",
"@tensorflow/tfjs-core": "1.2.6",
"@tensorflow/tfjs-converter": "1.2.5",
"stats.js": "^0.17.0"
},
"scripts": {
Expand Down
86 changes: 14 additions & 72 deletions coco-ssd/demo/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -656,64 +656,33 @@
resolved "https://registry.yarnpkg.com/@tensorflow-models/coco-ssd/-/coco-ssd-1.1.0.tgz#b181ae6897be12296ada15acba8e653865480c44"
integrity sha512-RtfjINhJG+ohEOL/XC4y68mFf5F7c/rMZZdExWUBs0NdqAfFQlRwJQL5moYJAvpmlLWGexgXg/WN/QWETcYFLQ==

"@tensorflow/[email protected].1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-1.2.1.tgz#996e9e2e7d0f03717e7fc1211176ee43049b38ac"
integrity sha512-HKWlGV9uSWMUaogo6TyS/x2xdgO/du/vXPj91iGnm+t44Jl++1PXYD0LKD1LdNLR2RhUS3TJv6HuqDmYOO8EYw==
"@tensorflow/[email protected].5":
version "1.2.5"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-1.2.5.tgz#11b10a421605f82eb7c8da2bfb42bd8ccfc35303"
integrity sha512-KQoNDl1UDmBBqknaxiFg2tyYoVFyxJ0q5mY/e6mqavokf4vVXn4TsurzxDx++uV6gKEL1fPk9TuSIaq8xHuCRQ==

"@tensorflow/[email protected].1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-1.2.1.tgz#0ff54aa7fd412b8c17e39f6ec5a97bf032e8f530"
integrity sha512-cpSHl+tP7cketq0cAyJPbIGxNlPV7mR6lkMLLDvZAmZUTBSyBufCdJg/KwgjHMZksE/KqjL4/RyccOGBAQcb7g==
"@tensorflow/[email protected].6":
version "1.2.6"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-1.2.6.tgz#1baf883b6ae117c0749a255db478a83066339c8c"
integrity sha512-BMq209hba/bBRnjnEgMAtNCDBLVL0ZUB8ZhoXuEI1Kmu8K2PnynMNK35rmkl5rAGTs1fdRRYezG/VN40Sq9qzw==
dependencies:
"@types/offscreencanvas" "~2019.3.0"
"@types/seedrandom" "2.4.27"
"@types/webgl-ext" "0.0.30"
"@types/webgl2" "0.0.4"
node-fetch "~2.1.2"
seedrandom "2.4.3"
optionalDependencies:
rollup-plugin-visualizer "~1.1.1"

"@tensorflow/[email protected]":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-1.2.1.tgz#c0ffdfed0a6c18f17205ad1d55ff1433a0f973c4"
integrity sha512-5H/AqoGBWWY/7k8baaYmvu6SzRpEiSgAeOYZu3ueq8O766aHQzFRjmCyC6vUj8lko2VWfsE891zsdw4hieFnoA==
dependencies:
"@types/node-fetch" "^2.1.2"
node-fetch "~2.1.2"

"@tensorflow/[email protected]":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-1.2.1.tgz#78f28e90ee95ec206e69d5e2432b677e28c70c45"
integrity sha512-h3uFYRHzEGqtyzC4PLHcXGn2tbPcozk9H6yMEtdI1yLJZXBKTh4Yjs9B/yN9HRxp31pc2hCFrqU7ViNYAg/vYw==

"@tensorflow/[email protected]":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-1.2.1.tgz#1237fab53005d659ee082974428061d78493341f"
integrity sha512-uWYuRlcewFFX1mE+6hqXzdDxYMWsylxmREWvwC35zj2JexiIwJrTFLDu50RSwb6muL9tZJrwfZYbuOSfV0avQA==
dependencies:
"@tensorflow/tfjs-converter" "1.2.1"
"@tensorflow/tfjs-core" "1.2.1"
"@tensorflow/tfjs-data" "1.2.1"
"@tensorflow/tfjs-layers" "1.2.1"

"@types/node-fetch@^2.1.2":
version "2.1.6"
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.1.6.tgz#4326288b49f352a142f03c63526ebce0f4c50877"
integrity sha512-Hv1jgh3pfpUEl2F2mqUd1AfLSk1YbUCeBJFaP36t7esAO617dErqdxWb5cdG2NfJGOofkmBW36fdx0dVewxDRg==
dependencies:
"@types/node" "*"

"@types/node@*":
version "11.10.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.10.4.tgz#3f5fc4f0f322805f009e00ab35a2ff3d6b778e42"
integrity sha512-wa09itaLE8L705aXd8F80jnFpxz3Y1/KRHfKsYL2bPc0XF+wEWu8sR9n5bmeu8Ba1N9z2GRNzm/YdHcghLkLKg==

"@types/node@^10.11.7":
version "10.12.29"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.29.tgz#c2c8d2d27bb55649fbafe8ea1731658421f38acf"
integrity sha512-J/tnbnj8HcsBgCe2apZbdUpQ7hs4d7oZNTYA5bekWdP0sr2NGsOpI/HRdDroEi209tEvTcTtxhD0FfED3DhEcw==

"@types/offscreencanvas@~2019.3.0":
version "2019.3.0"
resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553"
integrity sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==

"@types/q@^1.5.1":
version "1.5.1"
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.1.tgz#48fd98c1561fe718b61733daed46ff115b496e18"
Expand Down Expand Up @@ -4292,13 +4261,6 @@ opn@^5.1.0:
dependencies:
is-wsl "^1.1.0"

opn@^5.4.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
dependencies:
is-wsl "^1.1.0"

optionator@^0.8.1, optionator@^0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
Expand Down Expand Up @@ -5500,16 +5462,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^3.0.0"
inherits "^2.0.1"

rollup-plugin-visualizer@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-1.1.1.tgz#454ae0aed23845407ebfb81cc52114af308d6d90"
integrity sha512-7xkSKp+dyJmSC7jg2LXqViaHuOnF1VvIFCnsZEKjrgT5ZVyiLLSbeszxFcQSfNJILphqgAEmWAUz0Z4xYScrRw==
dependencies:
mkdirp "^0.5.1"
opn "^5.4.0"
source-map "^0.7.3"
typeface-oswald "0.0.54"

run-async@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
Expand Down Expand Up @@ -5772,11 +5724,6 @@ source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=

source-map@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==

spdx-correct@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
Expand Down Expand Up @@ -6167,11 +6114,6 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=

[email protected]:
version "0.0.54"
resolved "https://registry.yarnpkg.com/typeface-oswald/-/typeface-oswald-0.0.54.tgz#1e253011622cdd50f580c04e7d625e7f449763d7"
integrity sha512-U1WMNp4qfy4/3khIfHMVAIKnNu941MXUfs3+H9R8PFgnoz42Hh9pboSFztWr86zut0eXC8byalmVhfkiKON/8Q==

unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
Expand Down
10 changes: 5 additions & 5 deletions coco-ssd/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@tensorflow-models/coco-ssd",
"version": "1.1.1",
"version": "2.0.0",
"description": "Object detection model (coco-ssd) in TensorFlow.js",
"main": "dist/index.js",
"unpkg": "dist/coco-ssd.min.js",
Expand All @@ -13,12 +13,12 @@
"url": "https://github.com/tensorflow/tfjs-models.git"
},
"peerDependencies": {
"@tensorflow/tfjs-core": "~1.2.1",
"@tensorflow/tfjs-converter": "~1.2.1"
"@tensorflow/tfjs-core": "~1.2.6",
"@tensorflow/tfjs-converter": "~1.2.5"
},
"devDependencies": {
"@tensorflow/tfjs-core": "~1.2.1",
"@tensorflow/tfjs-converter": "~1.2.1",
"@tensorflow/tfjs-core": "~1.2.6",
"@tensorflow/tfjs-converter": "~1.2.5",
"@types/jasmine": "~2.8.8",
"babel-core": "~6.26.0",
"babel-plugin-transform-runtime": "~6.23.0",
Expand Down
29 changes: 23 additions & 6 deletions coco-ssd/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,30 @@ export interface DetectedObject {
score: number;
}

export async function load(
base: ObjectDetectionBaseModel = 'lite_mobilenet_v2') {
/**
* Coco-ssd model loading is configurable using the following config dictionary.
*
* `base`: ObjectDetectionBaseModel. It determines wich PoseNet architecture
* to load. The supported architectures are: 'mobilenet_v1', 'mobilenet_v2' and
* 'lite_mobilenet_v2'. It is default to 'lite_mobilenet_v2'.
*
* `modelUrl`: An optional string that specifies custom url of the model. This
* is useful for area/countries that don't have access to the model hosted on
* GCP.
*/
export interface ModelConfig {
base?: ObjectDetectionBaseModel;
modelUrl?: string;
}

export async function load(config: ModelConfig = {}) {
if (tf == null) {
throw new Error(
`Cannot find TensorFlow.js. If you are using a <script> tag, please ` +
`also include @tensorflow/tfjs on the page before using this model.`);
}

const base = config.base || 'lite_mobilenet_v2';
const modelUrl = config.modelUrl;
if (['mobilenet_v1', 'mobilenet_v2', 'lite_mobilenet_v2'].indexOf(base) ===
-1) {
throw new Error(
Expand All @@ -49,7 +65,7 @@ export async function load(
` 'mobilenet_v2' and 'lite_mobilenet_v2'.`);
}

const objectDetection = new ObjectDetection(base);
const objectDetection = new ObjectDetection(base, modelUrl);
await objectDetection.load();
return objectDetection;
}
Expand All @@ -58,8 +74,9 @@ export class ObjectDetection {
private modelPath: string;
private model: tfconv.GraphModel;

constructor(base: ObjectDetectionBaseModel) {
this.modelPath = `${BASE_PATH}${this.getPrefix(base)}/model.json`;
constructor(base: ObjectDetectionBaseModel, modelUrl?: string) {
this.modelPath =
modelUrl || `${BASE_PATH}${this.getPrefix(base)}/model.json`;
}

private getPrefix(base: ObjectDetectionBaseModel) {
Expand Down
17 changes: 17 additions & 0 deletions coco-ssd/src/ssd_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import * as tfconv from '@tensorflow/tfjs-converter';
import * as tf from '@tensorflow/tfjs-core';
import {describeWithFlags, NODE_ENVS} from '@tensorflow/tfjs-core/dist/jasmine_util';
import {expectArrayBuffersEqual} from '@tensorflow/tfjs-core/dist/test_util';

import {load} from './index';

Expand Down Expand Up @@ -50,4 +51,20 @@ describeWithFlags('ObjectDetection', NODE_ENVS, () => {

expect(data).toEqual([{bbox: [227, 227, 0, 0], class: 'person', score: 1}]);
});
it('should allow custom model url', async () => {
const objectDetection = await load({base: 'mobilenet_v1'});

expect(tfconv.loadGraphModel)
.toHaveBeenCalledWith(
'https://storage.googleapis.com/tfjs-models/' +
'savedmodel/ssd_mobilenet_v1/model.json');
});

it('should allow custom model url', async () => {
const objectDetection =
await load({modelUrl: 'https://test.org/model.json'});

expect(tfconv.loadGraphModel)
.toHaveBeenCalledWith('https://test.org/model.json');
});
});
2 changes: 1 addition & 1 deletion coco-ssd/src/version.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/** @license See the LICENSE file. */
// This code is auto-generated, do not modify this file!
const version = '0.1.1';
const version = '2.0.0';
export {version};
50 changes: 8 additions & 42 deletions coco-ssd/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,22 @@
# yarn lockfile v1


"@tensorflow/tfjs-converter@~1.2.1":
version "1.2.2"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-1.2.2.tgz#c95e2f79b1de830b8079c7704dc8463ced2d2b79"
integrity sha512-NM2NcPRHpCNeJdBxHcYpmW9ZHTQ2lJFJgmgGpQ8CxSC9CtQB05bFONs3SKcwMNDE/69QBRVom5DYqLCVUg+A+g==
"@tensorflow/tfjs-converter@~1.2.5":
version "1.2.5"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-1.2.5.tgz#11b10a421605f82eb7c8da2bfb42bd8ccfc35303"
integrity sha512-KQoNDl1UDmBBqknaxiFg2tyYoVFyxJ0q5mY/e6mqavokf4vVXn4TsurzxDx++uV6gKEL1fPk9TuSIaq8xHuCRQ==

"@tensorflow/tfjs-core@~1.2.1":
version "1.2.2"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-1.2.2.tgz#2efa89e323612a26aeccee9b3ae9f5ac5a635bbe"
integrity sha512-2hCHMKjh3UNpLEjbAEaurrTGJyj/KpLtMSAraWgHA1vGY0kmk50BBSbgCDmXWUVm7lyh/SkCq4/GrGDZktEs3g==
"@tensorflow/tfjs-core@~1.2.6":
version "1.2.6"
resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-1.2.6.tgz#1baf883b6ae117c0749a255db478a83066339c8c"
integrity sha512-BMq209hba/bBRnjnEgMAtNCDBLVL0ZUB8ZhoXuEI1Kmu8K2PnynMNK35rmkl5rAGTs1fdRRYezG/VN40Sq9qzw==
dependencies:
"@types/offscreencanvas" "~2019.3.0"
"@types/seedrandom" "2.4.27"
"@types/webgl-ext" "0.0.30"
"@types/webgl2" "0.0.4"
node-fetch "~2.1.2"
seedrandom "2.4.3"
optionalDependencies:
rollup-plugin-visualizer "~1.1.1"

"@types/[email protected]":
version "0.0.39"
Expand Down Expand Up @@ -890,11 +888,6 @@ is-windows@^1.0.2:
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==

is-wsl@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=

[email protected]:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
Expand Down Expand Up @@ -1172,13 +1165,6 @@ once@^1.3.0:
dependencies:
wrappy "1"

opn@^5.4.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
dependencies:
is-wsl "^1.1.0"

os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
Expand Down Expand Up @@ -1373,16 +1359,6 @@ rollup-plugin-uglify@~3.0.0:
dependencies:
uglify-es "^3.3.7"

rollup-plugin-visualizer@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-1.1.1.tgz#454ae0aed23845407ebfb81cc52114af308d6d90"
integrity sha512-7xkSKp+dyJmSC7jg2LXqViaHuOnF1VvIFCnsZEKjrgT5ZVyiLLSbeszxFcQSfNJILphqgAEmWAUz0Z4xYScrRw==
dependencies:
mkdirp "^0.5.1"
opn "^5.4.0"
source-map "^0.7.3"
typeface-oswald "0.0.54"

rollup-pluginutils@^2.0.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz#de43ab54965bbf47843599a7f3adceb723de38db"
Expand Down Expand Up @@ -1522,11 +1498,6 @@ source-map@^0.6.0, source-map@~0.6.1:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==

source-map@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==

spdx-correct@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
Expand Down Expand Up @@ -1692,11 +1663,6 @@ tsutils@^2.12.1:
dependencies:
tslib "^1.8.1"

[email protected]:
version "0.0.54"
resolved "https://registry.yarnpkg.com/typeface-oswald/-/typeface-oswald-0.0.54.tgz#1e253011622cdd50f580c04e7d625e7f449763d7"
integrity sha512-U1WMNp4qfy4/3khIfHMVAIKnNu941MXUfs3+H9R8PFgnoz42Hh9pboSFztWr86zut0eXC8byalmVhfkiKON/8Q==

[email protected]:
version "3.3.3333"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.3333.tgz#171b2c5af66c59e9431199117a3bcadc66fdcfd6"
Expand Down

0 comments on commit 0fdc5e3

Please sign in to comment.