UNPKG

skypager-project

Version:
1,628 lines (1,363 loc) 45.6 kB
exports.ids = [3]; exports.modules = { /***/ "./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 _values = __webpack_require__(15); var _values2 = _interopRequireDefault(_values); var _promise = __webpack_require__(12); var _promise2 = _interopRequireDefault(_promise); var _toConsumableArray2 = __webpack_require__(4); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _defineProperty2 = __webpack_require__(11); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends2 = __webpack_require__(0); var _extends3 = _interopRequireDefault(_extends2); var _classCallCheck2 = __webpack_require__(1); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = __webpack_require__(2); var _createClass3 = _interopRequireDefault(_createClass2); exports.create = create; var _lodash = __webpack_require__(6); var _lodash2 = _interopRequireDefault(_lodash); var _path = __webpack_require__(5); var _pathIsAbsolute = __webpack_require__(19); var _pathIsAbsolute2 = _interopRequireDefault(_pathIsAbsolute); var _skypagerUtil = __webpack_require__(3); var _document = __webpack_require__("./src/document/index.js"); var _document2 = _interopRequireDefault(_document); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var compact = _lodash2.default.compact; var set = _lodash2.default.set; var groupBy = _lodash2.default.groupBy; var snakeCase = _lodash2.default.snakeCase; var uniq = _lodash2.default.uniq; var chain = _lodash2.default.chain; var 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, _skypagerUtil.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: 'indexFiles', value: function indexFiles() { var _this2 = this; var files = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var cwd = this.cwd; files = _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(); _lodash2.default.assign(this.filesIndex, (0, _extends3.default)({}, this.filesIndex, files)); return this; } }, { key: 'loadFiles', value: function loadFiles() { var _this3 = this; return this.importer.fileWrappers.then(function (files) { return _this3.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, _skypagerUtil.router)(this._routers, (0, _extends3.default)({ routerProperty: name, pathsGetter: name, pathProperty: 'id' }, options, { host: this, matchesOnly: true })); } }, { key: 'createDelegators', value: function createDelegators(receiver) { var _this4 = 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 _this4[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)({ cwd: collection.cwd, collectionType: collection.type }, collection.options.documentOptions || {}); } }, { 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 _this5 = this; return this.chain.get('documents').keyBy('id').mapValues(function (doc) { return ['' + _this5.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__(38)("./" + 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 _this6 = this; return this.chain.get('files').sortBy(function (f) { return f.dirname.length; }).map(function (f) { return [_this6.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 _this7 = this; return this.chains.files.groupBy(function (f) { return _this7.relative(f.dirname).split('/').shift(); }).pickBy(function (v, k) { return k.length > 0; }).value(); } }, { key: 'groupedByChildFolderAndExtension', get: function get() { var _this8 = this; return this.chains.files.groupBy(function (f) { return _this8.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 _skypagerUtil.query.bind(_skypagerUtil.query, collection.files); }, get documents() { return _skypagerUtil.query.bind(_skypagerUtil.query, collection.documents); } }; } }, { key: 'depths', get: function get() { var _this9 = this; return this.chains.files.map(function (f) { return _this9.relative(f.dirname); }).uniq().groupBy(function (f) { return f.split(_path.sep).length - 1; }).omit('').value(); } }, { key: 'relativeFilePaths', get: function get() { var _this10 = this; return this.files.map(function (file) { return (0, _path.relative)(_this10.cwd, file.path); }); } }, { key: 'relativeSubFolderPaths', get: function get() { var _this11 = this; return this.files.map(function (file) { return (0, _path.relative)(_this11.cwd, file.dirname); }); } }, { key: 'subFolderPaths', get: function get() { return uniq(this.files.map(function (f) { return f.dirname; })); } }, { key: 'subFolderNames', get: function get() { var _this12 = this; return this.subFolderPaths.map(function (f) { return (0, _path.relative)(_this12.cwd, f); }).filter(function (f) { return f.length > 0; }); } }, { key: 'subFolderBasenames', get: function get() { var _this13 = this; return this.subFolderPaths.map(function (f) { return (0, _path.relative)(_this13.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 _this14 = this; return uniq(this.childFolderNames.map(function (p) { return _this14.join(p); })); } }, { key: 'ready', get: function get() { var _this15 = this; return this.importer.status === 'LOADED' ? _promise2.default.resolve(this) : this.loadFiles().then(function () { return _this15; }); } }], [{ 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 || [])) }); } /***/ }, /***/ "./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 = undefined; var _values = __webpack_require__(15); var _values2 = _interopRequireDefault(_values); var _extends2 = __webpack_require__(0); var _extends3 = _interopRequireDefault(_extends2); var _classCallCheck2 = __webpack_require__(1); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = __webpack_require__(2); var _createClass3 = _interopRequireDefault(_createClass2); var _class, _temp; exports.normalizeUri = normalizeUri; var _url = __webpack_require__(52); var _url2 = _interopRequireDefault(_url); var _path = __webpack_require__(5); var _skypagerUtil = __webpack_require__(3); var _pathIsAbsolute = __webpack_require__(19); var _pathIsAbsolute2 = _interopRequireDefault(_pathIsAbsolute); var _collection = __webpack_require__("./src/collection/index.js"); var _collection2 = _interopRequireDefault(_collection); var _mapValues = __webpack_require__(20); var _mapValues2 = _interopRequireDefault(_mapValues); var _isFunction = __webpack_require__(34); var _isFunction2 = _interopRequireDefault(_isFunction); var _vfile = __webpack_require__(53); var _vfile2 = _interopRequireDefault(_vfile); var _get = __webpack_require__(16); var _get2 = _interopRequireDefault(_get); var _result = __webpack_require__(32); var _result2 = _interopRequireDefault(_result); var _set = __webpack_require__(33); var _set2 = _interopRequireDefault(_set); var _omit = __webpack_require__(29); var _omit2 = _interopRequireDefault(_omit); var _pick = __webpack_require__(35); var _pick2 = _interopRequireDefault(_pick); var _uniq = __webpack_require__(18); var _uniq2 = _interopRequireDefault(_uniq); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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() { var cwd = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : process.cwd(); var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 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, _skypagerUtil.mixinPropertyUtils)(this); var originalURI = normalizeUri(vFileOrPath.path ? vFileOrPath.path : vFileOrPath, options.cwd || process.cwd()); 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); 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)); if (vFileOrPath.path) { this.options.file = vFileOrPath; } this.lazy('file', function () { return _this.toVFile((0, _extends3.default)({ cwd: _this.cwd }, _this.options.file || {})); }); this.hide('data', {}); this.lazy('id', this.buildId.bind(this)); } (0, _createClass3.default)(Document, [{ key: 'getTransformPresets', value: function getTransformPresets() { return this.matchingDocTypes.reduce(function (memo, docType) { return (0, _extends3.default)({}, memo, docType.getTransforms ? docType.getTransforms() : {}); }); } }, { key: 'getTransforms', value: function getTransforms() { return this.matchingDocTypes.reduce(function (memo, docType) { return (0, _extends3.default)({}, memo, docType.getTransforms ? docType.getTransforms() : {}); }); } }, { key: 'getUtils', value: function getUtils() { return this.matchingDocTypes.reduce(function (memo, docType) { return (0, _extends3.default)({}, memo, docType.getUtils ? docType.getUtils() : {}); }); } }, { key: 'buildId', value: function buildId() { if ((0, _isFunction2.default)(this.options.buildId)) { return this.options.buildId((0, _path.relative)(this.cwd, this.path)); } else if (this.collection && (0, _isFunction2.default)(this.collection.buildId)) { return this.collection.buildId((0, _path.relative)(this.cwd, this.path)); } else { return (0, _path.relative)(this.cwd, this.path).replace(/\.\w+$/g, '').replace(/\.js$/g, ''); } } }, { key: 'applyDoctypes', value: function applyDoctypes() { var _this2 = this; this.matchingDocTypes.forEach(function (docType) { docType.decorate(_this2); }); return this; } }, { key: 'toJson', value: function toJson() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return (0, _extends3.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 } : {}); } }, { key: 'toVFile', value: function toVFile() { var fileOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return (0, _vfile2.default)((0, _extends3.default)({ path: this.path }, fileOptions)); } }, { key: 'readFile', value: function readFile() { var cache = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; this.file.contents = cache && this.contents ? this.contents : this.project.readFileSync(this.file.path).toString(); return this; } }, { key: 'readFileAsync', value: function readFileAsync() { var _this3 = this; return this.project.readFileAsync(this.file.path).then(function (contents) { return _this3.contents = contents.toString(); }); } }, { 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 = _skypagerUtil.strings.startCase; var camelCase = _skypagerUtil.strings.camelCase; var kebabCase = _skypagerUtil.strings.kebabCase; var snakeCase = _skypagerUtil.strings.snakeCase; 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, '_') }, function (v) { var value = '' + (options.prefix || '') + v + (options.suffix || ''); var modifier = options.pluralize ? _skypagerUtil.strings.pluralize : options.singularize ? _skypagerUtil.strings.singularize : function (v) { return v; }; return modifier(value); }); } }, { key: 'getFileContents', value: function getFileContents() { return this.get('file.contents', '').toString(); } }, { key: 'decorated', get: function get() { this.applyDoctypes(); return this; } }, { 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().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 _this4 = 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(_this4); }).value(); } }, { key: 'idParts', get: function get() { return this.id.split('/'); } }, { key: 'baseFolder', get: function get() { return this.idParts[0]; } }, { key: 'categoryFolderName', get: function get() { return this.idParts[1]; } }, { key: 'categoryFolder', get: function get() { return this.idParts.slice(0, 2).join('/'); } }, { key: 'metadata', get: function get() { return (0, _extends3.default)({}, this.fileData, this.data); } }, { key: 'idPair', get: function get() { return [this.id, this]; } }, { key: 'isIndex', get: function get() { return !!(this.id.match(/index$/) || this.file.basename === 'index.js'); } }, { 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() { return (0, _isFunction2.default)(this.options.getFileData) ? this.options.getFileData.call(this, this.file) : this.get('file.data', {}); } }, { key: 'fileMessages', get: function get() { return this.file.messages; } }, { key: 'variations', get: function get() { return (0, _extends3.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, _extends3.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: 'fileDirnameBasename', get: function get() { return (0, _path.basename)(this.fileDirname); } }, { key: 'baseRelativePath', get: function get() { return (0, _path.relative)(this.cwd, this.path); } }, { key: 'stat', get: function get() { return this.get('file.stat', {}); } }, { key: 'cacheKey', get: function get() { return this.file && this.file.stat ? [Math.floor(this.stat.mtime / 100), this.stat.size].join(':') : this.id; } }, { key: 'isRemote', get: function get() { return this.uri.protocol.indexOf('http') !== -1; } }]); return Document; }(), _class.patterns = DefaultPatterns, _temp); exports.default = Document; function normalizeUri(input) { var cwd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : process.cwd(); if (typeof input !== 'string') { throw 'Must pass the URI as a string'; } var parsed = _url2.default.parse(input); var isFilePath = parsed.protocol === null || parsed.protocol.indexOf('file') !== -1; var isRemoteUrl = !isFilePath && parsed.protocol.indexOf('http') !== -1; var isAbsoluteFilePath = isFilePath && (0, _pathIsAbsolute2.default)(parsed.path); if (isRemoteUrl) { return _url2.default.format(parsed); } if (isFilePath && isAbsoluteFilePath) { return _url2.default.format({ protocol: 'file:', slashes: true, pathname: parsed.path }); } else { return _url2.default.format({ protocol: 'file:', slashes: true, pathname: (0, _path.resolve)(cwd, parsed.path) }); } return input; } /***/ }, /***/ "./src/git/index.js": /***/ function(module, exports, __webpack_require__) { "use strict"; 'use strict'; var fs = __webpack_require__(48); var path = __webpack_require__(5); var zlib = __webpack_require__(49); var GIT_DIR = '.git'; function findRepo(startingPath) { var gitPath = void 0, lastPath = void 0; var currentPath = startingPath; if (!currentPath) { currentPath = process.cwd(); } do { gitPath = path.join(currentPath, GIT_DIR); if (fs.existsSync(gitPath)) { return gitPath; } lastPath = currentPath; currentPath = path.resolve(currentPath, '..'); } while (lastPath !== currentPath); return null; } function findPackedTag(gitPath, sha) { var packedRefsFilePath = path.join(gitPath, 'packed-refs'); if (fs.existsSync(packedRefsFilePath)) { var packedRefsFile = fs.readFileSync(packedRefsFilePath, { encoding: 'utf8' }); var tagLine = packedRefsFile.split('\n').filter(function (line) { return line.indexOf('refs/tags') > -1 && line.indexOf(sha) > -1; })[0]; if (tagLine) { return tagLine.split('tags/')[1]; } } } function commitForTag(gitPath, tag) { var tagPath = path.join(gitPath, 'refs', 'tags', tag); var taggedObject = fs.readFileSync(tagPath, { encoding: 'utf8' }).trim(); var objectPath = path.join(gitPath, 'objects', taggedObject.slice(0, 2), taggedObject.slice(2)); if (!zlib.inflateSync || !fs.existsSync(objectPath)) { // we cannot support annotated tags on node v0.10 because // zlib does not allow sync access return taggedObject; } var objectContents = zlib.inflateSync(fs.readFileSync(objectPath)).toString(); // 'tag 172\u0000object c1ee41c325d54f410b133e0018c7a6b1316f6cda\ntype commit\ntag awesome-tag\ntagger Robert Jackson <robert.w.jackson@me.com> 1429100021 -0400\n\nI am making an annotated tag.\n' if (objectContents.slice(0, 3) === 'tag') { var sections = objectContents.split(/\0|\n/); var sha = sections[1].slice(7); return sha; } else { // this will return the tag for lightweight tags return taggedObject; } } function findTag(gitPath, sha) { var tag = findPackedTag(gitPath, sha); if (tag) { return tag; } var tagsPath = path.join(gitPath, 'refs', 'tags'); if (!fs.existsSync(tagsPath)) { return false; } var tags = fs.readdirSync(tagsPath); for (var i = 0, l = tags.length; i < l; i++) { tag = tags[i]; var commitAtTag = commitForTag(gitPath, tags[i]); if (commitAtTag === sha) { return tag; } } } module.exports = function (gitPath) { gitPath = findRepo(gitPath); var result = { sha: null, abbreviatedSha: null, branch: null, tag: null, root: path.resolve(gitPath, '..') }; try { var headFilePath = path.join(gitPath, 'HEAD'); if (fs.existsSync(headFilePath)) { var headFile = fs.readFileSync(headFilePath, { encoding: 'utf8' }); var branchName = headFile.split('/').slice(2).join('/').trim(); if (!branchName) { branchName = headFile.split('/').slice(-1)[0].trim(); } var refPath = headFile.split(' ')[1]; // Find branch and SHA if (refPath) { var branchPath = path.join(gitPath, refPath.trim()); result.branch = branchName; result.sha = fs.readFileSync(branchPath, { encoding: 'utf8' }).trim(); } else { result.sha = branchName; } result.abbreviatedSha = result.sha.slice(0, 10); // Find tag var tag = findTag(gitPath, result.sha); if (tag) { result.tag = tag; } } } catch (e) { if (!module.exports._suppressErrors) { throw e; // helps with testing and scenarios where we do not expect errors } else { // eat the error } } return result; }; module.exports._suppressErrors = true; module.exports._findRepo = findRepo; /***/ }, /***/ "./src/importers/node-vinyl.js": /***/ function(module, exports, __webpack_require__) { "use strict"; 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.DocumentImporter = exports.toVFile = exports.DefaultOptions = undefined; var _defineProperty = __webpack_require__(31); var _defineProperty2 = _interopRequireDefault(_defineProperty); var _toConsumableArray2 = __webpack_require__(4); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _extends2 = __webpack_require__(0); var _extends3 = _interopRequireDefault(_extends2); var _classCallCheck2 = __webpack_require__(1); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = __webpack_require__(2); var _createClass3 = _interopRequireDefault(_createClass2); var _class, _temp; var _isArray = __webpack_require__(51); var _isArray2 = _interopRequireDefault(_isArray); var _uniq = __webpack_require__(18); var _uniq2 = _interopRequireDefault(_uniq); var _vinylRead = __webpack_require__(54); var _vinylRead2 = _interopRequireDefault(_vinylRead); var _convertVinylToVfile = __webpack_require__(50); var _convertVinylToVfile2 = _interopRequireDefault(_convertVinylToVfile); var _skypagerUtil = __webpack_require__(3); var _document = __webpack_require__("./src/document/index.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var defineProperty = _defineProperty2.default; var DefaultOptions = exports.DefaultOptions = { patterns: _document.DefaultPatterns }; var toVFile = exports.toVFile = function toVFile(vinyl) { return (0, _convertVinylToVfile2.default)(vinyl); }; var DocumentImporter = exports.DocumentImporter = (_temp = _class = function () { (0, _createClass3.default)(DocumentImporter, null, [{ key: 'create', value: function create(cwd) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (typeof options === 'string') { options = { patterns: [options], cwd: cwd }; } if ((0, _isArray2.default)(options)) { options = { cwd: cwd, patterns: options }; } var importer = new DocumentImporter(cwd, (0, _extends3.default)({ cwd: cwd }, options)); return importer; } }]); function DocumentImporter() { var cwd = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : process.cwd(); var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; (0, _classCallCheck3.default)(this, DocumentImporter); (0, _skypagerUtil.mixinPropertyUtils)(this); if (typeof cwd !== 'string') { throw 'Document Importers must be created with a cwd path'; } this.cwd = cwd; this.hide('options', (0, _extends3.default)({}, DefaultOptions, options)); delete this.options.cwd; this.patterns = [].concat((0, _toConsumableArray3.default)(this.options.patterns || DefaultOptions.patterns || []), ['!**/*.lock']); if (this.options.collection) { var _patterns; (_patterns = this.patterns).push.apply(_patterns, (0, _toConsumableArray3.default)(this.options.collection.patterns || [])); } this.patterns = (0, _uniq2.default)(this.patterns); var status = 'CREATED'; defineProperty(this, 'status', { configurable: false, get: function get() { return status; }, set: function set(newValue) { return status = newValue; } }); } (0, _createClass3.default)(DocumentImporter, [{ key: 'readFilesSync', value: function readFilesSync(includeContents) { return _vinylRead2.default.sync(this.patterns, (0, _extends3.default)({ base: this.cwd, read: includeContents !== false && this.options.includeContents === true }, this.options)); } }, { key: 'readFiles', value: function readFiles() { var includeContents = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; return (0, _vinylRead2.default)(this.patterns, (0, _extends3.default)({ base: this.cwd, read: includeContents === true }, this.options)); } }, { key: 'fileWrappersSync', get: function get() { return _vinylRead2.default.sync(this.patterns, (0, _extends3.default)({ base: this.cwd, cwd: this.cwd, read: this.options.includeContents === true }, this.options)); } }, { key: 'fileWrappers', get: function get() { return (0, _vinylRead2.default)(this.patterns, (0, _extends3.default)({ base: this.cwd, read: this.options.includeContents === true }, this.options)); } }]); return DocumentImporter; }(), _class.patterns = _document.DefaultPatterns, _temp); exports.default = DocumentImporter; /***/ }, /***/ 128: /***/ function(module, exports, __webpack_require__) { var map = { "./node-vinyl.js": "./src/importers/node-vinyl.js" }; function webpackContext(req) { return __webpack_require__(webpackContextResolve(req)); }; function webpackContextResolve(req) { var id = map[req]; if(!(id + 1)) // check for number throw new Error("Cannot find module '" + req + "'."); return id; }; webpackContext.keys = function webpackContextKeys() { return Object.keys(map); }; webpackContext.resolve = webpackContextResolve; module.exports = webpackContext; webpackContext.id = 128; /***/ }, /***/ 38: /***/ function(module, exports, __webpack_require__) { var map = { "./node-vinyl.js": "./src/importers/node-vinyl.js" }; function webpackContext(req) { return __webpack_require__(webpackContextResolve(req)); }; function webpackContextResolve(req) { var id = map[req]; if(!(id + 1)) // check for number throw new Error("Cannot find module '" + req + "'."); return id; }; webpackContext.keys = function webpackContextKeys() { return Object.keys(map); }; webpackContext.resolve = webpackContextResolve; module.exports = webpackContext; webpackContext.id = 38; /***/ } };;