diff options
| author | Shipwreckt <me@shipwreckt.co.uk> | 2025-10-31 20:02:14 +0000 |
|---|---|---|
| committer | Shipwreckt <me@shipwreckt.co.uk> | 2025-10-31 20:02:14 +0000 |
| commit | 7a52ddeba2a68388b544f529d2d92104420f77b0 (patch) | |
| tree | 15ddd47457a2cb4a96060747437d36474e4f6b4e /node_modules/nunjucks/src/node-loaders.js | |
| parent | 53d6ae2b5568437afa5e4995580a3fb679b7b91b (diff) | |
Changed from static to 11ty!
Diffstat (limited to 'node_modules/nunjucks/src/node-loaders.js')
| -rw-r--r-- | node_modules/nunjucks/src/node-loaders.js | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/node_modules/nunjucks/src/node-loaders.js b/node_modules/nunjucks/src/node-loaders.js new file mode 100644 index 0000000..0e8f548 --- /dev/null +++ b/node_modules/nunjucks/src/node-loaders.js @@ -0,0 +1,139 @@ +/* eslint-disable no-console */ + +'use strict'; + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var fs = require('fs'); +var path = require('path'); +var Loader = require('./loader'); +var _require = require('./precompiled-loader.js'), + PrecompiledLoader = _require.PrecompiledLoader; +var chokidar; +var FileSystemLoader = /*#__PURE__*/function (_Loader) { + _inheritsLoose(FileSystemLoader, _Loader); + function FileSystemLoader(searchPaths, opts) { + var _this; + _this = _Loader.call(this) || this; + if (typeof opts === 'boolean') { + console.log('[nunjucks] Warning: you passed a boolean as the second ' + 'argument to FileSystemLoader, but it now takes an options ' + 'object. See http://mozilla.github.io/nunjucks/api.html#filesystemloader'); + } + opts = opts || {}; + _this.pathsToNames = {}; + _this.noCache = !!opts.noCache; + if (searchPaths) { + searchPaths = Array.isArray(searchPaths) ? searchPaths : [searchPaths]; + // For windows, convert to forward slashes + _this.searchPaths = searchPaths.map(path.normalize); + } else { + _this.searchPaths = ['.']; + } + if (opts.watch) { + // Watch all the templates in the paths and fire an event when + // they change + try { + chokidar = require('chokidar'); // eslint-disable-line global-require + } catch (e) { + throw new Error('watch requires chokidar to be installed'); + } + var paths = _this.searchPaths.filter(fs.existsSync); + var watcher = chokidar.watch(paths); + watcher.on('all', function (event, fullname) { + fullname = path.resolve(fullname); + if (event === 'change' && fullname in _this.pathsToNames) { + _this.emit('update', _this.pathsToNames[fullname], fullname); + } + }); + watcher.on('error', function (error) { + console.log('Watcher error: ' + error); + }); + } + return _this; + } + var _proto = FileSystemLoader.prototype; + _proto.getSource = function getSource(name) { + var fullpath = null; + var paths = this.searchPaths; + for (var i = 0; i < paths.length; i++) { + var basePath = path.resolve(paths[i]); + var p = path.resolve(paths[i], name); + + // Only allow the current directory and anything + // underneath it to be searched + if (p.indexOf(basePath) === 0 && fs.existsSync(p)) { + fullpath = p; + break; + } + } + if (!fullpath) { + return null; + } + this.pathsToNames[fullpath] = name; + var source = { + src: fs.readFileSync(fullpath, 'utf-8'), + path: fullpath, + noCache: this.noCache + }; + this.emit('load', name, source); + return source; + }; + return FileSystemLoader; +}(Loader); +var NodeResolveLoader = /*#__PURE__*/function (_Loader2) { + _inheritsLoose(NodeResolveLoader, _Loader2); + function NodeResolveLoader(opts) { + var _this2; + _this2 = _Loader2.call(this) || this; + opts = opts || {}; + _this2.pathsToNames = {}; + _this2.noCache = !!opts.noCache; + if (opts.watch) { + try { + chokidar = require('chokidar'); // eslint-disable-line global-require + } catch (e) { + throw new Error('watch requires chokidar to be installed'); + } + _this2.watcher = chokidar.watch(); + _this2.watcher.on('change', function (fullname) { + _this2.emit('update', _this2.pathsToNames[fullname], fullname); + }); + _this2.watcher.on('error', function (error) { + console.log('Watcher error: ' + error); + }); + _this2.on('load', function (name, source) { + _this2.watcher.add(source.path); + }); + } + return _this2; + } + var _proto2 = NodeResolveLoader.prototype; + _proto2.getSource = function getSource(name) { + // Don't allow file-system traversal + if (/^\.?\.?(\/|\\)/.test(name)) { + return null; + } + if (/^[A-Z]:/.test(name)) { + return null; + } + var fullpath; + try { + fullpath = require.resolve(name); + } catch (e) { + return null; + } + this.pathsToNames[fullpath] = name; + var source = { + src: fs.readFileSync(fullpath, 'utf-8'), + path: fullpath, + noCache: this.noCache + }; + this.emit('load', name, source); + return source; + }; + return NodeResolveLoader; +}(Loader); +module.exports = { + FileSystemLoader: FileSystemLoader, + PrecompiledLoader: PrecompiledLoader, + NodeResolveLoader: NodeResolveLoader +};
\ No newline at end of file |
