mirror of
https://github.com/oceanprotocol-archive/squid-js.git
synced 2024-02-02 15:31:51 +01:00
setup github/npm releases
This commit is contained in:
parent
41a876b196
commit
2f56090668
3
.gitignore
vendored
3
.gitignore
vendored
@ -1 +1,2 @@
|
||||
node_modules/
|
||||
node_modules/
|
||||
dist/
|
1
.npmignore
Normal file
1
.npmignore
Normal file
@ -0,0 +1 @@
|
||||
node_modules/
|
37
README.md
37
README.md
@ -19,6 +19,7 @@
|
||||
|
||||
- [Get Started](#get-started)
|
||||
- [Production Build](#production-build)
|
||||
- [npm releases](#nopm-releases)
|
||||
- [License](#license)
|
||||
|
||||
---
|
||||
@ -40,6 +41,40 @@ This will start a watcher for changes of the code.
|
||||
npm run build
|
||||
```
|
||||
|
||||
## npm releases
|
||||
|
||||
For a new **patch release**, execute on the machine where you're logged into your npm account:
|
||||
|
||||
```bash
|
||||
npm run release
|
||||
```
|
||||
|
||||
In case you have 2FA setup on npm.js, pass a code as One Time Password:
|
||||
|
||||
```bash
|
||||
npm run release --otp <yourcode>
|
||||
```
|
||||
|
||||
Command is powered by [`release-it`](https://github.com/webpro/release-it) package, defined in the `package.json`.
|
||||
|
||||
That's what the command does without any user interaction:
|
||||
|
||||
- create release commit by updating version in `package.json`
|
||||
- create tag for that release commit
|
||||
- push commit & tag
|
||||
- create a new release on GitHub, with change log auto-generated from commit messages
|
||||
- publish to npm as a new release
|
||||
|
||||
If you want to create a **minor** or **major release**, use these commands:
|
||||
|
||||
```bash
|
||||
npm run release-minor
|
||||
```
|
||||
|
||||
```bash
|
||||
npm run release-major
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
```
|
||||
@ -55,4 +90,4 @@ Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
limitations under the License.
|
||||
|
74
dist/contractLoader.js
vendored
74
dist/contractLoader.js
vendored
@ -1,74 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
||||
|
||||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
||||
|
||||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
||||
|
||||
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
||||
|
||||
var _truffleContract = _interopRequireDefault(require("truffle-contract"));
|
||||
|
||||
var contracts = [];
|
||||
|
||||
var ContractLoader =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function ContractLoader() {
|
||||
(0, _classCallCheck2.default)(this, ContractLoader);
|
||||
}
|
||||
|
||||
(0, _createClass2.default)(ContractLoader, null, [{
|
||||
key: "_doLoad",
|
||||
value: function () {
|
||||
var _doLoad2 = (0, _asyncToGenerator2.default)(
|
||||
/*#__PURE__*/
|
||||
_regenerator.default.mark(function _callee(what, where, provider) {
|
||||
var artifact, contract;
|
||||
return _regenerator.default.wrap(function _callee$(_context) {
|
||||
while (1) {
|
||||
switch (_context.prev = _context.next) {
|
||||
case 0:
|
||||
// console.log("Loading", what, "from", where)
|
||||
|
||||
/* eslint-disable-next-line */
|
||||
artifact = require("@oceanprotocol/keeper-contracts/artifacts/".concat(what, ".").concat(where));
|
||||
contract = (0, _truffleContract.default)(artifact);
|
||||
contract.setProvider(provider);
|
||||
_context.next = 5;
|
||||
return contract.at(artifact.address);
|
||||
|
||||
case 5:
|
||||
contracts[what] = _context.sent;
|
||||
return _context.abrupt("return", contracts[what]);
|
||||
|
||||
case 7:
|
||||
case "end":
|
||||
return _context.stop();
|
||||
}
|
||||
}
|
||||
}, _callee, this);
|
||||
}));
|
||||
|
||||
return function _doLoad(_x, _x2, _x3) {
|
||||
return _doLoad2.apply(this, arguments);
|
||||
};
|
||||
}()
|
||||
}, {
|
||||
key: "load",
|
||||
value: function load(what, where, provider) {
|
||||
return contracts[what] || ContractLoader._doLoad(what, where, provider);
|
||||
}
|
||||
}]);
|
||||
return ContractLoader;
|
||||
}();
|
||||
|
||||
exports.default = ContractLoader;
|
62
dist/ocean-agent.js
vendored
62
dist/ocean-agent.js
vendored
@ -1,62 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
||||
|
||||
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
||||
|
||||
/* global fetch */
|
||||
var OceanAgent =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function OceanAgent(connectionUrl) {
|
||||
(0, _classCallCheck2.default)(this, OceanAgent);
|
||||
this.assetsUrl = connectionUrl + '/assets';
|
||||
}
|
||||
|
||||
(0, _createClass2.default)(OceanAgent, [{
|
||||
key: "getAssetsMetadata",
|
||||
value: function getAssetsMetadata() {
|
||||
return fetch(this.assetsUrl + '/metadata', {
|
||||
method: 'GET'
|
||||
}).then(function (res) {
|
||||
return res.json();
|
||||
}).then(function (data) {
|
||||
return JSON.parse(data);
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "publishDataAsset",
|
||||
value: function publishDataAsset(asset) {
|
||||
return fetch(this.assetsUrl + '/metadata', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(asset),
|
||||
headers: {
|
||||
'Content-type': 'application/json'
|
||||
}
|
||||
}).then(function (response) {
|
||||
console.log('Success:', response);
|
||||
|
||||
if (response.ok) {
|
||||
console.log('Success:', response);
|
||||
return true;
|
||||
}
|
||||
|
||||
console.log('Failed: ', response.status, response.statusText);
|
||||
return false; // throw new Error(response.statusText ? response.statusText : `publish asset failed with status ${response.status}`)
|
||||
}).catch(function (error) {
|
||||
console.log("Publish asset to ocean database could not be completed: ".concat(error.message()));
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}]);
|
||||
return OceanAgent;
|
||||
}();
|
||||
|
||||
exports.default = OceanAgent;
|
390
dist/ocean-keeper.js
vendored
390
dist/ocean-keeper.js
vendored
@ -1,390 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
|
||||
|
||||
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
||||
|
||||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
||||
|
||||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
||||
|
||||
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
||||
|
||||
var _web = _interopRequireDefault(require("web3"));
|
||||
|
||||
var _contractLoader = _interopRequireDefault(require("./contractLoader"));
|
||||
|
||||
var DEFAULT_GAS = 300000;
|
||||
|
||||
var OceanKeeper =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function OceanKeeper(uri, network) {
|
||||
(0, _classCallCheck2.default)(this, OceanKeeper);
|
||||
var web3Provider = new _web.default.providers.HttpProvider(uri);
|
||||
this.web3 = new _web.default(web3Provider);
|
||||
this.defaultGas = DEFAULT_GAS;
|
||||
this.network = network || 'development';
|
||||
}
|
||||
|
||||
(0, _createClass2.default)(OceanKeeper, [{
|
||||
key: "initContracts",
|
||||
value: function () {
|
||||
var _initContracts = (0, _asyncToGenerator2.default)(
|
||||
/*#__PURE__*/
|
||||
_regenerator.default.mark(function _callee() {
|
||||
return _regenerator.default.wrap(function _callee$(_context) {
|
||||
while (1) {
|
||||
switch (_context.prev = _context.next) {
|
||||
case 0:
|
||||
_context.next = 2;
|
||||
return _contractLoader.default.load('OceanToken', this.network, this.web3.currentProvider);
|
||||
|
||||
case 2:
|
||||
this.oceanToken = _context.sent;
|
||||
_context.next = 5;
|
||||
return _contractLoader.default.load('OceanMarket', this.network, this.web3.currentProvider);
|
||||
|
||||
case 5:
|
||||
this.oceanMarket = _context.sent;
|
||||
_context.next = 8;
|
||||
return _contractLoader.default.load('OceanAuth', this.network, this.web3.currentProvider);
|
||||
|
||||
case 8:
|
||||
this.oceanAuth = _context.sent;
|
||||
return _context.abrupt("return", {
|
||||
oceanToken: this.oceanToken,
|
||||
oceanMarket: this.oceanMarket,
|
||||
oceanAuth: this.oceanAuth
|
||||
});
|
||||
|
||||
case 10:
|
||||
case "end":
|
||||
return _context.stop();
|
||||
}
|
||||
}
|
||||
}, _callee, this);
|
||||
}));
|
||||
|
||||
return function initContracts() {
|
||||
return _initContracts.apply(this, arguments);
|
||||
};
|
||||
}() // web3 wrappers
|
||||
|
||||
}, {
|
||||
key: "sign",
|
||||
value: function sign(accountAddress, message) {
|
||||
return this.web3.eth.sign(accountAddress, message);
|
||||
}
|
||||
}, {
|
||||
key: "getMessageHash",
|
||||
value: function getMessageHash(message) {
|
||||
return this.web3.sha3("\x19Ethereum Signed Message:\n".concat(message.length).concat(message));
|
||||
} // call functions (costs no gas)
|
||||
|
||||
}, {
|
||||
key: "checkAsset",
|
||||
value: function checkAsset(assetId) {
|
||||
return this.oceanMarket.checkAsset(assetId);
|
||||
}
|
||||
}, {
|
||||
key: "getBalance",
|
||||
value: function getBalance(accountAddress) {
|
||||
return this.oceanToken.balanceOf.call(accountAddress);
|
||||
}
|
||||
}, {
|
||||
key: "getAssetPrice",
|
||||
value: function getAssetPrice(assetId) {
|
||||
return this.oceanMarket.getAssetPrice(assetId).then(function (price) {
|
||||
return price.toNumber();
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "getOrderStatus",
|
||||
value: function getOrderStatus(orderId) {
|
||||
return this.oceanAuth.statusOfAccessRequest(orderId);
|
||||
}
|
||||
}, {
|
||||
key: "verifyOrderPayment",
|
||||
value: function verifyOrderPayment(orderId) {
|
||||
return this.oceanMarket.verifyPaymentReceived(orderId);
|
||||
}
|
||||
}, {
|
||||
key: "getEncryptedAccessToken",
|
||||
value: function getEncryptedAccessToken(orderId, senderAddress) {
|
||||
return this.oceanAuth.getEncryptedAccessToken(orderId, {
|
||||
from: senderAddress
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "getConsumerOrders",
|
||||
value: function () {
|
||||
var _getConsumerOrders = (0, _asyncToGenerator2.default)(
|
||||
/*#__PURE__*/
|
||||
_regenerator.default.mark(function _callee3(consumerAddress) {
|
||||
var _this = this;
|
||||
|
||||
var accessConsentEvent, _resolve, _reject, promise, getEvents, events, orders;
|
||||
|
||||
return _regenerator.default.wrap(function _callee3$(_context3) {
|
||||
while (1) {
|
||||
switch (_context3.prev = _context3.next) {
|
||||
case 0:
|
||||
accessConsentEvent = this.oceanAuth.AccessConsentRequested({
|
||||
_consumer: consumerAddress
|
||||
}, {
|
||||
fromBlock: 0,
|
||||
toBlock: 'latest'
|
||||
});
|
||||
_resolve = null;
|
||||
_reject = null;
|
||||
promise = new Promise(function (resolve, reject) {
|
||||
_resolve = resolve;
|
||||
_reject = reject;
|
||||
});
|
||||
|
||||
getEvents = function getEvents() {
|
||||
accessConsentEvent.get(function (error, logs) {
|
||||
if (error) {
|
||||
_reject(error);
|
||||
|
||||
throw new Error(error);
|
||||
} else {
|
||||
_resolve(logs);
|
||||
}
|
||||
});
|
||||
return promise;
|
||||
};
|
||||
|
||||
_context3.next = 7;
|
||||
return getEvents().then(function (events) {
|
||||
return events;
|
||||
});
|
||||
|
||||
case 7:
|
||||
events = _context3.sent;
|
||||
// let orders = await this.buildOrdersFromEvents(events, consumerAddress).then((result) => result)
|
||||
orders = events.filter(function (obj) {
|
||||
return obj.args._consumer === consumerAddress;
|
||||
}).map(
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
var _ref = (0, _asyncToGenerator2.default)(
|
||||
/*#__PURE__*/
|
||||
_regenerator.default.mark(function _callee2(event) {
|
||||
return _regenerator.default.wrap(function _callee2$(_context2) {
|
||||
while (1) {
|
||||
switch (_context2.prev = _context2.next) {
|
||||
case 0:
|
||||
_context2.t0 = _objectSpread2.default;
|
||||
_context2.t1 = {};
|
||||
_context2.t2 = event.args;
|
||||
_context2.t3 = event.args._timeout.toNumber();
|
||||
_context2.next = 6;
|
||||
return _this.getOrderStatus(event.args._id).then(function (status) {
|
||||
return status.toNumber();
|
||||
});
|
||||
|
||||
case 6:
|
||||
_context2.t4 = _context2.sent;
|
||||
_context2.next = 9;
|
||||
return _this.verifyOrderPayment(event.args._id).then(function (received) {
|
||||
return received;
|
||||
});
|
||||
|
||||
case 9:
|
||||
_context2.t5 = _context2.sent;
|
||||
_context2.t6 = {
|
||||
timeout: _context2.t3,
|
||||
status: _context2.t4,
|
||||
paid: _context2.t5,
|
||||
key: null
|
||||
};
|
||||
return _context2.abrupt("return", (0, _context2.t0)(_context2.t1, _context2.t2, _context2.t6));
|
||||
|
||||
case 12:
|
||||
case "end":
|
||||
return _context2.stop();
|
||||
}
|
||||
}
|
||||
}, _callee2, this);
|
||||
}));
|
||||
|
||||
return function (_x2) {
|
||||
return _ref.apply(this, arguments);
|
||||
};
|
||||
}());
|
||||
console.debug('got orders: ', orders);
|
||||
return _context3.abrupt("return", orders);
|
||||
|
||||
case 11:
|
||||
case "end":
|
||||
return _context3.stop();
|
||||
}
|
||||
}
|
||||
}, _callee3, this);
|
||||
}));
|
||||
|
||||
return function getConsumerOrders(_x) {
|
||||
return _getConsumerOrders.apply(this, arguments);
|
||||
};
|
||||
}() // Transactions with gas cost
|
||||
|
||||
}, {
|
||||
key: "requestTokens",
|
||||
value: function requestTokens(senderAddress, numTokens) {
|
||||
return this.oceanMarket.requestTokens(numTokens, {
|
||||
from: senderAddress
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "registerDataAsset",
|
||||
value: function () {
|
||||
var _registerDataAsset = (0, _asyncToGenerator2.default)(
|
||||
/*#__PURE__*/
|
||||
_regenerator.default.mark(function _callee4(name, description, price, publisherAddress) {
|
||||
var assetId, result;
|
||||
return _regenerator.default.wrap(function _callee4$(_context4) {
|
||||
while (1) {
|
||||
switch (_context4.prev = _context4.next) {
|
||||
case 0:
|
||||
_context4.next = 2;
|
||||
return this.oceanMarket.generateId(name + description);
|
||||
|
||||
case 2:
|
||||
assetId = _context4.sent;
|
||||
_context4.next = 5;
|
||||
return this.oceanMarket.register(assetId, price, {
|
||||
from: publisherAddress,
|
||||
gas: this.defaultGas
|
||||
});
|
||||
|
||||
case 5:
|
||||
result = _context4.sent;
|
||||
console.log('registered: ', result);
|
||||
return _context4.abrupt("return", assetId);
|
||||
|
||||
case 8:
|
||||
case "end":
|
||||
return _context4.stop();
|
||||
}
|
||||
}
|
||||
}, _callee4, this);
|
||||
}));
|
||||
|
||||
return function registerDataAsset(_x3, _x4, _x5, _x6) {
|
||||
return _registerDataAsset.apply(this, arguments);
|
||||
};
|
||||
}()
|
||||
}, {
|
||||
key: "sendPayment",
|
||||
value: function () {
|
||||
var _sendPayment = (0, _asyncToGenerator2.default)(
|
||||
/*#__PURE__*/
|
||||
_regenerator.default.mark(function _callee5(assetId, order, publisherAddress, senderAddress) {
|
||||
var assetPrice;
|
||||
return _regenerator.default.wrap(function _callee5$(_context5) {
|
||||
while (1) {
|
||||
switch (_context5.prev = _context5.next) {
|
||||
case 0:
|
||||
_context5.next = 2;
|
||||
return this.oceanMarket.getAssetPrice(assetId).then(function (price) {
|
||||
return price.toNumber();
|
||||
});
|
||||
|
||||
case 2:
|
||||
assetPrice = _context5.sent;
|
||||
this.oceanMarket.sendPayment(order.id, publisherAddress, assetPrice, order.timeout, {
|
||||
from: senderAddress,
|
||||
gas: 2000000
|
||||
});
|
||||
|
||||
case 4:
|
||||
case "end":
|
||||
return _context5.stop();
|
||||
}
|
||||
}
|
||||
}, _callee5, this);
|
||||
}));
|
||||
|
||||
return function sendPayment(_x7, _x8, _x9, _x10) {
|
||||
return _sendPayment.apply(this, arguments);
|
||||
};
|
||||
}()
|
||||
}, {
|
||||
key: "cancelAccessRequest",
|
||||
value: function cancelAccessRequest(orderId, senderAddress) {
|
||||
return this.oceanAuth.cancelAccessRequest(orderId, {
|
||||
from: senderAddress
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "orchestrateResourcePurchase",
|
||||
value: function orchestrateResourcePurchase(assetId, publisherId, price, privateKey, publicKey, timeout, senderAddress, initialRequestEventHandler, accessCommittedEventHandler, tokenPublishedEventHandler) {
|
||||
var _this2 = this;
|
||||
|
||||
var oceanToken = this.oceanToken,
|
||||
oceanMarket = this.oceanMarket,
|
||||
oceanAuth = this.oceanAuth; // Allow OceanMarket contract to transfer funds on the consumer's behalf
|
||||
|
||||
oceanToken.approve(oceanMarket.address, price, {
|
||||
from: senderAddress,
|
||||
gas: 2000000
|
||||
}); // Submit the access request
|
||||
|
||||
oceanAuth.initiateAccessRequest(assetId, publisherId, publicKey, timeout, {
|
||||
from: senderAddress,
|
||||
gas: 1000000
|
||||
});
|
||||
var resourceFilter = {
|
||||
_resourceId: assetId,
|
||||
_consumer: senderAddress
|
||||
};
|
||||
var initRequestEvent = oceanAuth.AccessConsentRequested(resourceFilter);
|
||||
var order = {};
|
||||
|
||||
this._listenOnce(initRequestEvent, 'AccessConsentRequested', function (result, error) {
|
||||
order = initialRequestEventHandler(result, error);
|
||||
var requestIdFilter = {
|
||||
_id: order.id
|
||||
};
|
||||
var accessCommittedEvent = oceanAuth.AccessRequestCommitted(requestIdFilter);
|
||||
var tokenPublishedEvent = oceanAuth.EncryptedTokenPublished(requestIdFilter);
|
||||
|
||||
_this2._listenOnce(accessCommittedEvent, 'AccessRequestCommitted', function (result, error) {
|
||||
accessCommittedEventHandler(result, order, error);
|
||||
});
|
||||
|
||||
_this2._listenOnce(tokenPublishedEvent, 'EncryptedTokenPublished', function (result, error) {
|
||||
tokenPublishedEventHandler(result, order, error);
|
||||
});
|
||||
});
|
||||
|
||||
return order;
|
||||
} // Helper functions (private)
|
||||
|
||||
}, {
|
||||
key: "_listenOnce",
|
||||
value: function _listenOnce(event, eventName, callback) {
|
||||
event.watch(function (error, result) {
|
||||
event.stopWatching();
|
||||
|
||||
if (error) {
|
||||
console.log("Error in keeper ".concat(eventName, " event: "), error);
|
||||
}
|
||||
|
||||
callback(result, error);
|
||||
});
|
||||
}
|
||||
}]);
|
||||
return OceanKeeper;
|
||||
}();
|
||||
|
||||
exports.default = OceanKeeper;
|
23
dist/squid.js
vendored
23
dist/squid.js
vendored
@ -1,23 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "OceanAgent", {
|
||||
enumerable: true,
|
||||
get: function get() {
|
||||
return _oceanAgent.default;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, "OceanKeeper", {
|
||||
enumerable: true,
|
||||
get: function get() {
|
||||
return _oceanKeeper.default;
|
||||
}
|
||||
});
|
||||
|
||||
var _oceanAgent = _interopRequireDefault(require("./ocean-agent"));
|
||||
|
||||
var _oceanKeeper = _interopRequireDefault(require("./ocean-keeper"));
|
8539
package-lock.json
generated
8539
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -6,7 +6,11 @@
|
||||
"scripts": {
|
||||
"test": "eslint ./src",
|
||||
"start": "babel src --watch --out-dir dist",
|
||||
"build": "babel src --out-dir dist"
|
||||
"build": "babel src --out-dir dist",
|
||||
"release": "./node_modules/release-it/bin/release-it.js --src.tagName='v%s' --github.release --npm.publish --non-interactive",
|
||||
"release-minor": "./node_modules/release-it/bin/release-it.js minor --src.tagName='v%s' --github.release --npm.publish --non-interactive",
|
||||
"release-major": "./node_modules/release-it/bin/release-it.js major --src.tagName='v%s' --github.release --npm.publish --non-interactive",
|
||||
"prepublishOnly": "npm run build"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
Loading…
Reference in New Issue
Block a user