skypager-project
Version:
skypager project framework
1,713 lines (1,461 loc) • 71.9 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 = 130);
/******/ })
/************************************************************************/
/******/ ({
/***/ "./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/index.js":
/***/ function(module, exports, __webpack_require__) {
"use strict";
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Document = exports.patterns = exports.DefaultPatterns = exports.PATH_SEPARATOR = undefined;
var _values = __webpack_require__(30);
var _values2 = _interopRequireDefault(_values);
var _assign = __webpack_require__(1);
var _assign2 = _interopRequireDefault(_assign);
var _keys = __webpack_require__(13);
var _keys2 = _interopRequireDefault(_keys);
var _toConsumableArray2 = __webpack_require__(5);
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _defineProperty2 = __webpack_require__(29);
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends3 = __webpack_require__(0);
var _extends4 = _interopRequireDefault(_extends3);
var _classCallCheck2 = __webpack_require__(2);
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = __webpack_require__(3);
var _createClass3 = _interopRequireDefault(_createClass2);
var _class, _temp;
exports.normalizeUri = normalizeUri;
var _url = __webpack_require__(77);
var _url2 = _interopRequireDefault(_url);
var _path = __webpack_require__(12);
var _properties = __webpack_require__(11);
var _string = __webpack_require__(15);
var stringUtils = _interopRequireWildcard(_string);
var _pathIsAbsolute = __webpack_require__(75);
var _pathIsAbsolute2 = _interopRequireDefault(_pathIsAbsolute);
var _collection = __webpack_require__("./src/collection/index.js");
var _collection2 = _interopRequireDefault(_collection);
var _context = __webpack_require__(20);
var _context2 = _interopRequireDefault(_context);
var _cache = __webpack_require__("./src/cache.js");
var _cache2 = _interopRequireDefault(_cache);
var _mapValues = __webpack_require__(21);
var _mapValues2 = _interopRequireDefault(_mapValues);
var _isFunction = __webpack_require__(36);
var _isFunction2 = _interopRequireDefault(_isFunction);
var _vfile = __webpack_require__(46);
var _vfile2 = _interopRequireDefault(_vfile);
var _set = __webpack_require__(65);
var _set2 = _interopRequireDefault(_set);
var _omit = __webpack_require__(17);
var _omit2 = _interopRequireDefault(_omit);
var _pick = __webpack_require__(33);
var _pick2 = _interopRequireDefault(_pick);
var _uniq = __webpack_require__(28);
var _uniq2 = _interopRequireDefault(_uniq);
var _isEmpty = __webpack_require__(32);
var _isEmpty2 = _interopRequireDefault(_isEmpty);
var _castArray = __webpack_require__(31);
var _castArray2 = _interopRequireDefault(_castArray);
var _objectHash = __webpack_require__(74);
var _objectHash2 = _interopRequireDefault(_objectHash);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var PATH_SEPARATOR = exports.PATH_SEPARATOR = _path.sep;
var DefaultPatterns = exports.DefaultPatterns = ['**/*.{js,md,yml,json,svg,html,css,scss,less,json}', '!node_modules/**'];
var patterns = exports.patterns = DefaultPatterns;
var Document = exports.Document = (_temp = _class = function () {
(0, _createClass3.default)(Document, null, [{
key: 'mountCollection',
value: function mountCollection(cwd) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (!cwd) {
throw new Error('Must pass a folder to Document.mountCollection');
}
return _collection2.default.mount(cwd, options);
}
}]);
function Document(vFileOrPath) {
var _this = this;
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
(0, _classCallCheck3.default)(this, Document);
(0, _properties.mixinPropertyUtils)(this);
if (options.project) {
this.hide('project', options.project);
delete options.project;
}
if (options.collection) {
this.hide('collection', options.collection);
delete options.collection;
}
this.hide('options', options);
this.hide('cwd', options.cwd);
var originalURI = normalizeUri(vFileOrPath.path ? vFileOrPath.path : vFileOrPath, options.cwd);
this.hide('originalURI', originalURI);
this.hide('parsedURI', _url2.default.parse(this.originalURI));
this.hide('url', this.parsedURI.href);
this.hide('uri', this.url);
this.hide('path', unescape(this.parsedURI.path));
this.hide('_appliedDocTypes', {});
if (vFileOrPath.path) {
this.options.file = vFileOrPath;
}
this.lazy('file', function () {
return _this.toVFile((0, _extends4.default)({
cwd: _this.cwd
}, _this.options.file || {}));
});
this.hide('data', {});
this.lazy('id', this.buildId.bind(this));
this.lazy('fileStat', function () {
return _this.get('file.stat', {});
});
this.lazy('createdAt', function () {
return _this.result('fileStat.ctime', function () {
return Math.floor(new Date() / 1000);
});
});
this.lazy('pathInfo', function () {
return (0, _path.parse)(_this.path);
});
this.lazy('vmSandbox', function () {
return _this.project.vm.createContext((0, _extends4.default)({}, _this.project.sandbox, {
doc: _this,
global: {}
}));
});
}
(0, _createClass3.default)(Document, [{
key: 'touch',
value: function touch() {
try {
this.set('data.updatedAt', Math.floor(new Date() / 1000));
} catch (e) {}
return this;
}
}, {
key: 'createContext',
value: function createContext() {
var sandbox = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return (0, _extends4.default)({}, sandbox, {
doc: this,
project: this.project
});
}
}, {
key: 'relativeDoc',
value: function relativeDoc(relativeDocId) {
return this.project.documentsMap[this.project.relative(this.pathToRelative(relativeDocId))];
}
}, {
key: 'pathToRelative',
value: function pathToRelative(relativePath) {
return (0, _path.resolve)(this.fileDirname, relativePath);
}
}, {
key: 'getTransformPresets',
value: function getTransformPresets() {
return this.getTransforms();
}
}, {
key: 'getTransforms',
value: function getTransforms() {
return this.matchingDocTypes.reduce(function (memo, docType) {
return (0, _extends4.default)({}, memo, (0, _defineProperty3.default)({}, docType.name, docType.getTransforms ? docType.getTransforms() : {}));
}, {});
}
}, {
key: 'getUtils',
value: function getUtils() {
return this.matchingDocTypes.reduce(function (memo, docType) {
return (0, _extends4.default)({}, memo, docType.getUtils ? docType.getUtils() : {});
});
}
}, {
key: 'buildId',
value: function buildId() {
var usingPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.path;
var cwd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.cwd;
if ((0, _isFunction2.default)(this.options.buildId)) {
return this.options.buildId((0, _path.relative)(cwd, usingPath));
} else if (this.collection && (0, _isFunction2.default)(this.collection.buildId)) {
return this.collection.buildId((0, _path.relative)(cwd, usingPath));
} else {
return (0, _path.relative)(cwd, usingPath).replace(/\.\w+$/g, '').replace(/\.js$/g, '');
}
}
}, {
key: 'select',
value: function select(selector) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
if ((0, _isFunction2.default)(selector)) {
var result = selector.call.apply(selector, [this, this.exporter].concat(args));
return result && typeof result.value === 'function' ? result.value() : result;
} else if (typeof selector === 'string') {
return this.constructor.selectors.lookup(selector).apply(undefined, [this].concat(args));
}
}
}, {
key: 'selectChain',
value: function selectChain(selector) {
var _chain;
for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
return (_chain = this.chain).invoke.apply(_chain, ['select', selector].concat(args));
}
}, {
key: 'selectorMap',
value: function selectorMap() {
var _this2 = this;
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var resolveChain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var c = this.chain.plant(config).mapValues(function (selector) {
return _this2.select.apply(_this2, (0, _toConsumableArray3.default)((0, _castArray2.default)(selector)));
});
return resolveChain ? c.value() : c;
}
}, {
key: 'sliceId',
value: function sliceId() {
var removeFromBeginning = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
var removeFromEnd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
if (removeFromEnd < 0) {
removeFromEnd = removeFromEnd * -1;
}
return this.idParts.slice(removeFromBeginning, removeFromEnd < 0 ? removeFromEnd * -1 : this.idParts.length);
}
}, {
key: 'applyDoctypes',
value: function applyDoctypes() {
var _this3 = this;
if ((0, _isEmpty2.default)(this.appliedDocTypes)) {
this.matchingDocTypes.forEach(function (docType) {
docType.decorate(_this3);
_this3.appliedDocTypes[docType.name] = true;
});
}
return this;
}
}, {
key: 'toJson',
value: function toJson() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return (0, _extends4.default)({
id: this.id,
file: (0, _omit2.default)(this.file, 'contents', '_contents'),
metadata: this.metadata,
idParts: this.idParts,
categoryFolder: this.categoryFolder,
categoryFolderName: this.categoryFolderName,
baseFolder: this.baseFolder,
variations: this.variations
}, options.pick ? (0, _pick2.default)(this, options.pick) : {}, options.pickBy ? pickBy(this, options.pickBy) : {}, options.includeContents ? { contents: this.file.contents } : { contents: null });
}
}, {
key: 'toVFile',
value: function toVFile() {
var fileOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return (0, _vfile2.default)((0, _extends4.default)({
path: this.path,
cwd: this.cwd
}, fileOptions));
}
}, {
key: 'readFile',
value: function readFile() {
var cache = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
if (cache && this.contents && this.contents.length > 0) {
this.file.contents = this.contents;
return this;
}
this.file.contents = this.contents = this.project.readFileSync(this.file.path).toString();
return this.touch();
}
}, {
key: 'readFileAsync',
value: function readFileAsync() {
var _this4 = this;
return this.project.readFileAsync(this.file.path).then(function (contents) {
return _this4.contents = contents.toString();
});
}
}, {
key: 'slice',
/**
* Create a lodash chain by picking some properties from the project.
* @param {Array[String]} properties List of properties you want to be a part of the chain
* @return {Chain} The lodash chain whose initial value consists of the properties given
*/
value: function slice() {
var _this5 = this;
for (var _len3 = arguments.length, properties = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
properties[_key3] = arguments[_key3];
}
return properties.reduce(function (memo, prop) {
(0, _set2.default)(memo, prop, _this5.result(prop));
return memo;
}, {});
}
}, {
key: 'createEntityFrom',
value: function createEntityFrom() {
var _ready;
var src = (_ready = this.ready).slice.apply(_ready, arguments);
return __webpack_require__("./src/entity.js").createEntity(src);
}
}, {
key: 'asyncRunner',
value: function asyncRunner(code) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return this.project.createSandboxedScriptRunner(code, {
sandbox: this.vmSandbox
});
}
}, {
key: 'createStemVariations',
value: function createStemVariations() {
var base = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.variationsBase;
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var startCase = stringUtils.startCase,
camelCase = stringUtils.camelCase,
kebabCase = stringUtils.kebabCase,
snakeCase = stringUtils.snakeCase,
humanize = stringUtils.humanize,
titleize = stringUtils.titleize;
return (0, _mapValues2.default)({
classified: startCase(camelCase(base)).replace(/\s+/g, ''),
camel: camelCase(base),
kebab: kebabCase(base),
snake: snakeCase(base),
underscored: kebabCase(base).replace(/\-/g, '_'),
humanized: humanize(kebabCase(base).replace(/\-/g, '_')),
titleized: titleize(humanize(kebabCase(base).replace(/\-/g, '_')))
}, function (v) {
var value = '' + (options.prefix || '') + v + (options.suffix || '');
var modifier = options.pluralize ? stringUtils.pluralize : options.singularize ? stringUtils.singularize : function (v) {
return v;
};
return modifier(value);
});
}
}, {
key: 'reloadFileContents',
value: function reloadFileContents() {
return this.contents = this.file.contents = this.readFileSync(false);
}
}, {
key: 'getFileContents',
value: function getFileContents() {
return this.result('file.contents', '').toString();
}
}, {
key: 'appliedDocTypes',
get: function get() {
return (0, _keys2.default)(this._appliedDocTypes);
}
}, {
key: 'updatedAt',
get: function get() {
return Math.floor(this.get('data.updatedAt', this.createdAt) / 1000);
}
}, {
key: 'decorated',
get: function get() {
this.applyDoctypes();
return this;
}
}, {
key: 'selectors',
get: function get() {
return this.constructor.selectors;
}
}, {
key: 'chain',
get: function get() {
return this.project.chain.plant(this);
}
}, {
key: 'exporter',
get: function get() {
return this.project.chain.plant(this.ready);
}
}, {
key: 'ready',
get: function get() {
return this.readFile(true).decorated;
}
}, {
key: 'doctypes',
get: function get() {
return this.docTypes;
}
}, {
key: 'docTypes',
get: function get() {
var project = this.project;
return project.chain.get('documentTypes.available', []).thru(function (list) {
return list.map(function (docType) {
return project.documentType(docType);
});
}).value();
}
}, {
key: 'matchingDocTypes',
get: function get() {
var _this6 = this;
var project = this.project;
return project.chain.get('documentTypes.available', []).thru(function (list) {
return list.map(function (docType) {
return project.documentType(docType);
});
}).flatten().filter(function (docType) {
return docType.testDocument(_this6);
}).value();
}
}, {
key: 'idParts',
get: function get() {
return this.id.split(PATH_SEPARATOR);
}
}, {
key: 'baseFolder',
get: function get() {
return this.idParts[0];
}
}, {
key: 'categoryFolderName',
get: function get() {
var length = this.idParts.length;
return this.isIndex ? this.idParts[length - 3] || this.idParts[1] : this.idParts[length - 2] || this.idParts[1];
}
}, {
key: 'categoryFolder',
get: function get() {
return (this.isIndex ? this.idParts.slice(0, this.idparts.length - 2) : this.idParts.slice(0, this.idparts.length - 1)).join(PATH_SEPARATOR);
}
}, {
key: 'metadata',
get: function get() {
return (0, _extends4.default)({}, this.fileData, this.data, this.get('exportables.frontmatter', {}));
}
}, {
key: 'idPair',
get: function get() {
return [this.id, this];
}
}, {
key: 'isIndex',
get: function get() {
return !!(this.id.match(/index$/) || this.fileStem === 'index' || this.fileBaseName.startsWith('index'));
}
}, {
key: 'isPackageManifest',
get: function get() {
return this.fileBaseName === 'package.json';
}
}, {
key: 'variationsBase',
get: function get() {
return this.isIndex ? this.fileDirnameBasename : this.fileStem;
}
}, {
key: 'fileExtname',
get: function get() {
return this.file.extname;
}
}, {
key: 'isMarkdown',
get: function get() {
return this.fileExtname && this.fileExtname.match(/.md$/);
}
}, {
key: 'isJavascript',
get: function get() {
return this.fileExtname && this.fileExtname.match(/.js$/);
}
}, {
key: 'fileData',
get: function get() {
var _this7 = this;
return (0, _isFunction2.default)(this.options.getFileData) ? this.options.getFileData.call(this, this.file) : this.result('file.data', function () {
return (0, _assign2.default)(_this7.file, {
data: {}
});
});
}
}, {
key: 'fileMessages',
get: function get() {
return this.get('file.messages', {});
}
}, {
key: 'variationsWithDirname',
get: function get() {
var base = this.fileDirnameBasename + '_' + this.fileStem;
return (0, _extends4.default)({}, this.createStemVariations(base), {
singularized: this.createStemVariations(base, {
singularize: true
}),
pluralized: this.createStemVariations(base, {
pluralize: true
})
});
}
}, {
key: 'variations',
get: function get() {
return (0, _extends4.default)({}, this.createStemVariations(this.variationsBase), {
singularized: this.createStemVariations(this.variationsBase, {
singularize: true
}),
pluralized: this.createStemVariations(this.variationsBase, {
pluralize: true
})
});
}
}, {
key: 'nameVariations',
get: function get() {
var variations = this.variations;
return (0, _uniq2.default)((0, _values2.default)((0, _omit2.default)(variations, 'pluralized', 'singularized')).concat((0, _values2.default)(variations.pluralized), (0, _values2.default)(variations.singularized)));
}
}, {
key: 'indexVariations',
get: function get() {
return this.createStemVariations(this.variationsBase, {
suffix: '/index' + this.fileExtname
});
}
}, {
key: 'filenameVariations',
get: function get() {
return (0, _extends4.default)({}, this.createStemVariations(this.variationsBase, {
suffix: this.fileExtname
}));
}
}, {
key: 'fileStem',
get: function get() {
return this.file.stem;
}
}, {
key: 'fileBaseName',
get: function get() {
return this.file.basename;
}
}, {
key: 'fileDirname',
get: function get() {
return this.file.dirname;
}
}, {
key: 'relativeDirname',
get: function get() {
return (0, _path.relative)(this.cwd, this.fileDirname);
}
}, {
key: 'fileDirnameBasename',
get: function get() {
return (0, _path.basename)(this.fileDirname);
}
}, {
key: 'baseRelativePath',
get: function get() {
return (0, _path.relative)(this.cwd, this.path);
}
}, {
key: 'contentLength',
get: function get() {
var statSize = this.result('stat.size');
if (typeof statSize === 'undefined') {
return 0;
} else {
return (this.get('contents', this.get('file.contents', '')) || '').length;
}
}
}, {
key: 'stat',
get: function get() {
return this.get('file.stat', {});
}
}, {
key: 'cacheKey',
get: function get() {
return [this.baseRelativePath, this.updatedAt.toString(), this.contentLength.toString()].join(':');
}
}, {
key: 'isRemote',
get: function get() {
return this.uri.protocol.indexOf('http') !== -1;
}
}]);
return Document;
}(), _class.patterns = DefaultPatterns, _class