skypager-project
Version:
skypager project framework
1,702 lines (1,393 loc) • 271 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmory imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmory exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 148);
/******/ })
/************************************************************************/
/******/ ({
/***/ "../../node_modules/find-up/index.js":
/***/ function(module, exports, __webpack_require__) {
"use strict";
'use strict';
var path = __webpack_require__(12);
var pathExists = __webpack_require__("../../node_modules/path-exists/index.js");
var Promise = __webpack_require__(95);
function splitPath(x) {
return path.resolve(x || '').split(path.sep);
}
function join(parts, filename) {
return path.resolve(parts.join(path.sep) + path.sep, filename);
}
module.exports = function (filename, opts) {
opts = opts || {};
var parts = splitPath(opts.cwd);
return new Promise(function (resolve) {
(function find() {
var fp = join(parts, filename);
pathExists(fp).then(function (exists) {
if (exists) {
resolve(fp);
} else if (parts.pop()) {
find();
} else {
resolve(null);
}
});
})();
});
};
module.exports.sync = function (filename, opts) {
opts = opts || {};
var parts = splitPath(opts.cwd);
var len = parts.length;
while (len--) {
var fp = join(parts, filename);
if (pathExists.sync(fp)) {
return fp;
}
parts.pop();
}
return null;
};
/***/ },
/***/ "../../node_modules/path-exists/index.js":
/***/ function(module, exports, __webpack_require__) {
"use strict";
'use strict';
var fs = __webpack_require__(64);
var Promise = __webpack_require__(95);
module.exports = function (fp) {
var fn = typeof fs.access === 'function' ? fs.access : fs.stat;
return new Promise(function (resolve) {
fn(fp, function (err) {
resolve(!err);
});
});
};
module.exports.sync = function (fp) {
var fn = typeof fs.accessSync === 'function' ? fs.accessSync : fs.statSync;
try {
fn(fp);
return true;
} catch (err) {
return false;
}
};
/***/ },
/***/ "../skypager/node_modules/webpack/buildin/module.js":
/***/ function(module, exports) {
module.exports = function(module) {
if(!module.webpackPolyfill) {
module.deprecate = function() {};
module.paths = [];
// module.parent = undefined by default
if(!module.children) module.children = [];
Object.defineProperty(module, "loaded", {
enumerable: true,
configurable: false,
get: function() { return module.l; }
});
Object.defineProperty(module, "id", {
enumerable: true,
configurable: false,
get: function() { return module.i; }
});
module.webpackPolyfill = 1;
}
return module;
}
/***/ },
/***/ "./src/cache.js":
/***/ function(module, exports, __webpack_require__) {
"use strict";
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Cache = undefined;
var _defineProperty = __webpack_require__(22);
var _defineProperty2 = _interopRequireDefault(_defineProperty);
var _map = __webpack_require__(67);
var _map2 = _interopRequireDefault(_map);
var _classCallCheck2 = __webpack_require__(2);
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = __webpack_require__(3);
var _createClass3 = _interopRequireDefault(_createClass2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Cache = exports.Cache = function () {
function Cache(init) {
var _this = this;
(0, _classCallCheck3.default)(this, Cache);
hide(this, 'hide', function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return hide.apply(undefined, [_this].concat(args));
});
this.clear(init);
this.write = function (k, v) {
return _this.set(k, v).get(k);
};
}
(0, _createClass3.default)(Cache, [{
key: 'fetch',
value: function fetch(k, defaultValue) {
if (this.has(k)) {
return this.get(k);
} else {
this.set(k, typeof defaultValue === 'function' ? defaultValue(k) : defaultValue);
return this.get(k);
}
}
}, {
key: 'clear',
value: function clear(init) {
delete this._wm;
this._wm = new _map2.default(init);
}
}, {
key: 'delete',
value: function _delete(k) {
return this._wm.delete(k);
}
}, {
key: 'get',
value: function get(k) {
return this._wm.get(k);
}
}, {
key: 'has',
value: function has(k) {
return this._wm.has(k);
}
}, {
key: 'set',
value: function set(k, v) {
this._wm.set(k, v);
return this;
}
}]);
return Cache;
}();
exports.default = Cache;
function hide(target, propName, value) {
var configurable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
(0, _defineProperty2.default)(target, propName, {
enumerable: false,
configurable: configurable,
value: value
});
return target;
}
/***/ },
/***/ "./src/collection/index.js":
/***/ function(module, exports, __webpack_require__) {
"use strict";
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PatternMapping = exports.Collection = undefined;
var _typeof2 = __webpack_require__(23);
var _typeof3 = _interopRequireDefault(_typeof2);
var _promise = __webpack_require__(6);
var _promise2 = _interopRequireDefault(_promise);
var _toConsumableArray2 = __webpack_require__(5);
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _defineProperty2 = __webpack_require__(29);
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends2 = __webpack_require__(0);
var _extends3 = _interopRequireDefault(_extends2);
var _classCallCheck2 = __webpack_require__(2);
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = __webpack_require__(3);
var _createClass3 = _interopRequireDefault(_createClass2);
var _values = __webpack_require__(30);
var _values2 = _interopRequireDefault(_values);
exports.create = create;
var _lodash = __webpack_require__(35);
var _lodash2 = _interopRequireDefault(_lodash);
var _path = __webpack_require__(12);
var _properties = __webpack_require__(11);
var _query = __webpack_require__(66);
var _query2 = _interopRequireDefault(_query);
var _router = __webpack_require__(76);
var _router2 = _interopRequireDefault(_router);
var _document = __webpack_require__("./src/document/index.js");
var _document2 = _interopRequireDefault(_document);
var _nodeVinyl = __webpack_require__("./src/importers/node-vinyl.js");
var _vinyl = __webpack_require__(79);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var compact = _lodash2.default.compact,
set = _lodash2.default.set,
groupBy = _lodash2.default.groupBy,
snakeCase = _lodash2.default.snakeCase,
uniq = _lodash2.default.uniq,
chain = _lodash2.default.chain,
mapValues = _lodash2.default.mapValues;
var values = _values2.default;
var Collection = exports.Collection = function () {
(0, _createClass3.default)(Collection, null, [{
key: 'mount',
value: function mount(cwd) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return create((0, _extends3.default)({
cwd: cwd }, options)).imported.withDocuments;
}
/**
* Create a collection which wraps a directory and creates a queryable index
* of all of the files inside of it. Files exist as VFile (@see https://github.com/wooorm/vfile) and are
* wrapped by Document classes which provide the interface for metadata, transformations, and things of that nature.
* A collection also provides a lodash wrapper interface for building extraction functions from the collections
* files and data.
*
* @param {Object} options - the options hash
* @param {String} options.type - the type of document - will determine which document model wrapper is used
* @param {String} options.cwd - the root of the collection, defaults to process.cwd()
* @param {String} options.cwd - the cwd, if different from the base
* @param {Array} options.include - an array of glob patterns to include
* @param {Array} options.exclude - an array of glob patterns to exclude
* @param {Object} options.documentOptions - an object that will be passed to the document wrapper when created
* @param {Object} options.importerOptions - an object that will be passed to the document importer when created
*/
}]);
function Collection() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
(0, _classCallCheck3.default)(this, Collection);
(0, _properties.mixinPropertyUtils)(this);
this.hide('cwd', options.cwd || options.root || options.base || options.basePath);
this.hide('options', normalize(options));
this.pathId = this.cwd.split('/').reverse().slice(0, 2).join('-');
this.instanceId = this.pathId + '-' + Math.floor(Date.now() / 1000);
this.hideGetter('collection', options.collection);
this.hide('filesIndex', {});
this.hide('documentsIndex', {});
this.hide('project', options.project);
}
(0, _createClass3.default)(Collection, [{
key: 'shouldRejectFile',
value: function shouldRejectFile(file) {
if (typeof this.options.rejectFile === 'function') {
return this.options.rejectFile.call(this, file);
}
if (file.path.indexOf('/ios/') >= 0) {
return true;
}
if (file.path.indexOf('/android/') >= 0) {
return true;
}
return !file.path.startsWith(this.cwd);
}
}, {
key: 'createDocuments',
value: function createDocuments() {
var _this = this;
var documentOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var Document = this.Document;
_lodash2.default.mapValues(this.filesIndex, function (file, path) {
path = (0, _path.relative)(_this.cwd, path);
_this.documentsIndex[path] = _this.documentsIndex[path] || new Document(file, (0, _extends3.default)({}, _this.documentOptions, documentOptions, {
project: _this.project,
collection: _this
}));
});
return this;
}
}, {
key: 'isDirectory',
value: function isDirectory(file) {
var path = file.path ? file.path : file;
return typeof file.isDirectory === 'function' ? file.isDirectory() : !path.match(/\.\w+$/);
}
}, {
key: 'add',
value: function add(file) {
if (file.path && !this.isDirectory(file)) {
_lodash2.default.assign(this.filesIndex, (0, _defineProperty3.default)({}, (0, _path.relative)(this.cwd, file.path), file));
}
}
}, {
key: 'prepareImportedFilesForIndexing',
value: function prepareImportedFilesForIndexing() {
var _this2 = this;
var files = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var cwd = this.cwd;
return _lodash2.default.chain(files).reject(function (f) {
return _this2.isDirectory(f);
}).reject(function (f) {
return _this2.shouldRejectFile(f);
}).compact().sortBy(function (f) {
return f.path.length;
}).keyBy(function (f) {
return (0, _path.relative)(cwd, f.path);
}).value();
}
}, {
key: 'indexFiles',
value: function indexFiles() {
var _this3 = this;
var files = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
files.forEach(function (file) {
return _this3.loadFile(file);
});
return this;
}
}, {
key: 'loadFile',
value: function loadFile() {
var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var cwd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.cwd;
_lodash2.default.assign(this.filesIndex, (0, _defineProperty3.default)({}, this.resolve(cwd, file.path), this.prepareFileObject(file, cwd)));
return this;
}
}, {
key: 'prepareFileObject',
value: function prepareFileObject(file) {
var cwd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.cwd;
return this.options.prepareFile ? this.options.prepareFile.call(this, file) : ensureVFile(file, cwd);
}
}, {
key: 'loadFiles',
value: function loadFiles() {
var _this4 = this;
var files = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
_lodash2.default.compact(files).filter(function (f) {
return !_this4.isDirectory(f);
}).forEach(function (f) {
return _this4.loadFile(f);
});
return this;
}
}, {
key: 'loadFilesFromImporter',
value: function loadFilesFromImporter() {
var _this5 = this;
return this.importer.fileWrappers.then(files = this.prepareImportedFilesForIndexing(files)).then(function (files) {
return _this5.indexFiles(files.map(function (file) {
return file.toVFile ? file.toVFile() : file;
}));
}).then(function (collection) {
return collection.withDocuments;
}).catch(function (error) {
return error;
});
}
}, {
key: 'createRouter',
value: function createRouter(name) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (options.getter) {
options.pathsGetter = options.getter;
}
if (options.property) {
options.pathProperty = options.property;
}
(0, _router2.default)(this._routers, (0, _extends3.default)({
routerProperty: name,
pathsGetter: name,
pathProperty: 'id'
}, options, {
host: this,
matchesOnly: true
}));
}
}, {
key: 'createDelegators',
value: function createDelegators(receiver) {
var _this6 = this;
for (var _len = arguments.length, propNames = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
propNames[_key - 1] = arguments[_key];
}
propNames.forEach(function (propName) {
receiver.hideGetter(propName, function () {
return _this6[propName];
});
});
}
}, {
key: 'getFileByRelativePath',
value: function getFileByRelativePath(relativeFilePath) {
var index = this.filesIndex[relativeFilePath].index;
return this.files[index];
}
}, {
key: 'join',
value: function join() {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
return _path.join.apply(undefined, [this.cwd].concat(args));
}
}, {
key: 'relative',
value: function relative() {
for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
return _path.relative.apply(undefined, [this.cwd].concat(args));
}
}, {
key: 'resolve',
value: function resolve() {
for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
return _path.resolve.apply(undefined, [this.cwd].concat(args));
}
}, {
key: 'select',
value: function select() {
return this.selectChain.apply(this, arguments).value();
}
}, {
key: 'selectChain',
value: function selectChain() {
var _chain;
for (var _len5 = arguments.length, paths = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
paths[_key5] = arguments[_key5];
}
var set = function set(obj, path, val) {
_lodash2.default.set(obj, path, val);
return obj;
};
return (_chain = this.chain).at.apply(_chain, (0, _toConsumableArray3.default)(_lodash2.default.sortBy(paths, function (p) {
return p.length;
}))).map(function (value, index) {
return [paths[index], value];
}).reduce(function (memo, pair) {
return set.apply(undefined, [memo].concat((0, _toConsumableArray3.default)(pair)));
}, {});
}
}, {
key: 'selectByObject',
value: function selectByObject(pathObject) {
var _chain2;
var keys = keys(pathObject);
var paths = values(pathObject);
return (_chain2 = this.chain).at.apply(_chain2, (0, _toConsumableArray3.default)(paths)).reduce(function (memo, val, index) {
return set(memo, keys[index], val);
}, {}).value();
}
}, {
key: 'findDocumentById',
value: function findDocumentById(documentId) {
return this.documents.find(function (doc) {
return doc.id === documentId;
});
}
}, {
key: 'applyFilesRoute',
value: function applyFilesRoute(pattern) {
var path = route()(pattern);
var results = this.files.map(function (f) {
return { path: f.relative, pathData: path(f.relative) };
}).filter(function (f) {
return f.pathData;
});
return {
results: results,
pattern: pattern
};
}
}, {
key: 'gitInfo',
get: function get() {
try {
return __webpack_require__("./src/git/index.js")(this.cwd);
} catch (error) {
return {};
}
}
}, {
key: 'importer',
get: function get() {
return new this.Importer(this.cwd, (0, _extends3.default)({}, this.importerOptions, { patterns: this.patterns
}));
}
}, {
key: 'type',
get: function get() {
return snakeCase(this.options.type || 'Project').replace(/s$/i, '');
}
}, {
key: 'files',
get: function get() {
return _lodash2.default.chain(this.filesIndex).values().compact().sortBy(function (d) {
return d.path;
}).value();
}
}, {
key: 'documents',
get: function get() {
return _lodash2.default.chain(this.documentsIndex).values().compact().sortBy(function (d) {
return d.file.path;
}).value();
}
}, {
key: 'documentClass',
get: function get() {
return this.options.documentClass || _document2.default;
}
}, {
key: 'importerOptions',
get: function get() {
var c = this;
return (0, _extends3.default)({}, c.options.importerOptions, {
patterns: _lodash2.default.uniq([].concat((0, _toConsumableArray3.default)(c.patterns || []), (0, _toConsumableArray3.default)(c.options.importerOptions.patterns || [])))
});
}
}, {
key: 'documentOptions',
get: function get() {
var collection = this;
return (0, _extends3.default)({
collectionType: collection.type
}, collection.options.documentOptions || {}, {
cwd: collection.cwd
});
}
}, {
key: 'Document',
get: function get() {
return this.documentClass;
}
}, {
key: 'withDocuments',
get: function get() {
this.createDocuments();
return this;
}
}, {
key: 'loaderPrefix',
get: function get() {
return this.get('options.loaderPrefix', '');
}
}, {
key: 'documentEntryPoints',
get: function get() {
var _this7 = this;
return this.chain.get('documents').keyBy('id').mapValues(function (doc) {
return ['' + _this7.loaderPrefix + doc.file.path];
}).mapValues(function (array) {
return compact(array);
}).value();
}
}, {
key: 'documentsMappedById',
get: function get() {
return this.chain.get('documents').keyBy('id').value();
}
}, {
key: 'documentsMap',
get: function get() {
return this.documentsIndex;
}
}, {
key: 'Importer',
get: function get() {
return this.options.importer ? __webpack_require__(70)("./" + this.options.importer + '.js') : __webpack_require__("./src/importers/node-vinyl.js").DocumentImporter;
}
}, {
key: 'patterns',
get: function get() {
return _lodash2.default.uniq(this.includePatterns.concat(this.excludePatterns));
}
}, {
key: 'includePatterns',
get: function get() {
return _lodash2.default.uniq(this.options.include.concat(this.typePatterns));
}
}, {
key: 'typePatterns',
get: function get() {
switch (this.type.toUpperCase()) {
case PACKAGE:
return PatternMapping.Package;
break;
case SCRIPT:
return PatternMapping.Script;
break;
case (SETTINGS_FILE, COPY_FILE):
return PatternMapping.SettingsFile;
break;
case DOCUMENT:
return PatternMapping.Document;
break;
case STYLESHEET:
return PatternMapping.Stylesheet;
break;
case VECTOR:
return PatternMapping.Vector;
break;
case PROJECT:
default:
return PatternMapping.Project;
}
}
}, {
key: 'router',
get: function get() {
return this.routers.documents;
}
}, {
key: 'routers',
get: function get() {
if (!this._routers) {
this.hide('_routers', {});
this.createRouter('files', {
pathProperty: 'relative'
});
this.createRouter('documents', {
pathProperty: 'baseRelativePath',
pathsGetter: 'documents'
});
this.createRouter('folders', {
pathProperty: 'toString',
pathsGetter: 'subFolderNames'
});
}
return mapValues(this._routers, function (router) {
return router.get.bind(router);
});
}
}, {
key: 'chain',
get: function get() {
return chain(this);
}
}, {
key: 'relativeObjectPaths',
get: function get() {
var _this8 = this;
return this.chain.get('files').sortBy(function (f) {
return f.dirname.length;
}).map(function (f) {
return [_this8.relative(f.dirname).replace(/\//g, '.'), f.basename, f.relative];
}).groupBy(function (i) {
return i.shift();
}).value();
}
}, {
key: 'subFolderObjectPaths',
get: function get() {
return this.chain.get('subFolderNames').sortBy(function (v) {
return v.length;
}).map(function (p) {
return p.replace(/\//g, '.');
}).value();
}
}, {
key: 'excludePatterns',
get: function get() {
if (this.options.includeAll || this.options.exclude === false) {
return [];
}
return this.options.exclude
// HACK tmp
.concat(this.project ? this.project.skypagerIgnoreContents || [] : []).map(function (p) {
return p.startsWith('!') ? p : '!' + p;
}).concat(['!**/node_modules/**', '*.xcodeproj', '!_*']);
}
}, {
key: 'imported',
get: function get() {
if (this.files.length === 0) {
this.indexFiles(this.importer.readFilesSync(false));
}
return this;
}
}, {
key: 'rootFiles',
get: function get() {
return this.chains.files.filter(function (f) {
return f.dirname === project.root;
}).value();
}
}, {
key: 'groupedByChildFolder',
get: function get() {
var _this9 = this;
return this.chains.files.groupBy(function (f) {
return _this9.relative(f.dirname).split('/').shift();
}).pickBy(function (v, k) {
return k.length > 0;
}).value();
}
}, {
key: 'groupedByChildFolderAndExtension',
get: function get() {
var _this10 = this;
return this.chains.files.groupBy(function (f) {
return _this10.relative(f.dirname).split('/').shift();
}).mapValues(function (v) {
return groupBy(v, function (v) {
return v.extname;
});
}).pickBy(function (v, k) {
return k.length > 0;
}).value();
}
}, {
key: 'chains',
get: function get() {
return {
documents: chain(this.documents),
files: chain(this.files)
};
}
}, {
key: 'query',
get: function get() {
var collection = this;
return {
get files() {
return _query2.default.bind(_query2.default, collection.files);
},
get documents() {
return _query2.default.bind(_query2.default, collection.documents);
}
};
}
}, {
key: 'depths',
get: function get() {
var _this11 = this;
return this.chains.files.map(function (f) {
return _this11.relative(f.dirname);
}).uniq().groupBy(function (f) {
return f.split(_path.sep).length - 1;
}).omit('').value();
}
}, {
key: 'relativeFilePaths',
get: function get() {
var _this12 = this;
return this.files.map(function (file) {
return (0, _path.relative)(_this12.cwd, file.path);
});
}
}, {
key: 'relativeSubFolderPaths',
get: function get() {
var _this13 = this;
return this.files.map(function (file) {
return (0, _path.relative)(_this13.cwd, file.dirname);
});
}
}, {
key: 'subFolderPaths',
get: function get() {
return uniq(this.files.map(function (f) {
return f.dirname;
}));
}
}, {
key: 'subFolderNames',
get: function get() {
var _this14 = this;
return this.subFolderPaths.map(function (f) {
return (0, _path.relative)(_this14.cwd, f);
}).filter(function (f) {
return f.length > 0;
});
}
}, {
key: 'subFolderBasenames',
get: function get() {
var _this15 = this;
return this.subFolderPaths.map(function (f) {
return (0, _path.relative)(_this15.cwd, f);
}).map(function (f) {
return (0, _path.basename)(f);
});
}
}, {
key: 'childFolderNames',
get: function get() {
return uniq(this.subFolderNames.map(function (p) {
return p.split('/').shift();
}));
}
}, {
key: 'childFolderPaths',
get: function get() {
var _this16 = this;
return uniq(this.childFolderNames.map(function (p) {
return _this16.join(p);
}));
}
}, {
key: 'ready',
get: function get() {
var _this17 = this;
return this.importer.status === 'LOADED' ? _promise2.default.resolve(this) : this.loadFilesFromImporter().then(function () {
return _this17;
});
}
}], [{
key: 'create',
value: function create() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var ready = arguments[1];
var collection = new Collection(options);
return typeof ready === 'function' ? ready(collection, Collection) : collection;
}
}, {
key: 'Document',
get: function get() {
return _document2.default;
}
}]);
return Collection;
}();
exports.default = Collection;
var PACKAGE = 'PACKAGE';
var SCRIPT = 'SCRIPT';
var DOCUMENT = 'DOCUMENT';
var SETTINGS_FILE = 'SETTINGS_FILE';
var COPY_FILE = 'COPY_FILE';
var PROJECT = 'PROJECT';
var VECTOR = 'VECTOR';
var STYLESHEET = 'STYLESHEET';
var PatternMapping = exports.PatternMapping = {
'Package': ['**/package.json'],
'Document': ['**/*.md'],
'Script': ['**/*.js', '**/*.jsx'],
'Stylesheet': ['**/*.{css,less,sass,scss,styl'],
'SettingsFile': ['**/*.yml'],
'CopyFile': ['**/*.yml'],
'Vector': ['**/*.svg'],
'DataSource': ['**/*.json', '**/*.yml', '**/*.data.js'],
'Project': ['**/*']
};
function create() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return Collection.create(options);
}
function normalize() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return (0, _extends3.default)({}, options, {
importerOptions: options.importerOptions || {},
documentOptions: options.documentOptions || {},
include: [].concat((0, _toConsumableArray3.default)(options.include || []), (0, _toConsumableArray3.default)(options.patterns || [])),
exclude: [].concat((0, _toConsumableArray3.default)(options.exclude || []), (0, _toConsumableArray3.default)(options.ignore || []))
});
}
function ensureVFile() {
var object = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var cwd = arguments[1];
if (cwd) {
object.cwd = cwd;
}
if (typeof object.toVFile === 'function') {
return object.toVFile();
} else if ((0, _vinyl.isVinyl)(object)) {
return (0, _nodeVinyl.toVFile)(object);
} else if ((typeof object === 'undefined' ? 'undefined' : (0, _typeof3.default)(object)) === 'object' && object.contents && object.path) {
return (0, _nodeVinyl.toVFile)({
contents: new Buffer(object.contents.toString()),
path: object.path,
cwd: object.cwd
});
} else {
return (0, _nodeVinyl.toVFile)(object);
}
}
/***/ },
/***/ "./src/document-types/asset.js":
/***/ function(module, exports, __webpack_require__) {
"use strict";
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.testDocument = exports.rules = undefined;
var _pathMatcher = __webpack_require__(7);
var _pathMatcher2 = _interopRequireDefault(_pathMatcher);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var rules = exports.rules = [/\.(png|jpg|gif)$/i];
var testDocument = exports.testDocument = function testDocument(doc) {
return typeof rules.find(function (rule) {
return (0, _pathMatcher2.default)(rule, doc.fileBaseName);
}) !== 'undefined';
};
/***/ },
/***/ "./src/document-types/babel-es6.js":
/***/ function(module, exports, __webpack_require__) {
"use strict";
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.decorate = exports.transpile = exports.toAST = exports.compile = exports.testDocument = exports.rules = exports.docblockParser = undefined;
var _assign = __webpack_require__(1);
var _assign2 = _interopRequireDefault(_assign);
var _pathMatcher = __webpack_require__(7);
var _pathMatcher2 = _interopRequireDefault(_pathMatcher);
var _pick = __webpack_require__(33);
var _pick2 = _interopRequireDefault(_pick);
var _omit = __webpack_require__(17);
var _omit2 = _interopRequireDefault(_omit);
var _mapValues = __webpack_require__(21);
var _mapValues2 = _interopRequireDefault(_mapValues);
var _omitBy = __webpack_require__(68);
var _omitBy2 = _interopRequireDefault(_omitBy);
var _isEmpty = __webpack_require__(32);
var _isEmpty2 = _interopRequireDefault(_isEmpty);
var _docblockParser = __webpack_require__(19);
var _docblockParser2 = _interopRequireDefault(_docblockParser);
var _entity = __webpack_require__(34);
var _entity2 = _interopRequireDefault(_entity);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var docblockParser = exports.docblockParser = (0, _docblockParser2.default)({
tags: {
name: _docblockParser2.default.singleParameterTag
}
});
var rules = exports.rules = [/\.(js|es6|jsx)$/];
var testDocument = exports.testDocument = function testDocument(doc) {
return typeof rules.find(function (rule) {
return (0, _pathMatcher2.default)(rule, doc.fileBaseName);
}) !== 'undefined';
};
var compile = exports.compile = function compile(code, options) {
return transpile(code, options).code;
};
var toAST = exports.toAST = function toAST(code, options) {
return __webpack_require__(27).transform(code, babelOptions(options)).ast;
};
var transpile = exports.transpile = function transpile() {
var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return __webpack_require__(27).transform(code, babelOptions(options));
};
var decorate = exports.decorate = function decorate(doc) {
(0, _assign2.default)(doc, {
toEntity: function toEntity() {
var exportables = doc.exportables;
var frontmatter = exportables.frontmatter;
return (0, _assign2.default)({ id: doc.id }, frontmatter, {
imports: exportables.imports,
exports: exportables.exports
});
},
/**
multilineTilTag
multilineTilEmptyLineOrTag
booleanTag
singleParameterTag
multiParameterTag(delimiter)
*/
docblockParser: function docblockParser() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var parser = (0, _docblockParser2.default)({
tags: (0, _assign2.default)({
name: _docblockParser2.default.singleParameterTag
}, options)
});
return parser.parse;
},
createExportable: function createExportable() {
var exportable = (0, _entity2.default)({
id: doc.id,
file: (0, _omit2.default)(doc.file, 'contents')
});
exportable.lazy('babel', function () {
return doc.transformBabel();
});
exportable.lazy('ast', function () {
return exportable.babel.ast;
});
exportable.lazy('code', function () {
return exportable.babel.code;
});
exportable.lazy('meta', function () {
return exportable.babel.metadata;
});
exportable.lazy('commentNodes', function () {
return exportable.get('ast.comments', []);
});
exportable.lazy('imports', function () {
return exportable.get('babel.metadata.modules.imports', []).map(function (m) {
return m.source;
});
}, true);
exportable.lazy('exports', function () {
return exportable.get('babel.metadata.modules.exports.exported', []);
}, true);
exportable.getter('contents', function () {
return doc.readFile().getFileContents();
});
exportable.lazy('frontmatter', function () {
try {
var result = docblockParser.parse(exportable.get('ast.comments[0].value', "/**\n**/"));
var _result$tags = result.tags,
tags = _result$tags === undefined ? {} : _result$tags,
_result$text = result.text,
text = _result$text === undefined ? '' : _result$text;
var values = (0, _mapValues2.default)((0, _assign2.default)({ text: text, id: doc.id }, tags), function (v) {
return typeof v === 'string' ? v.trim() : v;
});
return (0, _omitBy2.default)(values, function (v) {
return (0, _isEmpty2.default)(v);
});
} catch (error) {
return {};
}
}, true);
return exportable;
},
readFrontmatter: function readFrontmatter() {
return doc.exportables.frontmatter;
},
transformBabel: function transformBabel(options) {
options = options || doc.project.babelRc || { presets: ['skypager'] };
var code = options.code || doc.file.contents.toString();
return __webpack_require__(27).transform(code, babelOptions(options));
}
});
doc.lazy('exportables', function () {
return doc.createExportable();
});
return doc;
};
exports.default = decorate;
var babelOptions = function babelOptions(options) {
return (0, _pick2.default)(options, "filename", "filenameRelative", "presets", "plugins", "parserOpts", "generatorOpts", "highlightCode", "only", "ignore", "auxiliaryCommentBefore", "auxiliaryCommentAfter", "sourceMaps", "inputSourceMap", "sourceMapTarget", "sourceFileName", "sourceRoot", "moduleRoot", "moduleIds", "moduleId", "getModuleId", "resolveModuleSource", "code", "no-babelrc", "ast", "compact", "minified", "comments", "shouldPrintComment", "env", "retainLines", "extends");
};
/***/ },
/***/ "./src/document-types/datafile.js":
/***/ function(module, exports, __webpack_require__) {
"use strict";
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.decorate = exports.testDocument = undefined;
var _assign = __webpack_require__(1);
var _assign2 = _interopRequireDefault(_assign);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var testDocument = exports.testDocument = function testDocument(doc) {
return doc.fileExtname.match(/(json|yml)$/i);
};
var decorate = exports.decorate = function decorate(doc) {
return (0, _assign2.default)(doc, {
readDataSync: function readDataSync() {
if (doc.fileExtname === '.json') {
return (0, _assign2.default)({ id: doc.id }, doc.project.readJsonSync(doc.path));
} else if (doc.fileExtname === '.yml') {
return __webpack_require__(47).safeLoad(doc.readFile().getFileContents());
}
}
});
};
/***/ },
/***/ "./src/document-types/markdown.js":
/***/ function(module, exports, __webpack_require__) {
"use strict";
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.decorate = exports.testDocument = exports.toAST = exports.compile = exports.getUtils = exports.getTransforms = exports.transformPresets = exports.rules = undefined;
var _typeof2 = __webpack_require__(23);
var _typeof3 = _interopRequireDefault(_typeof2);
var _toConsumableArray2 = __webpack_require__(5);
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _extends2 = __webpack_require__(0);
var _extends3 = _interopRequireDefault(_extends2);
var _promise = __webpack_require__(6);
var _promise2 = _interopRequireDefault(_promise);
var _defineEnumerableProperties2 = __webpack_require__(72);
var _defineEnumerableProperties3 = _interopRequireDefault(_defineEnumerableProperties2);
var _assign = __webpack_require__(1);
var _assign2 = _interopRequireDefault(_assign);
var _keys = __webpack_require__(13);
var _keys2 = _interopRequireDefault(_keys);
var _jsYaml = __webpack_require__(47);
var _jsYaml2 = _interopRequireDefault(_jsYaml);
var _markdown2 = __webpack_require__("./src/transformers/markdown.js");
var _markdown3 = _interopRequireDefault(_markdown2);
var _pathMatcher = __webpack_require__(7);
var _pathMatcher2 = _interopRequireDefault(_pathMatcher);
var _string = __webpack_require__(15);
var _omit = __webpack_require__(17);
var _omit2 = _interopRequireDefault(_omit);
var _babelEs = __webpack_require__("./src/document-types/babel-es6.js");
var _lodash = __webpack_require__(35);
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var rules = exports.rules = [/\.md$/];
var transformPresets = exports.transformPresets = function transformPresets() {
return {
markdown: (0, _keys2.default)(_markdown2.profiles)
};
};
var getTransforms = exports.getTransforms = function getTransforms() {
return {
markdown: __webpack_require__("./src/transformers/markdown.js").default
};
};
var getUtils = exports.getUtils = function getUtils() {
var loaders = (0, _markdown2.utilLoaders)();
return (0, _keys2.default)(loaders).reduce(function (memo, key) {
var _Object$assign2, _mutatorMap;
return (0, _assign2.default)(memo, (_Object$assign2 = {}, _mutatorMap = {}, _mutatorMap[key] = _mutatorMap[key] || {}, _mutatorMap[key].get = function () {
return loaders[key]();
}, (0, _defineEnumerableProperties3.default)(_Object$assign2, _mutatorMap), _Object$assign2));
}, {});
};
var compile = exports.compile = function compile(contents) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var profile = options.profile || 'standard';
var html = 'html';
try {
var ast = toAST(contents, {
profile: profile
});
return (0, _markdown3.default)({ profile: 'html' }).stringify(ast);
} catch (error) {
var stack = ["```", error.stack, "```"].join("\n");
return (0, _markdown3.default)({ profile: 'html' }).stringify(toAST('# Error\n\n' + error.message + '\n\n' + stack + '\n'));
}
};
var toAST = exports.toAST = function toAST(contents, options) {
var profile = options.profile || 'standard';
try {
return (0, _markdown3.default)(profile, options).parse(contents);
} catch (error) {
return (0, _markdown3.default)(profile, options).parse('# Error\n\n' + error.message + '\n\n' + createBlock(error.stack) + '\n## Contents\n' + createBlock(contents));
}
};
var testDocument = exports.testDocument = function testDocument(doc) {
return typeof rules.find(function (rule) {
return (0, _pathMatcher2.default)(rule, doc.fileBaseName);
}) !== 'undefined';
};
var decorate = exports.decorate = function decorate(doc) {
doc.lazy('exportables', function () {
return doc.createExportable();
});
doc.lazy('exports', function () {
return doc.createExportable();
});
(0, _assign2.default)(doc, {
stringify: function stringify() {
return this.markdown('stringify', {}).stringify(doc.ast);
},
toCode: function toCode() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var codeBlocks = doc.compileCodeBlocks({ keyBy: 'accessor' });
return codeBlocks.mapValues(function (block, id) {
return ('\n // ' + block.docPath + ' at ' + block.index + '\n ' + block.value + '\n ').trim();
}).values().join("\n\n");
},
toModule: function toModule() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return doc.project.createModule(doc.toCode(), options);
},
toEntity: function toEntity() {
var selectorMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var obj = doc.exportables;
var frontmatter = obj.frontmatter;
var instance = (0, _assign2.default)({}, obj, frontmatter);
if (_lodash2.default.isEmpty(selectorMap)) {
(0, _assign2.default)(instance, doc.se);
}
},
transformWith: function transformWith(transformerFn) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var doc = this;
transformerFn.call(doc, doc, options);
return doc;
},
createExportable: function createExportable() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var html = doc.markdown('html', options);
var source = typeof options.transform === 'function' ? doc.transformWith(options.transform, options) || doc : doc;
var contents = source.contents || source.result('file.contents', function () {
return doc.readFile().get('file.contents', '');
});
var exportable = (0, _assign2.default)({}, doc.frontmatter, {
id: source.id,
get contents() {
return contents;
},
get frontmatter() {
return doc.frontmatter;
},
get ast() {
return source.ast;
},
get file() {
return (0, _omit2.default)(doc.file, 'contents');
},
get html() {
return doc.remarkHTML({
ast: source.renderAST || source.ast
});
}
});
return exportable;
},
compileCodeBlocks: function compileCodeBlocks() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var babelRc = doc.result('project.babelRc', { presets: ['skypager'], plugins: ['transform-decorators-legacy'] });
return doc.selectChain('code-blocks', options).mapValues(function (nodes) {
return nodes.map(function (node) {
var result = void 0;
try {
result = (0, _babelEs.transpile)(node.value, babelRc);
} catch (error) {
result = { error: error, code: '', metadata: {} };
}
(0, _assign2.default)(node, {
run: function run() {
if (result.error) {
return _promise2.default.resolve((0, _assign2.default)(node, { error: error }));
}
return doc.asyncRunner(result.code)().then(function (result) {
return (0, _assign2.default)(node, {
get result() {
return typeof result.value === 'function' ? result.value() : result;
},
inspectResult: function inspectResult() {
return __webpack_require__(78).inspect(node.result);
}
});
}).catch(function (error) {
return (0, _assign2.default)(node, { error: error });
});
},
get compiled() {
return result.code;
},
get metadata() {
return result.metadata;
}
});
return node;
});
});
},
updateFrontmatter: function updateFrontmatter() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var save = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var ast = doc.ast;
var frontmatter = doc.frontmatter;
if (!this.hasFrontmatter()) {
this.ast.children.unshift({});
}
frontmatter = (0, _assign2.default)(frontmatter, { updatedAt: Math.floor(new Date() / 1000) }, data);
var _doc$markdown$parse = doc.markdown().parse('---\n' + _jsYaml2.default.safeDump(frontmatter) + '\n---\n'),
children = _doc$markdown$parse.children;
this.ast.children[0] = children[0];
if (save) {
var contents = doc.contents = doc.file.contents = doc.stringify();
doc.project.writeFileSync(doc.path, contents);
}
return this;
},
hasFrontmatter: function hasFrontmatter() {
var zero = this.firstNode();
return zero && zero.type === 'yaml';
},
remarkAST: function remarkAST() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var profile = options.profile || 'standard';
var contents = options.contents || this.contents || this.getFileContents();
try {
var result = doc.markdown(profile, options).parse(contents);
return (0, _assign2.default)(result, {
children: result.children.map(function (node) {
return doc.decorateNode(node);
})
});
} catch (error) {
return doc.markdown(profile, options).parse('# Error\n\n' + error.message + '\n\n' + createBlock(error.stack) + '\n## Contents\n' + createBlock(contents));
}
},
remarkHTML: function remarkHTML() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var profile = options.profile || 'standard';
var parser = options.parser || doc.markdown(profile, options);
var contents = !options.ast && (options.contents || this.contents || this.getFileContents());
var ast = options.ast || parser.parse(contents);
var html = 'html';
try {
return doc.markdown(html, options).stringify(ast);
} catch (error) {
var stack = ["```", error.stack, "```"].join("\n");
return doc.markdown(html, {}).stringify(doc.markdown(profile, {}).parse('# Error\n\n' + error.message + '\n\n' + stack + '\n'));
}
},
markdown: function markdown() {
var profile = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'parser';
var options = arguments[1];
return (0, _markdown3.default)((0, _extends3.default)({ profile: profile }, options));
},
createTree: function createTree() {
var headings = this.createHeadingsMap('headingPath');
var tree = {};