123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- /*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- 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.
- */
-
- const fs = require('fs-extra');
- const path = require('path');
- const util = require('util');
- const events = require('cordova-common').events;
- const CordovaError = require('cordova-common').CordovaError;
-
- PodsJson.FILENAME = 'pods.json';
- PodsJson.LIBRARY = 'libraries';
- PodsJson.SOURCE = 'sources';
- PodsJson.DECLARATION = 'declarations';
-
- function PodsJson (podsJsonPath) {
- this.path = podsJsonPath;
- this.contents = null;
- this.__dirty = false;
-
- const filename = this.path.split(path.sep).pop();
- if (filename !== PodsJson.FILENAME) {
- throw new CordovaError(util.format('PodsJson: The file at %s is not `%s`.', this.path, PodsJson.FILENAME));
- }
-
- if (!fs.existsSync(this.path)) {
- events.emit('verbose', util.format('pods.json: The file at %s does not exist.', this.path));
- events.emit('verbose', 'Creating new pods.json in platforms/ios');
- this.clear();
- this.write();
- } else {
- events.emit('verbose', 'pods.json found in platforms/ios');
- // load contents
- const contents = fs.readFileSync(this.path, 'utf8');
- this.contents = JSON.parse(contents);
- }
- this.__updateFormatIfNecessary();
- }
-
- PodsJson.prototype.__isOldFormat = function () {
- if (this.contents !== null) {
- if (this.contents.declarations === undefined ||
- this.contents.sources === undefined ||
- this.contents.libraries === undefined) {
- return true;
- }
- }
- return false;
- };
-
- PodsJson.prototype.__updateFormatIfNecessary = function () {
- if (this.__isOldFormat()) {
- this.contents = {
- declarations: {},
- sources: {},
- libraries: this.contents
- };
- this.__dirty = true;
- events.emit('verbose', 'Update format of pods.json');
- }
- };
-
- PodsJson.prototype.getLibraries = function () {
- return this.contents[PodsJson.LIBRARY];
- };
-
- PodsJson.prototype.__get = function (kind, name) {
- return this.contents[kind][name];
- };
-
- PodsJson.prototype.getLibrary = function (name) {
- return this.__get(PodsJson.LIBRARY, name);
- };
-
- PodsJson.prototype.getSource = function (name) {
- return this.__get(PodsJson.SOURCE, name);
- };
-
- PodsJson.prototype.getDeclaration = function (name) {
- return this.__get(PodsJson.DECLARATION, name);
- };
-
- PodsJson.prototype.__remove = function (kind, name) {
- if (this.contents[kind][name]) {
- delete this.contents[kind][name];
- this.__dirty = true;
- events.emit('verbose', util.format('Remove from pods.json for `%s` - `%s`', name));
- }
- };
-
- PodsJson.prototype.removeLibrary = function (name) {
- this.__remove(PodsJson.LIBRARY, name);
- };
-
- PodsJson.prototype.removeSource = function (name) {
- this.__remove(PodsJson.SOURCE, name);
- };
-
- PodsJson.prototype.removeDeclaration = function (name) {
- this.__remove(PodsJson.DECLARATION, name);
- };
-
- PodsJson.prototype.clear = function () {
- this.contents = {
- declarations: {},
- sources: {},
- libraries: {}
- };
- this.__dirty = true;
- };
-
- PodsJson.prototype.destroy = function () {
- fs.unlinkSync(this.path);
- events.emit('verbose', util.format('Deleted `%s`', this.path));
- };
-
- PodsJson.prototype.write = function () {
- if (this.contents) {
- fs.writeFileSync(this.path, JSON.stringify(this.contents, null, 4));
- this.__dirty = false;
- events.emit('verbose', 'Wrote to pods.json.');
- }
- };
-
- PodsJson.prototype.__increment = function (kind, name) {
- const val = this.__get(kind, name);
- if (val) {
- val.count++;
- }
- };
-
- PodsJson.prototype.incrementLibrary = function (name) {
- this.__increment(PodsJson.LIBRARY, name);
- };
-
- PodsJson.prototype.incrementSource = function (name) {
- this.__increment(PodsJson.SOURCE, name);
- };
-
- PodsJson.prototype.incrementDeclaration = function (name) {
- this.__increment(PodsJson.DECLARATION, name);
- };
-
- PodsJson.prototype.__decrement = function (kind, name) {
- const val = this.__get(kind, name);
- if (val) {
- val.count--;
- if (val.count <= 0) {
- this.__remove(kind, name);
- }
- }
- };
-
- PodsJson.prototype.decrementLibrary = function (name) {
- this.__decrement(PodsJson.LIBRARY, name);
- };
-
- PodsJson.prototype.decrementSource = function (name) {
- this.__decrement(PodsJson.SOURCE, name);
- };
-
- PodsJson.prototype.decrementDeclaration = function (name) {
- this.__decrement(PodsJson.DECLARATION, name);
- };
-
- PodsJson.prototype.__setJson = function (kind, name, json) {
- this.contents[kind][name] = Object.assign({}, json);
- this.__dirty = true;
- events.emit('verbose', util.format('Set pods.json for `%s` - `%s`', kind, name));
- };
-
- // sample json for library
- // { name: "Eureka", spec: "4.2.0", "swift-version": "4.1", count: 1 }
- PodsJson.prototype.setJsonLibrary = function (name, json) {
- this.__setJson(PodsJson.LIBRARY, name, json);
- };
-
- // sample json for source
- // { source: "https://github.com/brightcove/BrightcoveSpecs.git", count: 1 }
- PodsJson.prototype.setJsonSource = function (name, json) {
- this.__setJson(PodsJson.SOURCE, name, json);
- };
-
- // sample json for declaration
- // { declaration: ""}
- PodsJson.prototype.setJsonDeclaration = function (name, json) {
- this.__setJson(PodsJson.DECLARATION, name, json);
- };
-
- PodsJson.prototype.isDirty = function () {
- return this.__dirty;
- };
-
- module.exports.PodsJson = PodsJson;
|