Initial
This commit is contained in:
4
resources/app/node_modules/express-handlebars/.eslintignore
generated
vendored
Normal file
4
resources/app/node_modules/express-handlebars/.eslintignore
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
coverage/
|
||||
dist/
|
||||
42
resources/app/node_modules/express-handlebars/.eslintrc.js
generated
vendored
Normal file
42
resources/app/node_modules/express-handlebars/.eslintrc.js
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
node: true,
|
||||
jest: true,
|
||||
},
|
||||
extends: [
|
||||
"standard",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
],
|
||||
plugins: [
|
||||
"@typescript-eslint",
|
||||
],
|
||||
parser: "@typescript-eslint/parser",
|
||||
parserOptions: {
|
||||
ecmaVersion: 2018,
|
||||
},
|
||||
rules: {
|
||||
quotes: ["error", "double"],
|
||||
semi: ["error", "always"],
|
||||
"no-warning-comments": "warn",
|
||||
"comma-dangle": ["error", "always-multiline"],
|
||||
indent: ["error", "tab", { SwitchCase: 1 }],
|
||||
"no-tabs": "off",
|
||||
"no-var": "error",
|
||||
"prefer-const": "error",
|
||||
"object-shorthand": "error",
|
||||
"no-restricted-globals": [
|
||||
"error",
|
||||
{
|
||||
name: "fit",
|
||||
message: "Do not commit focused tests.",
|
||||
},
|
||||
{
|
||||
name: "fdescribe",
|
||||
message: "Do not commit focused tests.",
|
||||
},
|
||||
],
|
||||
"@typescript-eslint/ban-ts-comment": "warn",
|
||||
"@typescript-eslint/no-var-requires": "warn",
|
||||
},
|
||||
};
|
||||
402
resources/app/node_modules/express-handlebars/HISTORY.md
generated
vendored
Normal file
402
resources/app/node_modules/express-handlebars/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,402 @@
|
||||
Express Handlebars Change History
|
||||
=================================
|
||||
|
||||
4.0.1 (2020-04-01)
|
||||
------------------
|
||||
|
||||
* Update handlebars to fix mimist vulnerability.
|
||||
|
||||
4.0.0 (2020-03-25)
|
||||
------------------
|
||||
|
||||
* Move to repo https://github.com/express-handlebars/express-handlebars/
|
||||
* Update all deps.
|
||||
|
||||
3.1.0 (2019-05-14)
|
||||
------------------
|
||||
|
||||
* `defaultLayout` defaults to main ([#249][])
|
||||
* Upgrade Handlebars to v4.1.2 ([#250][])
|
||||
|
||||
[#249]: https://github.com/ericf/express-handlebars/issues/249
|
||||
[#250]: https://github.com/ericf/express-handlebars/issues/250
|
||||
|
||||
3.0.2 (2019-02-24)
|
||||
------------------
|
||||
|
||||
* Fix configuration `layoutsDir` & `partialsDir`. ([#244][])
|
||||
|
||||
[#244]: https://github.com/ericf/express-handlebars/issues/244
|
||||
|
||||
3.0.1 (2019-02-20)
|
||||
------------------
|
||||
|
||||
* Updated dependencies that are long over due
|
||||
|
||||
3.0.0 (2016-01-26)
|
||||
------------------
|
||||
|
||||
* Upgraded to Handlebars 4.0. ([#142][])
|
||||
|
||||
[#142]: https://github.com/ericf/express-handlebars/issues/142
|
||||
|
||||
2.0.1 (2015-04-23)
|
||||
------------------
|
||||
|
||||
* Guarded against unexpected Handlebars API change that was released in a patch.
|
||||
([#125][])
|
||||
|
||||
|
||||
[#125]: https://github.com/ericf/express-handlebars/issues/125
|
||||
|
||||
|
||||
2.0.0 (2015-03-22)
|
||||
------------------
|
||||
|
||||
* __[!]__ Upgraded to Handlebars 3.0 by default, but still works with Handlebars
|
||||
2.x by using the `handlebars` config option. ([#105][])
|
||||
|
||||
* __[!]__ Removed using prototype properties for default config values. The
|
||||
default values are now embedded in the constructor. ([#105][])
|
||||
|
||||
* __[!]__ Removed `handlebarsVersion` instance property and
|
||||
`getHandlebarsSemver()` static function on the `ExpressHandlebars`
|
||||
constructor. ([#105][])
|
||||
|
||||
* __[!]__ Replaced undocumented `compileTemplate()` hook with the protected but
|
||||
supported `_compileTemplate()` and `_precompileTemplate()` hooks. ([#95][])
|
||||
|
||||
* Fixed layout path resolution on Windows. ([#113][] @Tineler)
|
||||
|
||||
* Added `compilerOptions` config property which is passed along to
|
||||
`Handlebars.compile()` and `Handlebars.precompile()`. ([#95][])
|
||||
|
||||
* Exposed Express Handlebars metadata to the data channel during render. This
|
||||
metadata is accessible via `{{@exphbs.*}}` ([#89][], [#101][])
|
||||
|
||||
* Added new "protected" hooks for AOP-ing template compilation and rendering,
|
||||
all of which can optionally return a Promise: ([#105][])
|
||||
|
||||
* `_compileTemplate()`
|
||||
* `_precompileTemplate()`
|
||||
* `_renderTemplate()`
|
||||
|
||||
|
||||
[#89]: https://github.com/ericf/express-handlebars/issues/89
|
||||
[#95]: https://github.com/ericf/express-handlebars/issues/95
|
||||
[#101]: https://github.com/ericf/express-handlebars/issues/101
|
||||
[#105]: https://github.com/ericf/express-handlebars/issues/105
|
||||
[#113]: https://github.com/ericf/express-handlebars/issues/113
|
||||
|
||||
|
||||
1.2.2 (2015-03-06)
|
||||
------------------
|
||||
|
||||
* Upgraded `glob` dependency to v5 which now officially supports symlinks via
|
||||
the new `follow` option. ([#98][])
|
||||
|
||||
|
||||
1.2.1 (2015-02-17)
|
||||
------------------
|
||||
|
||||
* Locked down `glob` dependency to a v4 version range that is known to work with
|
||||
this package _and_ support symlinks. The `glob` version can be updated when
|
||||
[isaacs/node-glob#139](https://github.com/isaacs/node-glob/issues/139) is
|
||||
resolved. ([#98][] @adgad)
|
||||
|
||||
|
||||
[#98]: https://github.com/ericf/express-handlebars/issues/98
|
||||
|
||||
|
||||
1.2.0 (2015-02-17)
|
||||
------------------
|
||||
|
||||
* Added support for render-level `partials` to be specified when calling
|
||||
`renderView()` (which is the method Express calls). The `options.partials`
|
||||
value matches what Handlebars accepts during template rendering: it should
|
||||
have the shape `{partialName: fn}` or be a Promise for such an object.
|
||||
([#82][])
|
||||
|
||||
|
||||
[#82]: https://github.com/ericf/express-handlebars/issues/82
|
||||
|
||||
|
||||
1.1.0 (2014-09-14)
|
||||
------------------
|
||||
|
||||
* __[!]__ Upgraded Handlebars to 2.0.0 final, it was beta before.
|
||||
|
||||
* Added support for `partialsDir` to be configured with a collection (or promise
|
||||
for a collection) of templates, via the new `templates` prop in `partialDir`
|
||||
config objects. This allows developers to hand Express Handlebars the compiled
|
||||
partials templates to use for a specific partials dir.
|
||||
([#81][] @joanniclaborde)
|
||||
|
||||
* Upgraded Promise dependency.
|
||||
|
||||
|
||||
[#81]: https://github.com/ericf/express-handlebars/issues/81
|
||||
|
||||
|
||||
1.0.3 (2014-09-05)
|
||||
------------------
|
||||
|
||||
* Fixed issue with namespaced partials dirs not actually being namespaces.
|
||||
([#76][] @inerte)
|
||||
|
||||
|
||||
[#76]: https://github.com/ericf/express-handlebars/issues/76
|
||||
|
||||
|
||||
1.0.2 (2014-09-05)
|
||||
------------------
|
||||
|
||||
* Fixed `engines` entry in `package.json` to Node `>=0.10` to reflect this
|
||||
package's requirements. ([#78][])
|
||||
|
||||
|
||||
[#78]: https://github.com/ericf/express-handlebars/issues/78
|
||||
|
||||
|
||||
1.0.1 (2014-08-08)
|
||||
------------------
|
||||
|
||||
* Fixed bug where rendered content was only be returned if a layout template was
|
||||
being used. Now a layout-less render will actually return content. ([#73][])
|
||||
|
||||
|
||||
[#73]: https://github.com/ericf/express-handlebars/issues/73
|
||||
|
||||
|
||||
1.0.0 (2014-08-07)
|
||||
------------------
|
||||
|
||||
* __[!]__ Renamed to: `express-handlebars`. ([#65][])
|
||||
|
||||
* __[!]__ Rewritten to use Promises instead of `async` for asynchronous code.
|
||||
([#68][]) This resulted in the following public API changes:
|
||||
|
||||
* `loadPartials()` --> `getPartials()`, returns a Promise.
|
||||
* `loadTemplate()` --> `getTemplate()`, returns a Promise.
|
||||
* `loadTemplates()` --> `getTemplates()`, returns a Promise.
|
||||
* `render(file, context, [options])`, returns a Promise.
|
||||
|
||||
|
||||
* `partialsDir` can now be set with an array of objects in the following form to
|
||||
support namespaced partials: ([#70][] @joanniclaborde)
|
||||
|
||||
{ dir: 'foo/bar/', namespace: 'bar' }
|
||||
|
||||
* Added support for Handlebars' `data` channel via `options.data`. ([#62][])
|
||||
|
||||
* Added `compileTemplate()` hook for the pre/post compile process, this also
|
||||
supports returning a Promise. ([#39][], [#41][])
|
||||
|
||||
* Added `_renderTemplate()` hook that supports returning a Promise.
|
||||
([#39][], [#41][])
|
||||
|
||||
* Upgraded all dependencies, including Handlebars to 2.x. ([#59][])
|
||||
|
||||
* Added `graceful-fs` dependency to support large numbers of files to avoid
|
||||
EMFILE errors.
|
||||
|
||||
* Reduced complexity of cache code.
|
||||
|
||||
* Updated examples to each be self-contained and have `package.json` files.
|
||||
|
||||
|
||||
[#39]: https://github.com/ericf/express-handlebars/issues/39
|
||||
[#41]: https://github.com/ericf/express-handlebars/issues/41
|
||||
[#59]: https://github.com/ericf/express-handlebars/issues/59
|
||||
[#62]: https://github.com/ericf/express-handlebars/issues/62
|
||||
[#65]: https://github.com/ericf/express-handlebars/issues/65
|
||||
[#68]: https://github.com/ericf/express-handlebars/issues/68
|
||||
[#70]: https://github.com/ericf/express-handlebars/issues/70
|
||||
|
||||
|
||||
0.5.1 (2014-08-05)
|
||||
------------------
|
||||
|
||||
* __[!]__ Last release before `v1.0` which will have breaking changes.
|
||||
|
||||
* Improved `extname` docs in README and added example. ([#30][] @Crashthatch)
|
||||
|
||||
* `extname` can now be specified _without_ the leading `"."`.
|
||||
([#51][] @calvinmetcalf)
|
||||
|
||||
|
||||
[#30]: https://github.com/ericf/express-handlebars/issues/30
|
||||
[#51]: https://github.com/ericf/express-handlebars/issues/51
|
||||
|
||||
|
||||
0.5.0 (2013-07-25)
|
||||
------------------
|
||||
|
||||
* Added `loadTemplates()` method which will load all the templates in a
|
||||
specified directory. ([#21][])
|
||||
|
||||
* Added support for multiple partials directories. This enables the
|
||||
`partialsDir` configuration property to be specified as an *array* of
|
||||
directories, and loads all of the templates in each one.
|
||||
|
||||
This feature allows an app's partials to be split up in multiple directories,
|
||||
which is common if an app has some shared partials which will also be exposed
|
||||
to the client, and some server-side-only partials. ([#20][])
|
||||
|
||||
* Added runnable code examples in this package's "examples/" directory.
|
||||
([#22][])
|
||||
|
||||
* Improved optional argument handling in public methods to treat Express
|
||||
`locals` function objects as `options` and not `callback` params to the method
|
||||
being invoked. ([#27][])
|
||||
|
||||
|
||||
[#20]: https://github.com/ericf/express-handlebars/issues/20
|
||||
[#21]: https://github.com/ericf/express-handlebars/issues/21
|
||||
[#22]: https://github.com/ericf/express-handlebars/issues/22
|
||||
[#27]: https://github.com/ericf/express-handlebars/issues/27
|
||||
|
||||
|
||||
0.4.1 (2013-04-06)
|
||||
------------------
|
||||
|
||||
* Updated `async` dependency to the latest stable minor version: "~0.2".
|
||||
|
||||
|
||||
0.4.0 (2013-03-24)
|
||||
------------------
|
||||
|
||||
* __[!]__ Removed the following "get" -> "load" aliases which kept in v0.2.0 for
|
||||
back-compat:
|
||||
|
||||
* `getPartials()` -> `loadPartials()`
|
||||
* `getTemplate()` -> `loadTemplate()`
|
||||
|
||||
This is the future version where these aliases have been removed.
|
||||
|
||||
* __[!]__ Renamed `lib/express3-handlebars.js` -> `lib/express-handlebars.js`.
|
||||
|
||||
* Exposed `getHandlebarsSemver()` function as a static property on the
|
||||
`ExpressHandlebars` constructor.
|
||||
|
||||
* Rearranged module exports by moving the engine factory function to `index.js`,
|
||||
making the `lib/express3-handlebars.js` module only responsible for exporting
|
||||
the `ExpressHandlebars` constructor.
|
||||
|
||||
|
||||
0.3.3 (2013-03-22)
|
||||
------------------
|
||||
|
||||
* Updated internal `_resolveLayoutPath()` method to take the full
|
||||
`options`/locals objects which the view is rendered with. This makes it easier
|
||||
to override. ([#14][])
|
||||
|
||||
|
||||
[#14]: https://github.com/ericf/express-handlebars/issues/14
|
||||
|
||||
|
||||
0.3.2 (2013-02-20)
|
||||
------------------
|
||||
|
||||
* Transfered ownership and copyright to Yahoo! Inc. This software is still free
|
||||
to use, and is now licensed under the Yahoo! Inc. BSD license.
|
||||
|
||||
|
||||
0.3.1 (2013-02-18)
|
||||
------------------
|
||||
|
||||
* Updated README with info about `options.helpers` for `render()` and
|
||||
`renderView()` docs. ([#7][])
|
||||
|
||||
|
||||
[#7]: https://github.com/ericf/express-handlebars/issues/7
|
||||
|
||||
|
||||
0.3.0 (2013-02-18)
|
||||
------------------
|
||||
|
||||
* Added support for render-level helpers, via `options.helpers`, to the
|
||||
`render()` and `renderView()` methods. Handlebars' `registerHelper()` function
|
||||
now works as expected and does not have to be called before the
|
||||
`ExpressHandlebars` instance is created. Helpers are now merged from:
|
||||
`handlebars.helpers` (global), `helpers` (instance), and `options.helpers`
|
||||
(render-level) before a template is rendered; this provides flexibility at
|
||||
all levels. ([#3][], [#11][])
|
||||
|
||||
* Added `handlebarsVersion` property which is the version number of `handlebars`
|
||||
as a semver. This is used internally to branch on certain operations which
|
||||
differ between Handlebars releases.
|
||||
|
||||
|
||||
[#3]: https://github.com/ericf/express-handlebars/issues/3
|
||||
[#11]: https://github.com/ericf/express-handlebars/issues/11
|
||||
|
||||
|
||||
0.2.3 (2013-02-13)
|
||||
------------------
|
||||
|
||||
* Fixed issue with naming nested partials when using the latest version of
|
||||
Handlebars (1.0.rc.2). Previous versions require a hack to replace "/"s with
|
||||
"."s in partial names, and the latest version of Handlebars fixes that bug.
|
||||
This hack will only be applied to old versions of Handlebars. ([#9][])
|
||||
|
||||
|
||||
[#9]: https://github.com/ericf/express-handlebars/issues/9
|
||||
|
||||
|
||||
0.2.2 (2013-02-04)
|
||||
------------------
|
||||
|
||||
* Updated README with the public method renames which happened v0.2.0.
|
||||
|
||||
|
||||
0.2.1 (2013-02-04)
|
||||
------------------
|
||||
|
||||
* `extname`, `layoutsDir`, and `partialsDir` property values will now reference
|
||||
the values on the prototype unless an `ExpressHandlebars` instance is
|
||||
constructed with config values for these properties.
|
||||
|
||||
* Improved clarity of method implementations, and exposed more override "hooks"
|
||||
via new private methods: `_getPartialName()`, `_renderTemplate()`, and
|
||||
`_resolveLayoutPath()`.
|
||||
|
||||
|
||||
0.2.0 (2013-02-01)
|
||||
------------------
|
||||
|
||||
* __[!]__ Renamed methods prefixed with "get" to "load" for clarity:
|
||||
|
||||
* `getPartials()` -> `loadPartials()`
|
||||
* `getTemplate()` -> `loadTemplate()`
|
||||
|
||||
Aliases for these methods have been created to maintain back-compat, but the
|
||||
old method names are now deprecated will be removed in the future. ([#5][])
|
||||
|
||||
* All paths are resolved before checking in or adding to caches. ([#1][])
|
||||
|
||||
* Force `{precompiled: false}` option within `render()` and `renderView()`
|
||||
methods to prevent trying to render with precompiled templates. ([#2][])
|
||||
|
||||
|
||||
[#1]: https://github.com/ericf/express-handlebars/issues/1
|
||||
[#2]: https://github.com/ericf/express-handlebars/issues/2
|
||||
[#5]: https://github.com/ericf/express-handlebars/issues/5
|
||||
|
||||
|
||||
0.1.2 (2013-01-10)
|
||||
------------------
|
||||
|
||||
* Tweaked formatting of README documentation.
|
||||
|
||||
|
||||
0.1.1 (2013-01-10)
|
||||
------------------
|
||||
|
||||
* Added README documentation.
|
||||
|
||||
|
||||
0.1.0 (2013-01-07)
|
||||
------------------
|
||||
|
||||
* Initial release.
|
||||
31
resources/app/node_modules/express-handlebars/LICENSE
generated
vendored
Normal file
31
resources/app/node_modules/express-handlebars/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
Copyright (c) 2014, Yahoo Inc. All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
with or without modification, are permitted provided that the following
|
||||
conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above
|
||||
copyright notice, this list of conditions and the
|
||||
following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the
|
||||
following disclaimer in the documentation and/or other
|
||||
materials provided with the distribution.
|
||||
|
||||
* Neither the name of Yahoo Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior
|
||||
written permission of Yahoo Inc.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
337
resources/app/node_modules/express-handlebars/dist/express-handlebars.js
generated
vendored
Normal file
337
resources/app/node_modules/express-handlebars/dist/express-handlebars.js
generated
vendored
Normal file
@@ -0,0 +1,337 @@
|
||||
"use strict";
|
||||
/*
|
||||
* Copyright (c) 2015, Yahoo Inc. All rights reserved.
|
||||
* Copyrights licensed under the New BSD License.
|
||||
* See the accompanying LICENSE file for terms.
|
||||
*/
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const Handlebars = require("handlebars");
|
||||
const fs = require("graceful-fs");
|
||||
const path = require("node:path");
|
||||
const node_util_1 = require("node:util");
|
||||
const glob_1 = require("glob");
|
||||
const readFile = (0, node_util_1.promisify)(fs.readFile);
|
||||
// -----------------------------------------------------------------------------
|
||||
const defaultConfig = {
|
||||
handlebars: Handlebars,
|
||||
extname: ".handlebars",
|
||||
encoding: "utf8",
|
||||
layoutsDir: undefined,
|
||||
partialsDir: undefined,
|
||||
defaultLayout: "main",
|
||||
helpers: undefined,
|
||||
compilerOptions: undefined,
|
||||
runtimeOptions: undefined,
|
||||
};
|
||||
class ExpressHandlebars {
|
||||
constructor(config = {}) {
|
||||
// Config properties with defaults.
|
||||
Object.assign(this, defaultConfig, config);
|
||||
// save given config to override other settings.
|
||||
this.config = config;
|
||||
// Express view engine integration point.
|
||||
this.engine = this.renderView.bind(this);
|
||||
// Normalize `extname`.
|
||||
if (this.extname.charAt(0) !== ".") {
|
||||
this.extname = "." + this.extname;
|
||||
}
|
||||
// Internal caches of compiled and precompiled templates.
|
||||
this.compiled = {};
|
||||
this.precompiled = {};
|
||||
// Private internal file system cache.
|
||||
this._fsCache = {};
|
||||
}
|
||||
getPartials(options = {}) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (typeof this.partialsDir === "undefined") {
|
||||
return {};
|
||||
}
|
||||
const partialsDirs = Array.isArray(this.partialsDir) ? this.partialsDir : [this.partialsDir];
|
||||
const dirs = yield Promise.all(partialsDirs.map((dir) => __awaiter(this, void 0, void 0, function* () {
|
||||
let dirPath;
|
||||
let dirTemplates;
|
||||
let dirNamespace;
|
||||
let dirRename;
|
||||
// Support `partialsDir` collection with object entries that contain a
|
||||
// templates promise and a namespace.
|
||||
if (typeof dir === "string") {
|
||||
dirPath = dir;
|
||||
}
|
||||
else if (typeof dir === "object") {
|
||||
dirTemplates = dir.templates;
|
||||
dirNamespace = dir.namespace;
|
||||
dirRename = dir.rename;
|
||||
dirPath = dir.dir;
|
||||
}
|
||||
// We must have some path to templates, or templates themselves.
|
||||
if (!dirPath && !dirTemplates) {
|
||||
throw new Error("A partials dir must be a string or config object");
|
||||
}
|
||||
const templates = dirTemplates || (yield this.getTemplates(dirPath, options));
|
||||
return {
|
||||
templates: templates,
|
||||
namespace: dirNamespace,
|
||||
rename: dirRename,
|
||||
};
|
||||
})));
|
||||
const partials = {};
|
||||
for (const dir of dirs) {
|
||||
const { templates, namespace, rename } = dir;
|
||||
const filePaths = Object.keys(templates);
|
||||
const getTemplateNameFn = typeof rename === "function"
|
||||
? rename
|
||||
: this._getTemplateName.bind(this);
|
||||
for (const filePath of filePaths) {
|
||||
const partialName = getTemplateNameFn(filePath, namespace);
|
||||
partials[partialName] = templates[filePath];
|
||||
}
|
||||
}
|
||||
return partials;
|
||||
});
|
||||
}
|
||||
getTemplate(filePath, options = {}) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
filePath = path.resolve(filePath);
|
||||
const encoding = options.encoding || this.encoding;
|
||||
const cache = options.precompiled ? this.precompiled : this.compiled;
|
||||
const template = options.cache && cache[filePath];
|
||||
if (template) {
|
||||
return template;
|
||||
}
|
||||
// Optimistically cache template promise to reduce file system I/O, but
|
||||
// remove from cache if there was a problem.
|
||||
try {
|
||||
cache[filePath] = this._getFile(filePath, { cache: options.cache, encoding })
|
||||
.then((file) => {
|
||||
const compileTemplate = (options.precompiled ? this._precompileTemplate : this._compileTemplate).bind(this);
|
||||
return compileTemplate(file, this.compilerOptions);
|
||||
});
|
||||
return yield cache[filePath];
|
||||
}
|
||||
catch (err) {
|
||||
delete cache[filePath];
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
}
|
||||
getTemplates(dirPath, options = {}) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const cache = options.cache;
|
||||
const filePaths = yield this._getDir(dirPath, { cache });
|
||||
const templates = yield Promise.all(filePaths.map(filePath => {
|
||||
return this.getTemplate(path.join(dirPath, filePath), options);
|
||||
}));
|
||||
const hash = {};
|
||||
for (let i = 0; i < filePaths.length; i++) {
|
||||
hash[filePaths[i]] = templates[i];
|
||||
}
|
||||
return hash;
|
||||
});
|
||||
}
|
||||
render(filePath, context = {}, options = {}) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const encoding = options.encoding || this.encoding;
|
||||
const [template, partials] = yield Promise.all([
|
||||
this.getTemplate(filePath, { cache: options.cache, encoding }),
|
||||
(options.partials || this.getPartials({ cache: options.cache, encoding })),
|
||||
]);
|
||||
const helpers = Object.assign(Object.assign({}, this.helpers), options.helpers);
|
||||
const runtimeOptions = Object.assign(Object.assign({}, this.runtimeOptions), options.runtimeOptions);
|
||||
// Add ExpressHandlebars metadata to the data channel so that it's
|
||||
// accessible within the templates and helpers, namespaced under:
|
||||
// `@exphbs.*`
|
||||
const data = Object.assign(Object.assign({}, options.data), { exphbs: Object.assign(Object.assign({}, options), { filePath,
|
||||
helpers,
|
||||
partials,
|
||||
runtimeOptions }) });
|
||||
const html = this._renderTemplate(template, context, Object.assign(Object.assign({}, runtimeOptions), { data,
|
||||
helpers,
|
||||
partials }));
|
||||
return html;
|
||||
});
|
||||
}
|
||||
renderView(viewPath, options = {}, callback = null) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (typeof options === "function") {
|
||||
callback = options;
|
||||
options = {};
|
||||
}
|
||||
const context = options;
|
||||
let promise = null;
|
||||
if (!callback) {
|
||||
promise = new Promise((resolve, reject) => {
|
||||
callback = (err, value) => { err !== null ? reject(err) : resolve(value); };
|
||||
});
|
||||
}
|
||||
// Express provides `settings.views` which is the path to the views dir that
|
||||
// the developer set on the Express app. When this value exists, it's used
|
||||
// to compute the view's name. Layouts and Partials directories are relative
|
||||
// to `settings.view` path
|
||||
let view;
|
||||
const views = options.settings && options.settings.views;
|
||||
const viewsPath = this._resolveViewsPath(views, viewPath);
|
||||
if (viewsPath) {
|
||||
view = this._getTemplateName(path.relative(viewsPath, viewPath));
|
||||
this.partialsDir = this.config.partialsDir || path.join(viewsPath, "partials/");
|
||||
this.layoutsDir = this.config.layoutsDir || path.join(viewsPath, "layouts/");
|
||||
}
|
||||
const encoding = options.encoding || this.encoding;
|
||||
// Merge render-level and instance-level helpers together.
|
||||
const helpers = Object.assign(Object.assign({}, this.helpers), options.helpers);
|
||||
// Merge render-level and instance-level partials together.
|
||||
const partials = Object.assign(Object.assign({}, yield this.getPartials({ cache: options.cache, encoding })), (options.partials || {}));
|
||||
// Pluck-out ExpressHandlebars-specific options and Handlebars-specific
|
||||
// rendering options.
|
||||
const renderOptions = {
|
||||
cache: options.cache,
|
||||
encoding,
|
||||
view,
|
||||
layout: "layout" in options ? options.layout : this.defaultLayout,
|
||||
data: options.data,
|
||||
helpers,
|
||||
partials,
|
||||
runtimeOptions: options.runtimeOptions,
|
||||
};
|
||||
try {
|
||||
let html = yield this.render(viewPath, context, renderOptions);
|
||||
const layoutPath = this._resolveLayoutPath(renderOptions.layout);
|
||||
if (layoutPath) {
|
||||
html = yield this.render(layoutPath, Object.assign(Object.assign({}, context), { body: html }), Object.assign(Object.assign({}, renderOptions), { layout: undefined }));
|
||||
}
|
||||
callback(null, html);
|
||||
}
|
||||
catch (err) {
|
||||
callback(err);
|
||||
}
|
||||
return promise;
|
||||
});
|
||||
}
|
||||
resetCache(filePathsOrFilter) {
|
||||
let filePaths = [];
|
||||
if (typeof filePathsOrFilter === "undefined") {
|
||||
filePaths = Object.keys(this._fsCache);
|
||||
}
|
||||
else if (typeof filePathsOrFilter === "string") {
|
||||
filePaths = [filePathsOrFilter];
|
||||
}
|
||||
else if (typeof filePathsOrFilter === "function") {
|
||||
filePaths = Object.keys(this._fsCache).filter(filePathsOrFilter);
|
||||
}
|
||||
else if (Array.isArray(filePathsOrFilter)) {
|
||||
filePaths = filePathsOrFilter;
|
||||
}
|
||||
for (const filePath of filePaths) {
|
||||
delete this._fsCache[filePath];
|
||||
}
|
||||
}
|
||||
// -- Protected Hooks ----------------------------------------------------------
|
||||
_compileTemplate(template, options = {}) {
|
||||
return this.handlebars.compile(template.trim(), options);
|
||||
}
|
||||
_precompileTemplate(template, options = {}) {
|
||||
return this.handlebars.precompile(template.trim(), options);
|
||||
}
|
||||
_renderTemplate(template, context = {}, options = {}) {
|
||||
return template(context, options).trim();
|
||||
}
|
||||
// -- Private ------------------------------------------------------------------
|
||||
_getDir(dirPath, options = {}) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
dirPath = path.resolve(dirPath);
|
||||
const cache = this._fsCache;
|
||||
let dir = options.cache && cache[dirPath];
|
||||
if (dir) {
|
||||
return [...yield dir];
|
||||
}
|
||||
const pattern = "**/*" + this.extname;
|
||||
// Optimistically cache dir promise to reduce file system I/O, but remove
|
||||
// from cache if there was a problem.
|
||||
try {
|
||||
dir = cache[dirPath] = (0, glob_1.glob)(pattern, {
|
||||
cwd: dirPath,
|
||||
follow: true,
|
||||
posix: true,
|
||||
});
|
||||
// @ts-expect-error FIXME: not sure how to throw error in glob for test coverage
|
||||
if (options._throwTestError) {
|
||||
throw new Error("test");
|
||||
}
|
||||
return [...yield dir];
|
||||
}
|
||||
catch (err) {
|
||||
delete cache[dirPath];
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
}
|
||||
_getFile(filePath, options = {}) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
filePath = path.resolve(filePath);
|
||||
const cache = this._fsCache;
|
||||
const encoding = options.encoding || this.encoding;
|
||||
const file = options.cache && cache[filePath];
|
||||
if (file) {
|
||||
return file;
|
||||
}
|
||||
// Optimistically cache file promise to reduce file system I/O, but remove
|
||||
// from cache if there was a problem.
|
||||
try {
|
||||
cache[filePath] = readFile(filePath, { encoding: encoding || "utf8" });
|
||||
return yield cache[filePath];
|
||||
}
|
||||
catch (err) {
|
||||
delete cache[filePath];
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
}
|
||||
_getTemplateName(filePath, namespace = null) {
|
||||
let name = filePath;
|
||||
if (name.endsWith(this.extname)) {
|
||||
name = name.substring(0, name.length - this.extname.length);
|
||||
}
|
||||
if (namespace) {
|
||||
name = namespace + "/" + name;
|
||||
}
|
||||
return name;
|
||||
}
|
||||
_resolveViewsPath(views, file) {
|
||||
if (!Array.isArray(views)) {
|
||||
return views;
|
||||
}
|
||||
let lastDir = path.resolve(file);
|
||||
let dir = path.dirname(lastDir);
|
||||
const absoluteViews = views.map(v => path.resolve(v));
|
||||
// find the closest parent
|
||||
while (dir !== lastDir) {
|
||||
const index = absoluteViews.indexOf(dir);
|
||||
if (index >= 0) {
|
||||
return views[index];
|
||||
}
|
||||
lastDir = dir;
|
||||
dir = path.dirname(lastDir);
|
||||
}
|
||||
// cannot resolve view
|
||||
return null;
|
||||
}
|
||||
_resolveLayoutPath(layoutPath) {
|
||||
if (!layoutPath) {
|
||||
return null;
|
||||
}
|
||||
if (!path.extname(layoutPath)) {
|
||||
layoutPath += this.extname;
|
||||
}
|
||||
return path.resolve(this.layoutsDir || "", layoutPath);
|
||||
}
|
||||
}
|
||||
exports.default = ExpressHandlebars;
|
||||
//# sourceMappingURL=express-handlebars.js.map
|
||||
1
resources/app/node_modules/express-handlebars/dist/express-handlebars.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/dist/express-handlebars.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
19
resources/app/node_modules/express-handlebars/dist/index.js
generated
vendored
Normal file
19
resources/app/node_modules/express-handlebars/dist/index.js
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
"use strict";
|
||||
/*
|
||||
* Copyright (c) 2014, Yahoo Inc. All rights reserved.
|
||||
* Copyrights licensed under the New BSD License.
|
||||
* See the accompanying LICENSE file for terms.
|
||||
*/
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.engine = exports.create = exports.ExpressHandlebars = void 0;
|
||||
const express_handlebars_1 = require("./express-handlebars");
|
||||
exports.ExpressHandlebars = express_handlebars_1.default;
|
||||
function create(config = {}) {
|
||||
return new express_handlebars_1.default(config);
|
||||
}
|
||||
exports.create = create;
|
||||
function engine(config = {}) {
|
||||
return create(config).engine;
|
||||
}
|
||||
exports.engine = engine;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
resources/app/node_modules/express-handlebars/dist/index.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/dist/index.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6DAAqD;AAM5C,4BANF,4BAAiB,CAME;AAE1B,SAAgB,MAAM,CAAE,SAAwB,EAAE;IACjD,OAAO,IAAI,4BAAiB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAFD,wBAEC;AAED,SAAgB,MAAM,CAAE,SAAwB,EAAE;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AAC9B,CAAC;AAFD,wBAEC"}
|
||||
27
resources/app/node_modules/express-handlebars/jest.config.js
generated
vendored
Normal file
27
resources/app/node_modules/express-handlebars/jest.config.js
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
module.exports = {
|
||||
preset: "ts-jest",
|
||||
testEnvironment: "node",
|
||||
restoreMocks: true,
|
||||
clearMocks: true,
|
||||
collectCoverageFrom: [
|
||||
"lib/**/*.ts",
|
||||
],
|
||||
coverageDirectory: "coverage",
|
||||
coverageThreshold: {
|
||||
global: {
|
||||
branches: 100,
|
||||
functions: 100,
|
||||
lines: 100,
|
||||
statements: 100,
|
||||
},
|
||||
},
|
||||
testRegex: /\.test\.tsx?/.source,
|
||||
transform: {
|
||||
[/\.test\.tsx?/.source]: [
|
||||
"ts-jest", {
|
||||
diagnostics: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
moduleFileExtensions: ["js", "json", "jsx", "d.ts", "ts", "tsx", "node"],
|
||||
};
|
||||
428
resources/app/node_modules/express-handlebars/lib/express-handlebars.ts
generated
vendored
Normal file
428
resources/app/node_modules/express-handlebars/lib/express-handlebars.ts
generated
vendored
Normal file
@@ -0,0 +1,428 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Yahoo Inc. All rights reserved.
|
||||
* Copyrights licensed under the New BSD License.
|
||||
* See the accompanying LICENSE file for terms.
|
||||
*/
|
||||
|
||||
import * as Handlebars from "handlebars";
|
||||
import * as fs from "graceful-fs";
|
||||
import * as path from "node:path";
|
||||
import { promisify } from "node:util";
|
||||
import { glob } from "glob";
|
||||
import type {
|
||||
UnknownObject,
|
||||
HelperDelegateObject,
|
||||
ConfigOptions,
|
||||
Engine,
|
||||
TemplateSpecificationObject,
|
||||
TemplateDelegateObject,
|
||||
FsCache,
|
||||
PartialTemplateOptions,
|
||||
PartialsDirObject,
|
||||
RenderOptions,
|
||||
RenderViewOptions,
|
||||
RenderCallback,
|
||||
HandlebarsImport,
|
||||
CompiledCache,
|
||||
PrecompiledCache,
|
||||
RenameFunction,
|
||||
} from "../types";
|
||||
|
||||
const readFile = promisify(fs.readFile);
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
const defaultConfig: ConfigOptions = {
|
||||
handlebars: Handlebars,
|
||||
extname: ".handlebars",
|
||||
encoding: "utf8",
|
||||
layoutsDir: undefined, // Default layouts directory is relative to `express settings.view` + `layouts/`
|
||||
partialsDir: undefined, // Default partials directory is relative to `express settings.view` + `partials/`
|
||||
defaultLayout: "main",
|
||||
helpers: undefined,
|
||||
compilerOptions: undefined,
|
||||
runtimeOptions: undefined,
|
||||
};
|
||||
|
||||
export default class ExpressHandlebars {
|
||||
config: ConfigOptions;
|
||||
engine: Engine;
|
||||
encoding: BufferEncoding;
|
||||
layoutsDir: string;
|
||||
extname: string;
|
||||
compiled: CompiledCache;
|
||||
precompiled: PrecompiledCache;
|
||||
_fsCache: FsCache;
|
||||
partialsDir: string|PartialsDirObject|(string|PartialsDirObject)[];
|
||||
compilerOptions: CompileOptions;
|
||||
runtimeOptions: RuntimeOptions;
|
||||
helpers: HelperDelegateObject;
|
||||
defaultLayout: string;
|
||||
handlebars: HandlebarsImport;
|
||||
|
||||
constructor (config: ConfigOptions = {}) {
|
||||
// Config properties with defaults.
|
||||
Object.assign(this, defaultConfig, config);
|
||||
|
||||
// save given config to override other settings.
|
||||
this.config = config;
|
||||
|
||||
// Express view engine integration point.
|
||||
this.engine = this.renderView.bind(this);
|
||||
|
||||
// Normalize `extname`.
|
||||
if (this.extname.charAt(0) !== ".") {
|
||||
this.extname = "." + this.extname;
|
||||
}
|
||||
|
||||
// Internal caches of compiled and precompiled templates.
|
||||
this.compiled = {};
|
||||
this.precompiled = {};
|
||||
|
||||
// Private internal file system cache.
|
||||
this._fsCache = {};
|
||||
}
|
||||
|
||||
async getPartials (options: PartialTemplateOptions = {}): Promise<TemplateSpecificationObject|TemplateDelegateObject> {
|
||||
if (typeof this.partialsDir === "undefined") {
|
||||
return {};
|
||||
}
|
||||
const partialsDirs = Array.isArray(this.partialsDir) ? this.partialsDir : [this.partialsDir];
|
||||
|
||||
const dirs = await Promise.all(partialsDirs.map(async dir => {
|
||||
let dirPath: string;
|
||||
let dirTemplates: TemplateDelegateObject;
|
||||
let dirNamespace: string;
|
||||
let dirRename: RenameFunction;
|
||||
|
||||
// Support `partialsDir` collection with object entries that contain a
|
||||
// templates promise and a namespace.
|
||||
if (typeof dir === "string") {
|
||||
dirPath = dir;
|
||||
} else if (typeof dir === "object") {
|
||||
dirTemplates = dir.templates;
|
||||
dirNamespace = dir.namespace;
|
||||
dirRename = dir.rename;
|
||||
dirPath = dir.dir;
|
||||
}
|
||||
|
||||
// We must have some path to templates, or templates themselves.
|
||||
if (!dirPath && !dirTemplates) {
|
||||
throw new Error("A partials dir must be a string or config object");
|
||||
}
|
||||
|
||||
const templates: HandlebarsTemplateDelegate|TemplateSpecification = dirTemplates || await this.getTemplates(dirPath, options);
|
||||
|
||||
return {
|
||||
templates: templates as HandlebarsTemplateDelegate|TemplateSpecification,
|
||||
namespace: dirNamespace,
|
||||
rename: dirRename,
|
||||
};
|
||||
}));
|
||||
|
||||
const partials: TemplateDelegateObject|TemplateSpecificationObject = {};
|
||||
|
||||
for (const dir of dirs) {
|
||||
const { templates, namespace, rename } = dir;
|
||||
const filePaths = Object.keys(templates);
|
||||
|
||||
const getTemplateNameFn = typeof rename === "function"
|
||||
? rename
|
||||
: this._getTemplateName.bind(this);
|
||||
|
||||
for (const filePath of filePaths) {
|
||||
const partialName = getTemplateNameFn(filePath, namespace);
|
||||
partials[partialName] = templates[filePath];
|
||||
}
|
||||
}
|
||||
|
||||
return partials;
|
||||
}
|
||||
|
||||
async getTemplate (filePath: string, options: PartialTemplateOptions = {}): Promise<HandlebarsTemplateDelegate|TemplateSpecification> {
|
||||
filePath = path.resolve(filePath);
|
||||
|
||||
const encoding = options.encoding || this.encoding;
|
||||
const cache: PrecompiledCache|CompiledCache = options.precompiled ? this.precompiled : this.compiled;
|
||||
const template: Promise<HandlebarsTemplateDelegate|TemplateSpecification> = options.cache && cache[filePath];
|
||||
|
||||
if (template) {
|
||||
return template;
|
||||
}
|
||||
|
||||
// Optimistically cache template promise to reduce file system I/O, but
|
||||
// remove from cache if there was a problem.
|
||||
try {
|
||||
cache[filePath] = this._getFile(filePath, { cache: options.cache, encoding })
|
||||
.then((file: string) => {
|
||||
const compileTemplate: (file: string, options: RuntimeOptions) => TemplateSpecification|HandlebarsTemplateDelegate = (options.precompiled ? this._precompileTemplate : this._compileTemplate).bind(this);
|
||||
return compileTemplate(file, this.compilerOptions);
|
||||
});
|
||||
return await cache[filePath];
|
||||
} catch (err) {
|
||||
delete cache[filePath];
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async getTemplates (dirPath: string, options: PartialTemplateOptions = {}): Promise<HandlebarsTemplateDelegate|TemplateSpecification> {
|
||||
const cache = options.cache;
|
||||
|
||||
const filePaths = await this._getDir(dirPath, { cache });
|
||||
const templates = await Promise.all(filePaths.map(filePath => {
|
||||
return this.getTemplate(path.join(dirPath, filePath), options);
|
||||
}));
|
||||
|
||||
const hash = {};
|
||||
for (let i = 0; i < filePaths.length; i++) {
|
||||
hash[filePaths[i]] = templates[i];
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
async render (filePath: string, context: UnknownObject = {}, options: RenderOptions = {}): Promise<string> {
|
||||
const encoding = options.encoding || this.encoding;
|
||||
const [template, partials] = await Promise.all([
|
||||
this.getTemplate(filePath, { cache: options.cache, encoding }) as Promise<HandlebarsTemplateDelegate>,
|
||||
(options.partials || this.getPartials({ cache: options.cache, encoding })) as Promise<TemplateDelegateObject>,
|
||||
]);
|
||||
const helpers: HelperDelegateObject = { ...this.helpers, ...options.helpers };
|
||||
const runtimeOptions = { ...this.runtimeOptions, ...options.runtimeOptions };
|
||||
|
||||
// Add ExpressHandlebars metadata to the data channel so that it's
|
||||
// accessible within the templates and helpers, namespaced under:
|
||||
// `@exphbs.*`
|
||||
const data = {
|
||||
...options.data,
|
||||
exphbs: {
|
||||
...options,
|
||||
filePath,
|
||||
helpers,
|
||||
partials,
|
||||
runtimeOptions,
|
||||
},
|
||||
};
|
||||
|
||||
const html = this._renderTemplate(template, context, {
|
||||
...runtimeOptions,
|
||||
data,
|
||||
helpers,
|
||||
partials,
|
||||
});
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
async renderView (viewPath: string): Promise<string>;
|
||||
async renderView (viewPath: string, options: RenderViewOptions): Promise<string>;
|
||||
async renderView (viewPath: string, callback: RenderCallback): Promise<null>;
|
||||
async renderView (viewPath: string, options: RenderViewOptions, callback: RenderCallback): Promise<null>;
|
||||
async renderView (viewPath: string, options: RenderViewOptions|RenderCallback = {}, callback: RenderCallback|null = null): Promise<string|null> {
|
||||
if (typeof options === "function") {
|
||||
callback = options;
|
||||
options = {};
|
||||
}
|
||||
|
||||
const context = options as UnknownObject;
|
||||
|
||||
let promise: Promise<string>|null = null;
|
||||
if (!callback) {
|
||||
promise = new Promise((resolve, reject) => {
|
||||
callback = (err, value) => { err !== null ? reject(err) : resolve(value); };
|
||||
});
|
||||
}
|
||||
|
||||
// Express provides `settings.views` which is the path to the views dir that
|
||||
// the developer set on the Express app. When this value exists, it's used
|
||||
// to compute the view's name. Layouts and Partials directories are relative
|
||||
// to `settings.view` path
|
||||
let view: string;
|
||||
const views = options.settings && options.settings.views;
|
||||
const viewsPath = this._resolveViewsPath(views, viewPath);
|
||||
if (viewsPath) {
|
||||
view = this._getTemplateName(path.relative(viewsPath, viewPath));
|
||||
this.partialsDir = this.config.partialsDir || path.join(viewsPath, "partials/");
|
||||
this.layoutsDir = this.config.layoutsDir || path.join(viewsPath, "layouts/");
|
||||
}
|
||||
|
||||
const encoding = options.encoding || this.encoding;
|
||||
|
||||
// Merge render-level and instance-level helpers together.
|
||||
const helpers = { ...this.helpers, ...options.helpers };
|
||||
|
||||
// Merge render-level and instance-level partials together.
|
||||
const partials: TemplateDelegateObject = {
|
||||
...await this.getPartials({ cache: options.cache, encoding }) as TemplateDelegateObject,
|
||||
...(options.partials || {}),
|
||||
};
|
||||
|
||||
// Pluck-out ExpressHandlebars-specific options and Handlebars-specific
|
||||
// rendering options.
|
||||
const renderOptions = {
|
||||
cache: options.cache,
|
||||
encoding,
|
||||
view,
|
||||
layout: "layout" in options ? options.layout : this.defaultLayout,
|
||||
data: options.data,
|
||||
helpers,
|
||||
partials,
|
||||
runtimeOptions: options.runtimeOptions,
|
||||
};
|
||||
|
||||
try {
|
||||
let html = await this.render(viewPath, context, renderOptions);
|
||||
const layoutPath = this._resolveLayoutPath(renderOptions.layout);
|
||||
|
||||
if (layoutPath) {
|
||||
html = await this.render(
|
||||
layoutPath,
|
||||
{ ...context, body: html },
|
||||
{ ...renderOptions, layout: undefined },
|
||||
);
|
||||
}
|
||||
callback(null, html);
|
||||
} catch (err) {
|
||||
callback(err);
|
||||
}
|
||||
|
||||
return promise;
|
||||
}
|
||||
|
||||
resetCache (filePathsOrFilter?: string | string[] | ((template: string) => boolean)) {
|
||||
let filePaths: string[] = [];
|
||||
|
||||
if (typeof filePathsOrFilter === "undefined") {
|
||||
filePaths = Object.keys(this._fsCache);
|
||||
} else if (typeof filePathsOrFilter === "string") {
|
||||
filePaths = [filePathsOrFilter];
|
||||
} else if (typeof filePathsOrFilter === "function") {
|
||||
filePaths = Object.keys(this._fsCache).filter(filePathsOrFilter);
|
||||
} else if (Array.isArray(filePathsOrFilter)) {
|
||||
filePaths = filePathsOrFilter;
|
||||
}
|
||||
|
||||
for (const filePath of filePaths) {
|
||||
delete this._fsCache[filePath];
|
||||
}
|
||||
}
|
||||
|
||||
// -- Protected Hooks ----------------------------------------------------------
|
||||
|
||||
protected _compileTemplate (template: string, options: RuntimeOptions = {}): HandlebarsTemplateDelegate {
|
||||
return this.handlebars.compile(template.trim(), options);
|
||||
}
|
||||
|
||||
protected _precompileTemplate (template: string, options: RuntimeOptions = {}): TemplateSpecification {
|
||||
return this.handlebars.precompile(template.trim(), options);
|
||||
}
|
||||
|
||||
protected _renderTemplate (template: HandlebarsTemplateDelegate, context: UnknownObject = {}, options: RuntimeOptions = {}): string {
|
||||
return template(context, options).trim();
|
||||
}
|
||||
|
||||
// -- Private ------------------------------------------------------------------
|
||||
|
||||
private async _getDir (dirPath: string, options: PartialTemplateOptions = {}): Promise<string[]> {
|
||||
dirPath = path.resolve(dirPath);
|
||||
|
||||
const cache = this._fsCache;
|
||||
let dir = options.cache && (cache[dirPath] as Promise<string[]>);
|
||||
|
||||
if (dir) {
|
||||
return [...await dir];
|
||||
}
|
||||
|
||||
const pattern = "**/*" + this.extname;
|
||||
|
||||
// Optimistically cache dir promise to reduce file system I/O, but remove
|
||||
// from cache if there was a problem.
|
||||
|
||||
try {
|
||||
dir = cache[dirPath] = glob(pattern, {
|
||||
cwd: dirPath,
|
||||
follow: true,
|
||||
posix: true,
|
||||
});
|
||||
// @ts-expect-error FIXME: not sure how to throw error in glob for test coverage
|
||||
if (options._throwTestError) {
|
||||
throw new Error("test");
|
||||
}
|
||||
|
||||
return [...await dir];
|
||||
} catch (err) {
|
||||
delete cache[dirPath];
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
private async _getFile (filePath: string, options: PartialTemplateOptions = {}): Promise<string> {
|
||||
filePath = path.resolve(filePath);
|
||||
|
||||
const cache = this._fsCache;
|
||||
const encoding = options.encoding || this.encoding;
|
||||
const file = options.cache && (cache[filePath] as Promise<string>);
|
||||
|
||||
if (file) {
|
||||
return file;
|
||||
}
|
||||
|
||||
// Optimistically cache file promise to reduce file system I/O, but remove
|
||||
// from cache if there was a problem.
|
||||
try {
|
||||
cache[filePath] = readFile(filePath, { encoding: encoding || "utf8" });
|
||||
return await cache[filePath] as string;
|
||||
} catch (err) {
|
||||
delete cache[filePath];
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
private _getTemplateName (filePath: string, namespace: string = null): string {
|
||||
let name = filePath;
|
||||
|
||||
if (name.endsWith(this.extname)) {
|
||||
name = name.substring(0, name.length - this.extname.length);
|
||||
}
|
||||
|
||||
if (namespace) {
|
||||
name = namespace + "/" + name;
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
private _resolveViewsPath (views: string|string[], file: string): string|null {
|
||||
if (!Array.isArray(views)) {
|
||||
return views;
|
||||
}
|
||||
|
||||
let lastDir = path.resolve(file);
|
||||
let dir = path.dirname(lastDir);
|
||||
const absoluteViews = views.map(v => path.resolve(v));
|
||||
|
||||
// find the closest parent
|
||||
while (dir !== lastDir) {
|
||||
const index = absoluteViews.indexOf(dir);
|
||||
if (index >= 0) {
|
||||
return views[index];
|
||||
}
|
||||
lastDir = dir;
|
||||
dir = path.dirname(lastDir);
|
||||
}
|
||||
|
||||
// cannot resolve view
|
||||
return null;
|
||||
}
|
||||
|
||||
private _resolveLayoutPath (layoutPath: string): string|null {
|
||||
if (!layoutPath) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!path.extname(layoutPath)) {
|
||||
layoutPath += this.extname;
|
||||
}
|
||||
|
||||
return path.resolve(this.layoutsDir || "", layoutPath);
|
||||
}
|
||||
}
|
||||
21
resources/app/node_modules/express-handlebars/lib/index.ts
generated
vendored
Normal file
21
resources/app/node_modules/express-handlebars/lib/index.ts
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (c) 2014, Yahoo Inc. All rights reserved.
|
||||
* Copyrights licensed under the New BSD License.
|
||||
* See the accompanying LICENSE file for terms.
|
||||
*/
|
||||
|
||||
import ExpressHandlebars from "./express-handlebars";
|
||||
import type {
|
||||
ConfigOptions,
|
||||
Engine,
|
||||
} from "../types";
|
||||
|
||||
export { ExpressHandlebars };
|
||||
|
||||
export function create (config: ConfigOptions = {}): ExpressHandlebars {
|
||||
return new ExpressHandlebars(config);
|
||||
}
|
||||
|
||||
export function engine (config: ConfigOptions = {}): Engine {
|
||||
return create(config).engine;
|
||||
}
|
||||
15
resources/app/node_modules/express-handlebars/node_modules/glob/LICENSE
generated
vendored
Normal file
15
resources/app/node_modules/express-handlebars/node_modules/glob/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
The ISC License
|
||||
|
||||
Copyright (c) 2009-2023 Isaac Z. Schlueter and Contributors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/glob.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/glob.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"}
|
||||
243
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/glob.js
generated
vendored
Normal file
243
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/glob.js
generated
vendored
Normal file
@@ -0,0 +1,243 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Glob = void 0;
|
||||
const minimatch_1 = require("minimatch");
|
||||
const path_scurry_1 = require("path-scurry");
|
||||
const node_url_1 = require("node:url");
|
||||
const pattern_js_1 = require("./pattern.js");
|
||||
const walker_js_1 = require("./walker.js");
|
||||
// if no process global, just call it linux.
|
||||
// so we default to case-sensitive, / separators
|
||||
const defaultPlatform = typeof process === 'object' &&
|
||||
process &&
|
||||
typeof process.platform === 'string'
|
||||
? process.platform
|
||||
: 'linux';
|
||||
/**
|
||||
* An object that can perform glob pattern traversals.
|
||||
*/
|
||||
class Glob {
|
||||
absolute;
|
||||
cwd;
|
||||
root;
|
||||
dot;
|
||||
dotRelative;
|
||||
follow;
|
||||
ignore;
|
||||
magicalBraces;
|
||||
mark;
|
||||
matchBase;
|
||||
maxDepth;
|
||||
nobrace;
|
||||
nocase;
|
||||
nodir;
|
||||
noext;
|
||||
noglobstar;
|
||||
pattern;
|
||||
platform;
|
||||
realpath;
|
||||
scurry;
|
||||
stat;
|
||||
signal;
|
||||
windowsPathsNoEscape;
|
||||
withFileTypes;
|
||||
/**
|
||||
* The options provided to the constructor.
|
||||
*/
|
||||
opts;
|
||||
/**
|
||||
* An array of parsed immutable {@link Pattern} objects.
|
||||
*/
|
||||
patterns;
|
||||
/**
|
||||
* All options are stored as properties on the `Glob` object.
|
||||
*
|
||||
* See {@link GlobOptions} for full options descriptions.
|
||||
*
|
||||
* Note that a previous `Glob` object can be passed as the
|
||||
* `GlobOptions` to another `Glob` instantiation to re-use settings
|
||||
* and caches with a new pattern.
|
||||
*
|
||||
* Traversal functions can be called multiple times to run the walk
|
||||
* again.
|
||||
*/
|
||||
constructor(pattern, opts) {
|
||||
/* c8 ignore start */
|
||||
if (!opts)
|
||||
throw new TypeError('glob options required');
|
||||
/* c8 ignore stop */
|
||||
this.withFileTypes = !!opts.withFileTypes;
|
||||
this.signal = opts.signal;
|
||||
this.follow = !!opts.follow;
|
||||
this.dot = !!opts.dot;
|
||||
this.dotRelative = !!opts.dotRelative;
|
||||
this.nodir = !!opts.nodir;
|
||||
this.mark = !!opts.mark;
|
||||
if (!opts.cwd) {
|
||||
this.cwd = '';
|
||||
}
|
||||
else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) {
|
||||
opts.cwd = (0, node_url_1.fileURLToPath)(opts.cwd);
|
||||
}
|
||||
this.cwd = opts.cwd || '';
|
||||
this.root = opts.root;
|
||||
this.magicalBraces = !!opts.magicalBraces;
|
||||
this.nobrace = !!opts.nobrace;
|
||||
this.noext = !!opts.noext;
|
||||
this.realpath = !!opts.realpath;
|
||||
this.absolute = opts.absolute;
|
||||
this.noglobstar = !!opts.noglobstar;
|
||||
this.matchBase = !!opts.matchBase;
|
||||
this.maxDepth =
|
||||
typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity;
|
||||
this.stat = !!opts.stat;
|
||||
this.ignore = opts.ignore;
|
||||
if (this.withFileTypes && this.absolute !== undefined) {
|
||||
throw new Error('cannot set absolute and withFileTypes:true');
|
||||
}
|
||||
if (typeof pattern === 'string') {
|
||||
pattern = [pattern];
|
||||
}
|
||||
this.windowsPathsNoEscape =
|
||||
!!opts.windowsPathsNoEscape ||
|
||||
opts.allowWindowsEscape === false;
|
||||
if (this.windowsPathsNoEscape) {
|
||||
pattern = pattern.map(p => p.replace(/\\/g, '/'));
|
||||
}
|
||||
if (this.matchBase) {
|
||||
if (opts.noglobstar) {
|
||||
throw new TypeError('base matching requires globstar');
|
||||
}
|
||||
pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`));
|
||||
}
|
||||
this.pattern = pattern;
|
||||
this.platform = opts.platform || defaultPlatform;
|
||||
this.opts = { ...opts, platform: this.platform };
|
||||
if (opts.scurry) {
|
||||
this.scurry = opts.scurry;
|
||||
if (opts.nocase !== undefined &&
|
||||
opts.nocase !== opts.scurry.nocase) {
|
||||
throw new Error('nocase option contradicts provided scurry option');
|
||||
}
|
||||
}
|
||||
else {
|
||||
const Scurry = opts.platform === 'win32'
|
||||
? path_scurry_1.PathScurryWin32
|
||||
: opts.platform === 'darwin'
|
||||
? path_scurry_1.PathScurryDarwin
|
||||
: opts.platform
|
||||
? path_scurry_1.PathScurryPosix
|
||||
: path_scurry_1.PathScurry;
|
||||
this.scurry = new Scurry(this.cwd, {
|
||||
nocase: opts.nocase,
|
||||
fs: opts.fs,
|
||||
});
|
||||
}
|
||||
this.nocase = this.scurry.nocase;
|
||||
// If you do nocase:true on a case-sensitive file system, then
|
||||
// we need to use regexps instead of strings for non-magic
|
||||
// path portions, because statting `aBc` won't return results
|
||||
// for the file `AbC` for example.
|
||||
const nocaseMagicOnly = this.platform === 'darwin' || this.platform === 'win32';
|
||||
const mmo = {
|
||||
// default nocase based on platform
|
||||
...opts,
|
||||
dot: this.dot,
|
||||
matchBase: this.matchBase,
|
||||
nobrace: this.nobrace,
|
||||
nocase: this.nocase,
|
||||
nocaseMagicOnly,
|
||||
nocomment: true,
|
||||
noext: this.noext,
|
||||
nonegate: true,
|
||||
optimizationLevel: 2,
|
||||
platform: this.platform,
|
||||
windowsPathsNoEscape: this.windowsPathsNoEscape,
|
||||
debug: !!this.opts.debug,
|
||||
};
|
||||
const mms = this.pattern.map(p => new minimatch_1.Minimatch(p, mmo));
|
||||
const [matchSet, globParts] = mms.reduce((set, m) => {
|
||||
set[0].push(...m.set);
|
||||
set[1].push(...m.globParts);
|
||||
return set;
|
||||
}, [[], []]);
|
||||
this.patterns = matchSet.map((set, i) => {
|
||||
const g = globParts[i];
|
||||
/* c8 ignore start */
|
||||
if (!g)
|
||||
throw new Error('invalid pattern object');
|
||||
/* c8 ignore stop */
|
||||
return new pattern_js_1.Pattern(set, g, 0, this.platform);
|
||||
});
|
||||
}
|
||||
async walk() {
|
||||
// Walkers always return array of Path objects, so we just have to
|
||||
// coerce them into the right shape. It will have already called
|
||||
// realpath() if the option was set to do so, so we know that's cached.
|
||||
// start out knowing the cwd, at least
|
||||
return [
|
||||
...(await new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, {
|
||||
...this.opts,
|
||||
maxDepth: this.maxDepth !== Infinity
|
||||
? this.maxDepth + this.scurry.cwd.depth()
|
||||
: Infinity,
|
||||
platform: this.platform,
|
||||
nocase: this.nocase,
|
||||
}).walk()),
|
||||
];
|
||||
}
|
||||
walkSync() {
|
||||
return [
|
||||
...new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, {
|
||||
...this.opts,
|
||||
maxDepth: this.maxDepth !== Infinity
|
||||
? this.maxDepth + this.scurry.cwd.depth()
|
||||
: Infinity,
|
||||
platform: this.platform,
|
||||
nocase: this.nocase,
|
||||
}).walkSync(),
|
||||
];
|
||||
}
|
||||
stream() {
|
||||
return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, {
|
||||
...this.opts,
|
||||
maxDepth: this.maxDepth !== Infinity
|
||||
? this.maxDepth + this.scurry.cwd.depth()
|
||||
: Infinity,
|
||||
platform: this.platform,
|
||||
nocase: this.nocase,
|
||||
}).stream();
|
||||
}
|
||||
streamSync() {
|
||||
return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, {
|
||||
...this.opts,
|
||||
maxDepth: this.maxDepth !== Infinity
|
||||
? this.maxDepth + this.scurry.cwd.depth()
|
||||
: Infinity,
|
||||
platform: this.platform,
|
||||
nocase: this.nocase,
|
||||
}).streamSync();
|
||||
}
|
||||
/**
|
||||
* Default sync iteration function. Returns a Generator that
|
||||
* iterates over the results.
|
||||
*/
|
||||
iterateSync() {
|
||||
return this.streamSync()[Symbol.iterator]();
|
||||
}
|
||||
[Symbol.iterator]() {
|
||||
return this.iterateSync();
|
||||
}
|
||||
/**
|
||||
* Default async iteration function. Returns an AsyncGenerator that
|
||||
* iterates over the results.
|
||||
*/
|
||||
iterate() {
|
||||
return this.stream()[Symbol.asyncIterator]();
|
||||
}
|
||||
[Symbol.asyncIterator]() {
|
||||
return this.iterate();
|
||||
}
|
||||
}
|
||||
exports.Glob = Glob;
|
||||
//# sourceMappingURL=glob.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/glob.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/glob.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/has-magic.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/has-magic.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"has-magic.d.ts","sourceRoot":"","sources":["../../src/has-magic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,YACV,MAAM,GAAG,MAAM,EAAE,YACjB,WAAW,KACnB,OAQF,CAAA"}
|
||||
27
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/has-magic.js
generated
vendored
Normal file
27
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/has-magic.js
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.hasMagic = void 0;
|
||||
const minimatch_1 = require("minimatch");
|
||||
/**
|
||||
* Return true if the patterns provided contain any magic glob characters,
|
||||
* given the options provided.
|
||||
*
|
||||
* Brace expansion is not considered "magic" unless the `magicalBraces` option
|
||||
* is set, as brace expansion just turns one string into an array of strings.
|
||||
* So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and
|
||||
* `'xby'` both do not contain any magic glob characters, and it's treated the
|
||||
* same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`
|
||||
* is in the options, brace expansion _is_ treated as a pattern having magic.
|
||||
*/
|
||||
const hasMagic = (pattern, options = {}) => {
|
||||
if (!Array.isArray(pattern)) {
|
||||
pattern = [pattern];
|
||||
}
|
||||
for (const p of pattern) {
|
||||
if (new minimatch_1.Minimatch(p, options).hasMagic())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
exports.hasMagic = hasMagic;
|
||||
//# sourceMappingURL=has-magic.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/has-magic.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/has-magic.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"has-magic.js","sourceRoot":"","sources":["../../src/has-magic.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAGrC;;;;;;;;;;GAUG;AACI,MAAM,QAAQ,GAAG,CACtB,OAA0B,EAC1B,UAAuB,EAAE,EAChB,EAAE;IACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,GAAG,CAAC,OAAO,CAAC,CAAA;KACpB;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;QACvB,IAAI,IAAI,qBAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE;YAAE,OAAO,IAAI,CAAA;KACtD;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAXY,QAAA,QAAQ,YAWpB","sourcesContent":["import { Minimatch } from 'minimatch'\nimport { GlobOptions } from './glob.js'\n\n/**\n * Return true if the patterns provided contain any magic glob characters,\n * given the options provided.\n *\n * Brace expansion is not considered \"magic\" unless the `magicalBraces` option\n * is set, as brace expansion just turns one string into an array of strings.\n * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and\n * `'xby'` both do not contain any magic glob characters, and it's treated the\n * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`\n * is in the options, brace expansion _is_ treated as a pattern having magic.\n */\nexport const hasMagic = (\n pattern: string | string[],\n options: GlobOptions = {}\n): boolean => {\n if (!Array.isArray(pattern)) {\n pattern = [pattern]\n }\n for (const p of pattern) {\n if (new Minimatch(p, options).hasMagic()) return true\n }\n return false\n}\n"]}
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/ignore.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/ignore.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IAC9B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;CACvC;AASD;;GAEG;AACH,qBAAa,MAAO,YAAW,UAAU;IACvC,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;gBAG3B,OAAO,EAAE,MAAM,EAAE,EACjB,EACE,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAA0B,GAC3B,EAAE,cAAc;IA4DnB,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAczB,eAAe,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;CAWlC"}
|
||||
114
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/ignore.js
generated
vendored
Normal file
114
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/ignore.js
generated
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
"use strict";
|
||||
// give it a pattern, and it'll be able to tell you if
|
||||
// a given path should be ignored.
|
||||
// Ignoring a path ignores its children if the pattern ends in /**
|
||||
// Ignores are always parsed in dot:true mode
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Ignore = void 0;
|
||||
const minimatch_1 = require("minimatch");
|
||||
const pattern_js_1 = require("./pattern.js");
|
||||
const defaultPlatform = typeof process === 'object' &&
|
||||
process &&
|
||||
typeof process.platform === 'string'
|
||||
? process.platform
|
||||
: 'linux';
|
||||
/**
|
||||
* Class used to process ignored patterns
|
||||
*/
|
||||
class Ignore {
|
||||
relative;
|
||||
relativeChildren;
|
||||
absolute;
|
||||
absoluteChildren;
|
||||
constructor(ignored, { nobrace, nocase, noext, noglobstar, platform = defaultPlatform, }) {
|
||||
this.relative = [];
|
||||
this.absolute = [];
|
||||
this.relativeChildren = [];
|
||||
this.absoluteChildren = [];
|
||||
const mmopts = {
|
||||
dot: true,
|
||||
nobrace,
|
||||
nocase,
|
||||
noext,
|
||||
noglobstar,
|
||||
optimizationLevel: 2,
|
||||
platform,
|
||||
nocomment: true,
|
||||
nonegate: true,
|
||||
};
|
||||
// this is a little weird, but it gives us a clean set of optimized
|
||||
// minimatch matchers, without getting tripped up if one of them
|
||||
// ends in /** inside a brace section, and it's only inefficient at
|
||||
// the start of the walk, not along it.
|
||||
// It'd be nice if the Pattern class just had a .test() method, but
|
||||
// handling globstars is a bit of a pita, and that code already lives
|
||||
// in minimatch anyway.
|
||||
// Another way would be if maybe Minimatch could take its set/globParts
|
||||
// as an option, and then we could at least just use Pattern to test
|
||||
// for absolute-ness.
|
||||
// Yet another way, Minimatch could take an array of glob strings, and
|
||||
// a cwd option, and do the right thing.
|
||||
for (const ign of ignored) {
|
||||
const mm = new minimatch_1.Minimatch(ign, mmopts);
|
||||
for (let i = 0; i < mm.set.length; i++) {
|
||||
const parsed = mm.set[i];
|
||||
const globParts = mm.globParts[i];
|
||||
/* c8 ignore start */
|
||||
if (!parsed || !globParts) {
|
||||
throw new Error('invalid pattern object');
|
||||
}
|
||||
// strip off leading ./ portions
|
||||
// https://github.com/isaacs/node-glob/issues/570
|
||||
while (parsed[0] === '.' && globParts[0] === '.') {
|
||||
parsed.shift();
|
||||
globParts.shift();
|
||||
}
|
||||
/* c8 ignore stop */
|
||||
const p = new pattern_js_1.Pattern(parsed, globParts, 0, platform);
|
||||
const m = new minimatch_1.Minimatch(p.globString(), mmopts);
|
||||
const children = globParts[globParts.length - 1] === '**';
|
||||
const absolute = p.isAbsolute();
|
||||
if (absolute)
|
||||
this.absolute.push(m);
|
||||
else
|
||||
this.relative.push(m);
|
||||
if (children) {
|
||||
if (absolute)
|
||||
this.absoluteChildren.push(m);
|
||||
else
|
||||
this.relativeChildren.push(m);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ignored(p) {
|
||||
const fullpath = p.fullpath();
|
||||
const fullpaths = `${fullpath}/`;
|
||||
const relative = p.relative() || '.';
|
||||
const relatives = `${relative}/`;
|
||||
for (const m of this.relative) {
|
||||
if (m.match(relative) || m.match(relatives))
|
||||
return true;
|
||||
}
|
||||
for (const m of this.absolute) {
|
||||
if (m.match(fullpath) || m.match(fullpaths))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
childrenIgnored(p) {
|
||||
const fullpath = p.fullpath() + '/';
|
||||
const relative = (p.relative() || '.') + '/';
|
||||
for (const m of this.relativeChildren) {
|
||||
if (m.match(relative))
|
||||
return true;
|
||||
}
|
||||
for (const m of this.absoluteChildren) {
|
||||
if (m.match(fullpath))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
exports.Ignore = Ignore;
|
||||
//# sourceMappingURL=ignore.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/ignore.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/ignore.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/index.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/index.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
||||
68
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/index.js
generated
vendored
Normal file
68
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/index.js
generated
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.glob = exports.hasMagic = exports.Glob = exports.unescape = exports.escape = exports.sync = exports.iterate = exports.iterateSync = exports.stream = exports.streamSync = exports.globIterate = exports.globIterateSync = exports.globSync = exports.globStream = exports.globStreamSync = void 0;
|
||||
const minimatch_1 = require("minimatch");
|
||||
const glob_js_1 = require("./glob.js");
|
||||
const has_magic_js_1 = require("./has-magic.js");
|
||||
function globStreamSync(pattern, options = {}) {
|
||||
return new glob_js_1.Glob(pattern, options).streamSync();
|
||||
}
|
||||
exports.globStreamSync = globStreamSync;
|
||||
function globStream(pattern, options = {}) {
|
||||
return new glob_js_1.Glob(pattern, options).stream();
|
||||
}
|
||||
exports.globStream = globStream;
|
||||
function globSync(pattern, options = {}) {
|
||||
return new glob_js_1.Glob(pattern, options).walkSync();
|
||||
}
|
||||
exports.globSync = globSync;
|
||||
async function glob_(pattern, options = {}) {
|
||||
return new glob_js_1.Glob(pattern, options).walk();
|
||||
}
|
||||
function globIterateSync(pattern, options = {}) {
|
||||
return new glob_js_1.Glob(pattern, options).iterateSync();
|
||||
}
|
||||
exports.globIterateSync = globIterateSync;
|
||||
function globIterate(pattern, options = {}) {
|
||||
return new glob_js_1.Glob(pattern, options).iterate();
|
||||
}
|
||||
exports.globIterate = globIterate;
|
||||
// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc
|
||||
exports.streamSync = globStreamSync;
|
||||
exports.stream = Object.assign(globStream, { sync: globStreamSync });
|
||||
exports.iterateSync = globIterateSync;
|
||||
exports.iterate = Object.assign(globIterate, {
|
||||
sync: globIterateSync,
|
||||
});
|
||||
exports.sync = Object.assign(globSync, {
|
||||
stream: globStreamSync,
|
||||
iterate: globIterateSync,
|
||||
});
|
||||
/* c8 ignore start */
|
||||
var minimatch_2 = require("minimatch");
|
||||
Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return minimatch_2.escape; } });
|
||||
Object.defineProperty(exports, "unescape", { enumerable: true, get: function () { return minimatch_2.unescape; } });
|
||||
var glob_js_2 = require("./glob.js");
|
||||
Object.defineProperty(exports, "Glob", { enumerable: true, get: function () { return glob_js_2.Glob; } });
|
||||
var has_magic_js_2 = require("./has-magic.js");
|
||||
Object.defineProperty(exports, "hasMagic", { enumerable: true, get: function () { return has_magic_js_2.hasMagic; } });
|
||||
/* c8 ignore stop */
|
||||
exports.glob = Object.assign(glob_, {
|
||||
glob: glob_,
|
||||
globSync,
|
||||
sync: exports.sync,
|
||||
globStream,
|
||||
stream: exports.stream,
|
||||
globStreamSync,
|
||||
streamSync: exports.streamSync,
|
||||
globIterate,
|
||||
iterate: exports.iterate,
|
||||
globIterateSync,
|
||||
iterateSync: exports.iterateSync,
|
||||
Glob: glob_js_1.Glob,
|
||||
hasMagic: has_magic_js_1.hasMagic,
|
||||
escape: minimatch_1.escape,
|
||||
unescape: minimatch_1.unescape,
|
||||
});
|
||||
exports.glob.glob = exports.glob;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/index.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
3
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/package.json
generated
vendored
Normal file
3
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/package.json
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"type": "commonjs"
|
||||
}
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/pattern.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/pattern.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,QAAQ,CAAA;AAGzD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,GAAG,IAAI,EAAE,SAAS,EAAE;CACrB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAMrD;;;GAGG;AACH,qBAAa,OAAO;;IAIlB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAUrB,WAAW,EAAE,SAAS,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;IA6D3B;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAGnB;;OAEG;IACH,UAAU,IAAI,OAAO;IAGrB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,UAAU,IAAI,MAAM;IAUpB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,IAAI,OAAO,GAAG,IAAI;IAetB;;OAEG;IACH,KAAK,IAAI,OAAO;IAoBhB;;OAEG;IACH,OAAO,IAAI,OAAO;IAelB;;OAEG;IACH,UAAU,IAAI,OAAO;IAUrB;;OAEG;IACH,IAAI,IAAI,MAAM;IAOd;;;OAGG;IACH,mBAAmB,IAAI,OAAO;IAQ9B;;OAEG;IACH,kBAAkB,IAAI,OAAO;CAM9B"}
|
||||
219
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/pattern.js
generated
vendored
Normal file
219
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/pattern.js
generated
vendored
Normal file
@@ -0,0 +1,219 @@
|
||||
"use strict";
|
||||
// this is just a very light wrapper around 2 arrays with an offset index
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Pattern = void 0;
|
||||
const minimatch_1 = require("minimatch");
|
||||
const isPatternList = (pl) => pl.length >= 1;
|
||||
const isGlobList = (gl) => gl.length >= 1;
|
||||
/**
|
||||
* An immutable-ish view on an array of glob parts and their parsed
|
||||
* results
|
||||
*/
|
||||
class Pattern {
|
||||
#patternList;
|
||||
#globList;
|
||||
#index;
|
||||
length;
|
||||
#platform;
|
||||
#rest;
|
||||
#globString;
|
||||
#isDrive;
|
||||
#isUNC;
|
||||
#isAbsolute;
|
||||
#followGlobstar = true;
|
||||
constructor(patternList, globList, index, platform) {
|
||||
if (!isPatternList(patternList)) {
|
||||
throw new TypeError('empty pattern list');
|
||||
}
|
||||
if (!isGlobList(globList)) {
|
||||
throw new TypeError('empty glob list');
|
||||
}
|
||||
if (globList.length !== patternList.length) {
|
||||
throw new TypeError('mismatched pattern list and glob list lengths');
|
||||
}
|
||||
this.length = patternList.length;
|
||||
if (index < 0 || index >= this.length) {
|
||||
throw new TypeError('index out of range');
|
||||
}
|
||||
this.#patternList = patternList;
|
||||
this.#globList = globList;
|
||||
this.#index = index;
|
||||
this.#platform = platform;
|
||||
// normalize root entries of absolute patterns on initial creation.
|
||||
if (this.#index === 0) {
|
||||
// c: => ['c:/']
|
||||
// C:/ => ['C:/']
|
||||
// C:/x => ['C:/', 'x']
|
||||
// //host/share => ['//host/share/']
|
||||
// //host/share/ => ['//host/share/']
|
||||
// //host/share/x => ['//host/share/', 'x']
|
||||
// /etc => ['/', 'etc']
|
||||
// / => ['/']
|
||||
if (this.isUNC()) {
|
||||
// '' / '' / 'host' / 'share'
|
||||
const [p0, p1, p2, p3, ...prest] = this.#patternList;
|
||||
const [g0, g1, g2, g3, ...grest] = this.#globList;
|
||||
if (prest[0] === '') {
|
||||
// ends in /
|
||||
prest.shift();
|
||||
grest.shift();
|
||||
}
|
||||
const p = [p0, p1, p2, p3, ''].join('/');
|
||||
const g = [g0, g1, g2, g3, ''].join('/');
|
||||
this.#patternList = [p, ...prest];
|
||||
this.#globList = [g, ...grest];
|
||||
this.length = this.#patternList.length;
|
||||
}
|
||||
else if (this.isDrive() || this.isAbsolute()) {
|
||||
const [p1, ...prest] = this.#patternList;
|
||||
const [g1, ...grest] = this.#globList;
|
||||
if (prest[0] === '') {
|
||||
// ends in /
|
||||
prest.shift();
|
||||
grest.shift();
|
||||
}
|
||||
const p = p1 + '/';
|
||||
const g = g1 + '/';
|
||||
this.#patternList = [p, ...prest];
|
||||
this.#globList = [g, ...grest];
|
||||
this.length = this.#patternList.length;
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* The first entry in the parsed list of patterns
|
||||
*/
|
||||
pattern() {
|
||||
return this.#patternList[this.#index];
|
||||
}
|
||||
/**
|
||||
* true of if pattern() returns a string
|
||||
*/
|
||||
isString() {
|
||||
return typeof this.#patternList[this.#index] === 'string';
|
||||
}
|
||||
/**
|
||||
* true of if pattern() returns GLOBSTAR
|
||||
*/
|
||||
isGlobstar() {
|
||||
return this.#patternList[this.#index] === minimatch_1.GLOBSTAR;
|
||||
}
|
||||
/**
|
||||
* true if pattern() returns a regexp
|
||||
*/
|
||||
isRegExp() {
|
||||
return this.#patternList[this.#index] instanceof RegExp;
|
||||
}
|
||||
/**
|
||||
* The /-joined set of glob parts that make up this pattern
|
||||
*/
|
||||
globString() {
|
||||
return (this.#globString =
|
||||
this.#globString ||
|
||||
(this.#index === 0
|
||||
? this.isAbsolute()
|
||||
? this.#globList[0] + this.#globList.slice(1).join('/')
|
||||
: this.#globList.join('/')
|
||||
: this.#globList.slice(this.#index).join('/')));
|
||||
}
|
||||
/**
|
||||
* true if there are more pattern parts after this one
|
||||
*/
|
||||
hasMore() {
|
||||
return this.length > this.#index + 1;
|
||||
}
|
||||
/**
|
||||
* The rest of the pattern after this part, or null if this is the end
|
||||
*/
|
||||
rest() {
|
||||
if (this.#rest !== undefined)
|
||||
return this.#rest;
|
||||
if (!this.hasMore())
|
||||
return (this.#rest = null);
|
||||
this.#rest = new Pattern(this.#patternList, this.#globList, this.#index + 1, this.#platform);
|
||||
this.#rest.#isAbsolute = this.#isAbsolute;
|
||||
this.#rest.#isUNC = this.#isUNC;
|
||||
this.#rest.#isDrive = this.#isDrive;
|
||||
return this.#rest;
|
||||
}
|
||||
/**
|
||||
* true if the pattern represents a //unc/path/ on windows
|
||||
*/
|
||||
isUNC() {
|
||||
const pl = this.#patternList;
|
||||
return this.#isUNC !== undefined
|
||||
? this.#isUNC
|
||||
: (this.#isUNC =
|
||||
this.#platform === 'win32' &&
|
||||
this.#index === 0 &&
|
||||
pl[0] === '' &&
|
||||
pl[1] === '' &&
|
||||
typeof pl[2] === 'string' &&
|
||||
!!pl[2] &&
|
||||
typeof pl[3] === 'string' &&
|
||||
!!pl[3]);
|
||||
}
|
||||
// pattern like C:/...
|
||||
// split = ['C:', ...]
|
||||
// XXX: would be nice to handle patterns like `c:*` to test the cwd
|
||||
// in c: for *, but I don't know of a way to even figure out what that
|
||||
// cwd is without actually chdir'ing into it?
|
||||
/**
|
||||
* True if the pattern starts with a drive letter on Windows
|
||||
*/
|
||||
isDrive() {
|
||||
const pl = this.#patternList;
|
||||
return this.#isDrive !== undefined
|
||||
? this.#isDrive
|
||||
: (this.#isDrive =
|
||||
this.#platform === 'win32' &&
|
||||
this.#index === 0 &&
|
||||
this.length > 1 &&
|
||||
typeof pl[0] === 'string' &&
|
||||
/^[a-z]:$/i.test(pl[0]));
|
||||
}
|
||||
// pattern = '/' or '/...' or '/x/...'
|
||||
// split = ['', ''] or ['', ...] or ['', 'x', ...]
|
||||
// Drive and UNC both considered absolute on windows
|
||||
/**
|
||||
* True if the pattern is rooted on an absolute path
|
||||
*/
|
||||
isAbsolute() {
|
||||
const pl = this.#patternList;
|
||||
return this.#isAbsolute !== undefined
|
||||
? this.#isAbsolute
|
||||
: (this.#isAbsolute =
|
||||
(pl[0] === '' && pl.length > 1) ||
|
||||
this.isDrive() ||
|
||||
this.isUNC());
|
||||
}
|
||||
/**
|
||||
* consume the root of the pattern, and return it
|
||||
*/
|
||||
root() {
|
||||
const p = this.#patternList[0];
|
||||
return typeof p === 'string' && this.isAbsolute() && this.#index === 0
|
||||
? p
|
||||
: '';
|
||||
}
|
||||
/**
|
||||
* Check to see if the current globstar pattern is allowed to follow
|
||||
* a symbolic link.
|
||||
*/
|
||||
checkFollowGlobstar() {
|
||||
return !(this.#index === 0 ||
|
||||
!this.isGlobstar() ||
|
||||
!this.#followGlobstar);
|
||||
}
|
||||
/**
|
||||
* Mark that the current globstar pattern is following a symbolic link
|
||||
*/
|
||||
markFollowGlobstar() {
|
||||
if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)
|
||||
return false;
|
||||
this.#followGlobstar = false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
exports.Pattern = Pattern;
|
||||
//# sourceMappingURL=pattern.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/pattern.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/pattern.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/processor.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/processor.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAa,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C;;GAEG;AACH,qBAAa,cAAc;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;gBACnB,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAGvD,IAAI;IAGJ,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAGxC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;CAM3C;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACtB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY;IACpC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAMnD,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;CAOtC;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACnB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAY;IACvC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAWlC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,EAAE;IAS5B,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;IAG9B,IAAI,IAAI,IAAI,EAAE;CAGf;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,cAAoB;IAC3B,QAAQ,WAAiB;IACzB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;gBAER,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,cAAc;IASjE,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;IAmGjD,cAAc,IAAI,IAAI,EAAE;IAIxB,KAAK;IAQL,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS;IAqBvD,YAAY,CACV,CAAC,EAAE,IAAI,EACP,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IA8CnB,UAAU,CACR,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,QAAQ,EACX,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IAUnB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO;CASvE"}
|
||||
302
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/processor.js
generated
vendored
Normal file
302
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/processor.js
generated
vendored
Normal file
@@ -0,0 +1,302 @@
|
||||
"use strict";
|
||||
// synchronous utility for filtering entries and calculating subwalks
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Processor = exports.SubWalks = exports.MatchRecord = exports.HasWalkedCache = void 0;
|
||||
const minimatch_1 = require("minimatch");
|
||||
/**
|
||||
* A cache of which patterns have been processed for a given Path
|
||||
*/
|
||||
class HasWalkedCache {
|
||||
store;
|
||||
constructor(store = new Map()) {
|
||||
this.store = store;
|
||||
}
|
||||
copy() {
|
||||
return new HasWalkedCache(new Map(this.store));
|
||||
}
|
||||
hasWalked(target, pattern) {
|
||||
return this.store.get(target.fullpath())?.has(pattern.globString());
|
||||
}
|
||||
storeWalked(target, pattern) {
|
||||
const fullpath = target.fullpath();
|
||||
const cached = this.store.get(fullpath);
|
||||
if (cached)
|
||||
cached.add(pattern.globString());
|
||||
else
|
||||
this.store.set(fullpath, new Set([pattern.globString()]));
|
||||
}
|
||||
}
|
||||
exports.HasWalkedCache = HasWalkedCache;
|
||||
/**
|
||||
* A record of which paths have been matched in a given walk step,
|
||||
* and whether they only are considered a match if they are a directory,
|
||||
* and whether their absolute or relative path should be returned.
|
||||
*/
|
||||
class MatchRecord {
|
||||
store = new Map();
|
||||
add(target, absolute, ifDir) {
|
||||
const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0);
|
||||
const current = this.store.get(target);
|
||||
this.store.set(target, current === undefined ? n : n & current);
|
||||
}
|
||||
// match, absolute, ifdir
|
||||
entries() {
|
||||
return [...this.store.entries()].map(([path, n]) => [
|
||||
path,
|
||||
!!(n & 2),
|
||||
!!(n & 1),
|
||||
]);
|
||||
}
|
||||
}
|
||||
exports.MatchRecord = MatchRecord;
|
||||
/**
|
||||
* A collection of patterns that must be processed in a subsequent step
|
||||
* for a given path.
|
||||
*/
|
||||
class SubWalks {
|
||||
store = new Map();
|
||||
add(target, pattern) {
|
||||
if (!target.canReaddir()) {
|
||||
return;
|
||||
}
|
||||
const subs = this.store.get(target);
|
||||
if (subs) {
|
||||
if (!subs.find(p => p.globString() === pattern.globString())) {
|
||||
subs.push(pattern);
|
||||
}
|
||||
}
|
||||
else
|
||||
this.store.set(target, [pattern]);
|
||||
}
|
||||
get(target) {
|
||||
const subs = this.store.get(target);
|
||||
/* c8 ignore start */
|
||||
if (!subs) {
|
||||
throw new Error('attempting to walk unknown path');
|
||||
}
|
||||
/* c8 ignore stop */
|
||||
return subs;
|
||||
}
|
||||
entries() {
|
||||
return this.keys().map(k => [k, this.store.get(k)]);
|
||||
}
|
||||
keys() {
|
||||
return [...this.store.keys()].filter(t => t.canReaddir());
|
||||
}
|
||||
}
|
||||
exports.SubWalks = SubWalks;
|
||||
/**
|
||||
* The class that processes patterns for a given path.
|
||||
*
|
||||
* Handles child entry filtering, and determining whether a path's
|
||||
* directory contents must be read.
|
||||
*/
|
||||
class Processor {
|
||||
hasWalkedCache;
|
||||
matches = new MatchRecord();
|
||||
subwalks = new SubWalks();
|
||||
patterns;
|
||||
follow;
|
||||
dot;
|
||||
opts;
|
||||
constructor(opts, hasWalkedCache) {
|
||||
this.opts = opts;
|
||||
this.follow = !!opts.follow;
|
||||
this.dot = !!opts.dot;
|
||||
this.hasWalkedCache = hasWalkedCache
|
||||
? hasWalkedCache.copy()
|
||||
: new HasWalkedCache();
|
||||
}
|
||||
processPatterns(target, patterns) {
|
||||
this.patterns = patterns;
|
||||
const processingSet = patterns.map(p => [target, p]);
|
||||
// map of paths to the magic-starting subwalks they need to walk
|
||||
// first item in patterns is the filter
|
||||
for (let [t, pattern] of processingSet) {
|
||||
this.hasWalkedCache.storeWalked(t, pattern);
|
||||
const root = pattern.root();
|
||||
const absolute = pattern.isAbsolute() && this.opts.absolute !== false;
|
||||
// start absolute patterns at root
|
||||
if (root) {
|
||||
t = t.resolve(root === '/' && this.opts.root !== undefined
|
||||
? this.opts.root
|
||||
: root);
|
||||
const rest = pattern.rest();
|
||||
if (!rest) {
|
||||
this.matches.add(t, true, false);
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
pattern = rest;
|
||||
}
|
||||
}
|
||||
if (t.isENOENT())
|
||||
continue;
|
||||
let p;
|
||||
let rest;
|
||||
let changed = false;
|
||||
while (typeof (p = pattern.pattern()) === 'string' &&
|
||||
(rest = pattern.rest())) {
|
||||
const c = t.resolve(p);
|
||||
t = c;
|
||||
pattern = rest;
|
||||
changed = true;
|
||||
}
|
||||
p = pattern.pattern();
|
||||
rest = pattern.rest();
|
||||
if (changed) {
|
||||
if (this.hasWalkedCache.hasWalked(t, pattern))
|
||||
continue;
|
||||
this.hasWalkedCache.storeWalked(t, pattern);
|
||||
}
|
||||
// now we have either a final string for a known entry,
|
||||
// more strings for an unknown entry,
|
||||
// or a pattern starting with magic, mounted on t.
|
||||
if (typeof p === 'string') {
|
||||
// must not be final entry, otherwise we would have
|
||||
// concatenated it earlier.
|
||||
const ifDir = p === '..' || p === '' || p === '.';
|
||||
this.matches.add(t.resolve(p), absolute, ifDir);
|
||||
continue;
|
||||
}
|
||||
else if (p === minimatch_1.GLOBSTAR) {
|
||||
// if no rest, match and subwalk pattern
|
||||
// if rest, process rest and subwalk pattern
|
||||
// if it's a symlink, but we didn't get here by way of a
|
||||
// globstar match (meaning it's the first time THIS globstar
|
||||
// has traversed a symlink), then we follow it. Otherwise, stop.
|
||||
if (!t.isSymbolicLink() ||
|
||||
this.follow ||
|
||||
pattern.checkFollowGlobstar()) {
|
||||
this.subwalks.add(t, pattern);
|
||||
}
|
||||
const rp = rest?.pattern();
|
||||
const rrest = rest?.rest();
|
||||
if (!rest || ((rp === '' || rp === '.') && !rrest)) {
|
||||
// only HAS to be a dir if it ends in **/ or **/.
|
||||
// but ending in ** will match files as well.
|
||||
this.matches.add(t, absolute, rp === '' || rp === '.');
|
||||
}
|
||||
else {
|
||||
if (rp === '..') {
|
||||
// this would mean you're matching **/.. at the fs root,
|
||||
// and no thanks, I'm not gonna test that specific case.
|
||||
/* c8 ignore start */
|
||||
const tp = t.parent || t;
|
||||
/* c8 ignore stop */
|
||||
if (!rrest)
|
||||
this.matches.add(tp, absolute, true);
|
||||
else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {
|
||||
this.subwalks.add(tp, rrest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (p instanceof RegExp) {
|
||||
this.subwalks.add(t, pattern);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
subwalkTargets() {
|
||||
return this.subwalks.keys();
|
||||
}
|
||||
child() {
|
||||
return new Processor(this.opts, this.hasWalkedCache);
|
||||
}
|
||||
// return a new Processor containing the subwalks for each
|
||||
// child entry, and a set of matches, and
|
||||
// a hasWalkedCache that's a copy of this one
|
||||
// then we're going to call
|
||||
filterEntries(parent, entries) {
|
||||
const patterns = this.subwalks.get(parent);
|
||||
// put matches and entry walks into the results processor
|
||||
const results = this.child();
|
||||
for (const e of entries) {
|
||||
for (const pattern of patterns) {
|
||||
const absolute = pattern.isAbsolute();
|
||||
const p = pattern.pattern();
|
||||
const rest = pattern.rest();
|
||||
if (p === minimatch_1.GLOBSTAR) {
|
||||
results.testGlobstar(e, pattern, rest, absolute);
|
||||
}
|
||||
else if (p instanceof RegExp) {
|
||||
results.testRegExp(e, p, rest, absolute);
|
||||
}
|
||||
else {
|
||||
results.testString(e, p, rest, absolute);
|
||||
}
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
testGlobstar(e, pattern, rest, absolute) {
|
||||
if (this.dot || !e.name.startsWith('.')) {
|
||||
if (!pattern.hasMore()) {
|
||||
this.matches.add(e, absolute, false);
|
||||
}
|
||||
if (e.canReaddir()) {
|
||||
// if we're in follow mode or it's not a symlink, just keep
|
||||
// testing the same pattern. If there's more after the globstar,
|
||||
// then this symlink consumes the globstar. If not, then we can
|
||||
// follow at most ONE symlink along the way, so we mark it, which
|
||||
// also checks to ensure that it wasn't already marked.
|
||||
if (this.follow || !e.isSymbolicLink()) {
|
||||
this.subwalks.add(e, pattern);
|
||||
}
|
||||
else if (e.isSymbolicLink()) {
|
||||
if (rest && pattern.checkFollowGlobstar()) {
|
||||
this.subwalks.add(e, rest);
|
||||
}
|
||||
else if (pattern.markFollowGlobstar()) {
|
||||
this.subwalks.add(e, pattern);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if the NEXT thing matches this entry, then also add
|
||||
// the rest.
|
||||
if (rest) {
|
||||
const rp = rest.pattern();
|
||||
if (typeof rp === 'string' &&
|
||||
// dots and empty were handled already
|
||||
rp !== '..' &&
|
||||
rp !== '' &&
|
||||
rp !== '.') {
|
||||
this.testString(e, rp, rest.rest(), absolute);
|
||||
}
|
||||
else if (rp === '..') {
|
||||
/* c8 ignore start */
|
||||
const ep = e.parent || e;
|
||||
/* c8 ignore stop */
|
||||
this.subwalks.add(ep, rest);
|
||||
}
|
||||
else if (rp instanceof RegExp) {
|
||||
this.testRegExp(e, rp, rest.rest(), absolute);
|
||||
}
|
||||
}
|
||||
}
|
||||
testRegExp(e, p, rest, absolute) {
|
||||
if (!p.test(e.name))
|
||||
return;
|
||||
if (!rest) {
|
||||
this.matches.add(e, absolute, false);
|
||||
}
|
||||
else {
|
||||
this.subwalks.add(e, rest);
|
||||
}
|
||||
}
|
||||
testString(e, p, rest, absolute) {
|
||||
// should never happen?
|
||||
if (!e.isNamed(p))
|
||||
return;
|
||||
if (!rest) {
|
||||
this.matches.add(e, absolute, false);
|
||||
}
|
||||
else {
|
||||
this.subwalks.add(e, rest);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.Processor = Processor;
|
||||
//# sourceMappingURL=processor.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/processor.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/processor.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/walker.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/walker.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"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"}
|
||||
378
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/walker.js
generated
vendored
Normal file
378
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/walker.js
generated
vendored
Normal file
@@ -0,0 +1,378 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.GlobStream = exports.GlobWalker = exports.GlobUtil = void 0;
|
||||
/**
|
||||
* Single-use utility classes to provide functionality to the {@link Glob}
|
||||
* methods.
|
||||
*
|
||||
* @module
|
||||
*/
|
||||
const minipass_1 = require("minipass");
|
||||
const ignore_js_1 = require("./ignore.js");
|
||||
const processor_js_1 = require("./processor.js");
|
||||
const makeIgnore = (ignore, opts) => typeof ignore === 'string'
|
||||
? new ignore_js_1.Ignore([ignore], opts)
|
||||
: Array.isArray(ignore)
|
||||
? new ignore_js_1.Ignore(ignore, opts)
|
||||
: ignore;
|
||||
/**
|
||||
* basic walking utilities that all the glob walker types use
|
||||
*/
|
||||
class GlobUtil {
|
||||
path;
|
||||
patterns;
|
||||
opts;
|
||||
seen = new Set();
|
||||
paused = false;
|
||||
aborted = false;
|
||||
#onResume = [];
|
||||
#ignore;
|
||||
#sep;
|
||||
signal;
|
||||
maxDepth;
|
||||
constructor(patterns, path, opts) {
|
||||
this.patterns = patterns;
|
||||
this.path = path;
|
||||
this.opts = opts;
|
||||
this.#sep = !opts.posix && opts.platform === 'win32' ? '\\' : '/';
|
||||
if (opts.ignore) {
|
||||
this.#ignore = makeIgnore(opts.ignore, opts);
|
||||
}
|
||||
// ignore, always set with maxDepth, but it's optional on the
|
||||
// GlobOptions type
|
||||
/* c8 ignore start */
|
||||
this.maxDepth = opts.maxDepth || Infinity;
|
||||
/* c8 ignore stop */
|
||||
if (opts.signal) {
|
||||
this.signal = opts.signal;
|
||||
this.signal.addEventListener('abort', () => {
|
||||
this.#onResume.length = 0;
|
||||
});
|
||||
}
|
||||
}
|
||||
#ignored(path) {
|
||||
return this.seen.has(path) || !!this.#ignore?.ignored?.(path);
|
||||
}
|
||||
#childrenIgnored(path) {
|
||||
return !!this.#ignore?.childrenIgnored?.(path);
|
||||
}
|
||||
// backpressure mechanism
|
||||
pause() {
|
||||
this.paused = true;
|
||||
}
|
||||
resume() {
|
||||
/* c8 ignore start */
|
||||
if (this.signal?.aborted)
|
||||
return;
|
||||
/* c8 ignore stop */
|
||||
this.paused = false;
|
||||
let fn = undefined;
|
||||
while (!this.paused && (fn = this.#onResume.shift())) {
|
||||
fn();
|
||||
}
|
||||
}
|
||||
onResume(fn) {
|
||||
if (this.signal?.aborted)
|
||||
return;
|
||||
/* c8 ignore start */
|
||||
if (!this.paused) {
|
||||
fn();
|
||||
}
|
||||
else {
|
||||
/* c8 ignore stop */
|
||||
this.#onResume.push(fn);
|
||||
}
|
||||
}
|
||||
// do the requisite realpath/stat checking, and return the path
|
||||
// to add or undefined to filter it out.
|
||||
async matchCheck(e, ifDir) {
|
||||
if (ifDir && this.opts.nodir)
|
||||
return undefined;
|
||||
let rpc;
|
||||
if (this.opts.realpath) {
|
||||
rpc = e.realpathCached() || (await e.realpath());
|
||||
if (!rpc)
|
||||
return undefined;
|
||||
e = rpc;
|
||||
}
|
||||
const needStat = e.isUnknown() || this.opts.stat;
|
||||
const s = needStat ? await e.lstat() : e;
|
||||
if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
|
||||
const target = await s.realpath();
|
||||
/* c8 ignore start */
|
||||
if (target && (target.isUnknown() || this.opts.stat)) {
|
||||
await target.lstat();
|
||||
}
|
||||
/* c8 ignore stop */
|
||||
}
|
||||
return this.matchCheckTest(s, ifDir);
|
||||
}
|
||||
matchCheckTest(e, ifDir) {
|
||||
return e &&
|
||||
(this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&
|
||||
(!ifDir || e.canReaddir()) &&
|
||||
(!this.opts.nodir || !e.isDirectory()) &&
|
||||
(!this.opts.nodir ||
|
||||
!this.opts.follow ||
|
||||
!e.isSymbolicLink() ||
|
||||
!e.realpathCached()?.isDirectory()) &&
|
||||
!this.#ignored(e)
|
||||
? e
|
||||
: undefined;
|
||||
}
|
||||
matchCheckSync(e, ifDir) {
|
||||
if (ifDir && this.opts.nodir)
|
||||
return undefined;
|
||||
let rpc;
|
||||
if (this.opts.realpath) {
|
||||
rpc = e.realpathCached() || e.realpathSync();
|
||||
if (!rpc)
|
||||
return undefined;
|
||||
e = rpc;
|
||||
}
|
||||
const needStat = e.isUnknown() || this.opts.stat;
|
||||
const s = needStat ? e.lstatSync() : e;
|
||||
if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
|
||||
const target = s.realpathSync();
|
||||
if (target && (target?.isUnknown() || this.opts.stat)) {
|
||||
target.lstatSync();
|
||||
}
|
||||
}
|
||||
return this.matchCheckTest(s, ifDir);
|
||||
}
|
||||
matchFinish(e, absolute) {
|
||||
if (this.#ignored(e))
|
||||
return;
|
||||
const abs = this.opts.absolute === undefined ? absolute : this.opts.absolute;
|
||||
this.seen.add(e);
|
||||
const mark = this.opts.mark && e.isDirectory() ? this.#sep : '';
|
||||
// ok, we have what we need!
|
||||
if (this.opts.withFileTypes) {
|
||||
this.matchEmit(e);
|
||||
}
|
||||
else if (abs) {
|
||||
const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath();
|
||||
this.matchEmit(abs + mark);
|
||||
}
|
||||
else {
|
||||
const rel = this.opts.posix ? e.relativePosix() : e.relative();
|
||||
const pre = this.opts.dotRelative && !rel.startsWith('..' + this.#sep)
|
||||
? '.' + this.#sep
|
||||
: '';
|
||||
this.matchEmit(!rel ? '.' + mark : pre + rel + mark);
|
||||
}
|
||||
}
|
||||
async match(e, absolute, ifDir) {
|
||||
const p = await this.matchCheck(e, ifDir);
|
||||
if (p)
|
||||
this.matchFinish(p, absolute);
|
||||
}
|
||||
matchSync(e, absolute, ifDir) {
|
||||
const p = this.matchCheckSync(e, ifDir);
|
||||
if (p)
|
||||
this.matchFinish(p, absolute);
|
||||
}
|
||||
walkCB(target, patterns, cb) {
|
||||
/* c8 ignore start */
|
||||
if (this.signal?.aborted)
|
||||
cb();
|
||||
/* c8 ignore stop */
|
||||
this.walkCB2(target, patterns, new processor_js_1.Processor(this.opts), cb);
|
||||
}
|
||||
walkCB2(target, patterns, processor, cb) {
|
||||
if (this.#childrenIgnored(target))
|
||||
return cb();
|
||||
if (this.signal?.aborted)
|
||||
cb();
|
||||
if (this.paused) {
|
||||
this.onResume(() => this.walkCB2(target, patterns, processor, cb));
|
||||
return;
|
||||
}
|
||||
processor.processPatterns(target, patterns);
|
||||
// done processing. all of the above is sync, can be abstracted out.
|
||||
// subwalks is a map of paths to the entry filters they need
|
||||
// matches is a map of paths to [absolute, ifDir] tuples.
|
||||
let tasks = 1;
|
||||
const next = () => {
|
||||
if (--tasks === 0)
|
||||
cb();
|
||||
};
|
||||
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
||||
if (this.#ignored(m))
|
||||
continue;
|
||||
tasks++;
|
||||
this.match(m, absolute, ifDir).then(() => next());
|
||||
}
|
||||
for (const t of processor.subwalkTargets()) {
|
||||
if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
|
||||
continue;
|
||||
}
|
||||
tasks++;
|
||||
const childrenCached = t.readdirCached();
|
||||
if (t.calledReaddir())
|
||||
this.walkCB3(t, childrenCached, processor, next);
|
||||
else {
|
||||
t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true);
|
||||
}
|
||||
}
|
||||
next();
|
||||
}
|
||||
walkCB3(target, entries, processor, cb) {
|
||||
processor = processor.filterEntries(target, entries);
|
||||
let tasks = 1;
|
||||
const next = () => {
|
||||
if (--tasks === 0)
|
||||
cb();
|
||||
};
|
||||
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
||||
if (this.#ignored(m))
|
||||
continue;
|
||||
tasks++;
|
||||
this.match(m, absolute, ifDir).then(() => next());
|
||||
}
|
||||
for (const [target, patterns] of processor.subwalks.entries()) {
|
||||
tasks++;
|
||||
this.walkCB2(target, patterns, processor.child(), next);
|
||||
}
|
||||
next();
|
||||
}
|
||||
walkCBSync(target, patterns, cb) {
|
||||
/* c8 ignore start */
|
||||
if (this.signal?.aborted)
|
||||
cb();
|
||||
/* c8 ignore stop */
|
||||
this.walkCB2Sync(target, patterns, new processor_js_1.Processor(this.opts), cb);
|
||||
}
|
||||
walkCB2Sync(target, patterns, processor, cb) {
|
||||
if (this.#childrenIgnored(target))
|
||||
return cb();
|
||||
if (this.signal?.aborted)
|
||||
cb();
|
||||
if (this.paused) {
|
||||
this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb));
|
||||
return;
|
||||
}
|
||||
processor.processPatterns(target, patterns);
|
||||
// done processing. all of the above is sync, can be abstracted out.
|
||||
// subwalks is a map of paths to the entry filters they need
|
||||
// matches is a map of paths to [absolute, ifDir] tuples.
|
||||
let tasks = 1;
|
||||
const next = () => {
|
||||
if (--tasks === 0)
|
||||
cb();
|
||||
};
|
||||
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
||||
if (this.#ignored(m))
|
||||
continue;
|
||||
this.matchSync(m, absolute, ifDir);
|
||||
}
|
||||
for (const t of processor.subwalkTargets()) {
|
||||
if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
|
||||
continue;
|
||||
}
|
||||
tasks++;
|
||||
const children = t.readdirSync();
|
||||
this.walkCB3Sync(t, children, processor, next);
|
||||
}
|
||||
next();
|
||||
}
|
||||
walkCB3Sync(target, entries, processor, cb) {
|
||||
processor = processor.filterEntries(target, entries);
|
||||
let tasks = 1;
|
||||
const next = () => {
|
||||
if (--tasks === 0)
|
||||
cb();
|
||||
};
|
||||
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
||||
if (this.#ignored(m))
|
||||
continue;
|
||||
this.matchSync(m, absolute, ifDir);
|
||||
}
|
||||
for (const [target, patterns] of processor.subwalks.entries()) {
|
||||
tasks++;
|
||||
this.walkCB2Sync(target, patterns, processor.child(), next);
|
||||
}
|
||||
next();
|
||||
}
|
||||
}
|
||||
exports.GlobUtil = GlobUtil;
|
||||
class GlobWalker extends GlobUtil {
|
||||
matches;
|
||||
constructor(patterns, path, opts) {
|
||||
super(patterns, path, opts);
|
||||
this.matches = new Set();
|
||||
}
|
||||
matchEmit(e) {
|
||||
this.matches.add(e);
|
||||
}
|
||||
async walk() {
|
||||
if (this.signal?.aborted)
|
||||
throw this.signal.reason;
|
||||
if (this.path.isUnknown()) {
|
||||
await this.path.lstat();
|
||||
}
|
||||
await new Promise((res, rej) => {
|
||||
this.walkCB(this.path, this.patterns, () => {
|
||||
if (this.signal?.aborted) {
|
||||
rej(this.signal.reason);
|
||||
}
|
||||
else {
|
||||
res(this.matches);
|
||||
}
|
||||
});
|
||||
});
|
||||
return this.matches;
|
||||
}
|
||||
walkSync() {
|
||||
if (this.signal?.aborted)
|
||||
throw this.signal.reason;
|
||||
if (this.path.isUnknown()) {
|
||||
this.path.lstatSync();
|
||||
}
|
||||
// nothing for the callback to do, because this never pauses
|
||||
this.walkCBSync(this.path, this.patterns, () => {
|
||||
if (this.signal?.aborted)
|
||||
throw this.signal.reason;
|
||||
});
|
||||
return this.matches;
|
||||
}
|
||||
}
|
||||
exports.GlobWalker = GlobWalker;
|
||||
class GlobStream extends GlobUtil {
|
||||
results;
|
||||
constructor(patterns, path, opts) {
|
||||
super(patterns, path, opts);
|
||||
this.results = new minipass_1.Minipass({
|
||||
signal: this.signal,
|
||||
objectMode: true,
|
||||
});
|
||||
this.results.on('drain', () => this.resume());
|
||||
this.results.on('resume', () => this.resume());
|
||||
}
|
||||
matchEmit(e) {
|
||||
this.results.write(e);
|
||||
if (!this.results.flowing)
|
||||
this.pause();
|
||||
}
|
||||
stream() {
|
||||
const target = this.path;
|
||||
if (target.isUnknown()) {
|
||||
target.lstat().then(() => {
|
||||
this.walkCB(target, this.patterns, () => this.results.end());
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.walkCB(target, this.patterns, () => this.results.end());
|
||||
}
|
||||
return this.results;
|
||||
}
|
||||
streamSync() {
|
||||
if (this.path.isUnknown()) {
|
||||
this.path.lstatSync();
|
||||
}
|
||||
this.walkCBSync(this.path, this.patterns, () => this.results.end());
|
||||
return this.results;
|
||||
}
|
||||
}
|
||||
exports.GlobStream = GlobStream;
|
||||
//# sourceMappingURL=walker.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/walker.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/commonjs/walker.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
3
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/bin.d.mts
generated
vendored
Normal file
3
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/bin.d.mts
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env node
|
||||
export {};
|
||||
//# sourceMappingURL=bin.d.mts.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/bin.d.mts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/bin.d.mts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"bin.d.mts","sourceRoot":"","sources":["../../src/bin.mts"],"names":[],"mappings":""}
|
||||
275
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/bin.mjs
generated
vendored
Executable file
275
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/bin.mjs
generated
vendored
Executable file
@@ -0,0 +1,275 @@
|
||||
#!/usr/bin/env node
|
||||
import { foregroundChild } from 'foreground-child';
|
||||
import { existsSync } from 'fs';
|
||||
import { readFile } from 'fs/promises';
|
||||
import { jack } from 'jackspeak';
|
||||
import { join } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { globStream } from './index.js';
|
||||
/* c8 ignore start */
|
||||
const { version } = JSON.parse(await readFile(fileURLToPath(new URL('../../package.json', import.meta.url)), 'utf8').catch(() => readFile(fileURLToPath(new URL('../../package.json', import.meta.url)), 'utf8')));
|
||||
/* c8 ignore stop */
|
||||
const j = jack({
|
||||
usage: 'glob [options] [<pattern> [<pattern> ...]]',
|
||||
})
|
||||
.description(`
|
||||
Glob v${version}
|
||||
|
||||
Expand the positional glob expression arguments into any matching file
|
||||
system paths found.
|
||||
`)
|
||||
.opt({
|
||||
cmd: {
|
||||
short: 'c',
|
||||
hint: 'command',
|
||||
description: `Run the command provided, passing the glob expression
|
||||
matches as arguments.`,
|
||||
},
|
||||
})
|
||||
.opt({
|
||||
default: {
|
||||
short: 'p',
|
||||
hint: 'pattern',
|
||||
description: `If no positional arguments are provided, glob will use
|
||||
this pattern`,
|
||||
},
|
||||
})
|
||||
.flag({
|
||||
all: {
|
||||
short: 'A',
|
||||
description: `By default, the glob cli command will not expand any
|
||||
arguments that are an exact match to a file on disk.
|
||||
|
||||
This prevents double-expanding, in case the shell expands
|
||||
an argument whose filename is a glob expression.
|
||||
|
||||
For example, if 'app/*.ts' would match 'app/[id].ts', then
|
||||
on Windows powershell or cmd.exe, 'glob app/*.ts' will
|
||||
expand to 'app/[id].ts', as expected. However, in posix
|
||||
shells such as bash or zsh, the shell will first expand
|
||||
'app/*.ts' to a list of filenames. Then glob will look
|
||||
for a file matching 'app/[id].ts' (ie, 'app/i.ts' or
|
||||
'app/d.ts'), which is unexpected.
|
||||
|
||||
Setting '--all' prevents this behavior, causing glob
|
||||
to treat ALL patterns as glob expressions to be expanded,
|
||||
even if they are an exact match to a file on disk.
|
||||
|
||||
When setting this option, be sure to enquote arguments
|
||||
so that the shell will not expand them prior to passing
|
||||
them to the glob command process.
|
||||
`,
|
||||
},
|
||||
absolute: {
|
||||
short: 'a',
|
||||
description: 'Expand to absolute paths',
|
||||
},
|
||||
'dot-relative': {
|
||||
short: 'd',
|
||||
description: `Prepend './' on relative matches`,
|
||||
},
|
||||
mark: {
|
||||
short: 'm',
|
||||
description: `Append a / on any directories matched`,
|
||||
},
|
||||
posix: {
|
||||
short: 'x',
|
||||
description: `Always resolve to posix style paths, using '/' as the
|
||||
directory separator, even on Windows. Drive letter
|
||||
absolute matches on Windows will be expanded to their
|
||||
full resolved UNC maths, eg instead of 'C:\\foo\\bar',
|
||||
it will expand to '//?/C:/foo/bar'.
|
||||
`,
|
||||
},
|
||||
follow: {
|
||||
short: 'f',
|
||||
description: `Follow symlinked directories when expanding '**'`,
|
||||
},
|
||||
realpath: {
|
||||
short: 'R',
|
||||
description: `Call 'fs.realpath' on all of the results. In the case
|
||||
of an entry that cannot be resolved, the entry is
|
||||
omitted. This incurs a slight performance penalty, of
|
||||
course, because of the added system calls.`,
|
||||
},
|
||||
stat: {
|
||||
short: 's',
|
||||
description: `Call 'fs.lstat' on all entries, whether required or not
|
||||
to determine if it's a valid match.`,
|
||||
},
|
||||
'match-base': {
|
||||
short: 'b',
|
||||
description: `Perform a basename-only match if the pattern does not
|
||||
contain any slash characters. That is, '*.js' would be
|
||||
treated as equivalent to '**/*.js', matching js files
|
||||
in all directories.
|
||||
`,
|
||||
},
|
||||
dot: {
|
||||
description: `Allow patterns to match files/directories that start
|
||||
with '.', even if the pattern does not start with '.'
|
||||
`,
|
||||
},
|
||||
nobrace: {
|
||||
description: 'Do not expand {...} patterns',
|
||||
},
|
||||
nocase: {
|
||||
description: `Perform a case-insensitive match. This defaults to
|
||||
'true' on macOS and Windows platforms, and false on
|
||||
all others.
|
||||
|
||||
Note: 'nocase' should only be explicitly set when it is
|
||||
known that the filesystem's case sensitivity differs
|
||||
from the platform default. If set 'true' on
|
||||
case-insensitive file systems, then the walk may return
|
||||
more or less results than expected.
|
||||
`,
|
||||
},
|
||||
nodir: {
|
||||
description: `Do not match directories, only files.
|
||||
|
||||
Note: to *only* match directories, append a '/' at the
|
||||
end of the pattern.
|
||||
`,
|
||||
},
|
||||
noext: {
|
||||
description: `Do not expand extglob patterns, such as '+(a|b)'`,
|
||||
},
|
||||
noglobstar: {
|
||||
description: `Do not expand '**' against multiple path portions.
|
||||
Ie, treat it as a normal '*' instead.`,
|
||||
},
|
||||
'windows-path-no-escape': {
|
||||
description: `Use '\\' as a path separator *only*, and *never* as an
|
||||
escape character. If set, all '\\' characters are
|
||||
replaced with '/' in the pattern.`,
|
||||
},
|
||||
})
|
||||
.num({
|
||||
'max-depth': {
|
||||
short: 'D',
|
||||
description: `Maximum depth to traverse from the current
|
||||
working directory`,
|
||||
},
|
||||
})
|
||||
.opt({
|
||||
cwd: {
|
||||
short: 'C',
|
||||
description: 'Current working directory to execute/match in',
|
||||
default: process.cwd(),
|
||||
},
|
||||
root: {
|
||||
short: 'r',
|
||||
description: `A string path resolved against the 'cwd', which is
|
||||
used as the starting point for absolute patterns that
|
||||
start with '/' (but not drive letters or UNC paths
|
||||
on Windows).
|
||||
|
||||
Note that this *doesn't* necessarily limit the walk to
|
||||
the 'root' directory, and doesn't affect the cwd
|
||||
starting point for non-absolute patterns. A pattern
|
||||
containing '..' will still be able to traverse out of
|
||||
the root directory, if it is not an actual root directory
|
||||
on the filesystem, and any non-absolute patterns will
|
||||
still be matched in the 'cwd'.
|
||||
|
||||
To start absolute and non-absolute patterns in the same
|
||||
path, you can use '--root=' to set it to the empty
|
||||
string. However, be aware that on Windows systems, a
|
||||
pattern like 'x:/*' or '//host/share/*' will *always*
|
||||
start in the 'x:/' or '//host/share/' directory,
|
||||
regardless of the --root setting.
|
||||
`,
|
||||
},
|
||||
platform: {
|
||||
description: `Defaults to the value of 'process.platform' if
|
||||
available, or 'linux' if not. Setting --platform=win32
|
||||
on non-Windows systems may cause strange behavior!`,
|
||||
validOptions: [
|
||||
'aix',
|
||||
'android',
|
||||
'darwin',
|
||||
'freebsd',
|
||||
'haiku',
|
||||
'linux',
|
||||
'openbsd',
|
||||
'sunos',
|
||||
'win32',
|
||||
'cygwin',
|
||||
'netbsd',
|
||||
]
|
||||
},
|
||||
})
|
||||
.optList({
|
||||
ignore: {
|
||||
short: 'i',
|
||||
description: `Glob patterns to ignore`,
|
||||
},
|
||||
})
|
||||
.flag({
|
||||
debug: {
|
||||
short: 'v',
|
||||
description: `Output a huge amount of noisy debug information about
|
||||
patterns as they are parsed and used to match files.`,
|
||||
},
|
||||
})
|
||||
.flag({
|
||||
help: {
|
||||
short: 'h',
|
||||
description: 'Show this usage information',
|
||||
},
|
||||
});
|
||||
try {
|
||||
const { positionals, values } = j.parse();
|
||||
if (values.help) {
|
||||
console.log(j.usage());
|
||||
process.exit(0);
|
||||
}
|
||||
if (positionals.length === 0 && !values.default)
|
||||
throw 'No patterns provided';
|
||||
if (positionals.length === 0 && values.default)
|
||||
positionals.push(values.default);
|
||||
const patterns = values.all
|
||||
? positionals
|
||||
: positionals.filter(p => !existsSync(p));
|
||||
const matches = values.all
|
||||
? []
|
||||
: positionals.filter(p => existsSync(p)).map(p => join(p));
|
||||
const stream = globStream(patterns, {
|
||||
absolute: values.absolute,
|
||||
cwd: values.cwd,
|
||||
dot: values.dot,
|
||||
dotRelative: values['dot-relative'],
|
||||
follow: values.follow,
|
||||
ignore: values.ignore,
|
||||
mark: values.mark,
|
||||
matchBase: values['match-base'],
|
||||
maxDepth: values['max-depth'],
|
||||
nobrace: values.nobrace,
|
||||
nocase: values.nocase,
|
||||
nodir: values.nodir,
|
||||
noext: values.noext,
|
||||
noglobstar: values.noglobstar,
|
||||
platform: values.platform,
|
||||
realpath: values.realpath,
|
||||
root: values.root,
|
||||
stat: values.stat,
|
||||
debug: values.debug,
|
||||
posix: values.posix,
|
||||
});
|
||||
const cmd = values.cmd;
|
||||
if (!cmd) {
|
||||
matches.forEach(m => console.log(m));
|
||||
stream.on('data', f => console.log(f));
|
||||
}
|
||||
else {
|
||||
stream.on('data', f => matches.push(f));
|
||||
stream.on('end', () => foregroundChild(cmd, matches, { shell: true }));
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.error(j.usage());
|
||||
console.error(e instanceof Error ? e.message : String(e));
|
||||
process.exit(1);
|
||||
}
|
||||
//# sourceMappingURL=bin.mjs.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/bin.mjs.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/bin.mjs.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/glob.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/glob.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"}
|
||||
239
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/glob.js
generated
vendored
Normal file
239
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/glob.js
generated
vendored
Normal file
@@ -0,0 +1,239 @@
|
||||
import { Minimatch } from 'minimatch';
|
||||
import { PathScurry, PathScurryDarwin, PathScurryPosix, PathScurryWin32, } from 'path-scurry';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { Pattern } from './pattern.js';
|
||||
import { GlobStream, GlobWalker } from './walker.js';
|
||||
// if no process global, just call it linux.
|
||||
// so we default to case-sensitive, / separators
|
||||
const defaultPlatform = typeof process === 'object' &&
|
||||
process &&
|
||||
typeof process.platform === 'string'
|
||||
? process.platform
|
||||
: 'linux';
|
||||
/**
|
||||
* An object that can perform glob pattern traversals.
|
||||
*/
|
||||
export class Glob {
|
||||
absolute;
|
||||
cwd;
|
||||
root;
|
||||
dot;
|
||||
dotRelative;
|
||||
follow;
|
||||
ignore;
|
||||
magicalBraces;
|
||||
mark;
|
||||
matchBase;
|
||||
maxDepth;
|
||||
nobrace;
|
||||
nocase;
|
||||
nodir;
|
||||
noext;
|
||||
noglobstar;
|
||||
pattern;
|
||||
platform;
|
||||
realpath;
|
||||
scurry;
|
||||
stat;
|
||||
signal;
|
||||
windowsPathsNoEscape;
|
||||
withFileTypes;
|
||||
/**
|
||||
* The options provided to the constructor.
|
||||
*/
|
||||
opts;
|
||||
/**
|
||||
* An array of parsed immutable {@link Pattern} objects.
|
||||
*/
|
||||
patterns;
|
||||
/**
|
||||
* All options are stored as properties on the `Glob` object.
|
||||
*
|
||||
* See {@link GlobOptions} for full options descriptions.
|
||||
*
|
||||
* Note that a previous `Glob` object can be passed as the
|
||||
* `GlobOptions` to another `Glob` instantiation to re-use settings
|
||||
* and caches with a new pattern.
|
||||
*
|
||||
* Traversal functions can be called multiple times to run the walk
|
||||
* again.
|
||||
*/
|
||||
constructor(pattern, opts) {
|
||||
/* c8 ignore start */
|
||||
if (!opts)
|
||||
throw new TypeError('glob options required');
|
||||
/* c8 ignore stop */
|
||||
this.withFileTypes = !!opts.withFileTypes;
|
||||
this.signal = opts.signal;
|
||||
this.follow = !!opts.follow;
|
||||
this.dot = !!opts.dot;
|
||||
this.dotRelative = !!opts.dotRelative;
|
||||
this.nodir = !!opts.nodir;
|
||||
this.mark = !!opts.mark;
|
||||
if (!opts.cwd) {
|
||||
this.cwd = '';
|
||||
}
|
||||
else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) {
|
||||
opts.cwd = fileURLToPath(opts.cwd);
|
||||
}
|
||||
this.cwd = opts.cwd || '';
|
||||
this.root = opts.root;
|
||||
this.magicalBraces = !!opts.magicalBraces;
|
||||
this.nobrace = !!opts.nobrace;
|
||||
this.noext = !!opts.noext;
|
||||
this.realpath = !!opts.realpath;
|
||||
this.absolute = opts.absolute;
|
||||
this.noglobstar = !!opts.noglobstar;
|
||||
this.matchBase = !!opts.matchBase;
|
||||
this.maxDepth =
|
||||
typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity;
|
||||
this.stat = !!opts.stat;
|
||||
this.ignore = opts.ignore;
|
||||
if (this.withFileTypes && this.absolute !== undefined) {
|
||||
throw new Error('cannot set absolute and withFileTypes:true');
|
||||
}
|
||||
if (typeof pattern === 'string') {
|
||||
pattern = [pattern];
|
||||
}
|
||||
this.windowsPathsNoEscape =
|
||||
!!opts.windowsPathsNoEscape ||
|
||||
opts.allowWindowsEscape === false;
|
||||
if (this.windowsPathsNoEscape) {
|
||||
pattern = pattern.map(p => p.replace(/\\/g, '/'));
|
||||
}
|
||||
if (this.matchBase) {
|
||||
if (opts.noglobstar) {
|
||||
throw new TypeError('base matching requires globstar');
|
||||
}
|
||||
pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`));
|
||||
}
|
||||
this.pattern = pattern;
|
||||
this.platform = opts.platform || defaultPlatform;
|
||||
this.opts = { ...opts, platform: this.platform };
|
||||
if (opts.scurry) {
|
||||
this.scurry = opts.scurry;
|
||||
if (opts.nocase !== undefined &&
|
||||
opts.nocase !== opts.scurry.nocase) {
|
||||
throw new Error('nocase option contradicts provided scurry option');
|
||||
}
|
||||
}
|
||||
else {
|
||||
const Scurry = opts.platform === 'win32'
|
||||
? PathScurryWin32
|
||||
: opts.platform === 'darwin'
|
||||
? PathScurryDarwin
|
||||
: opts.platform
|
||||
? PathScurryPosix
|
||||
: PathScurry;
|
||||
this.scurry = new Scurry(this.cwd, {
|
||||
nocase: opts.nocase,
|
||||
fs: opts.fs,
|
||||
});
|
||||
}
|
||||
this.nocase = this.scurry.nocase;
|
||||
// If you do nocase:true on a case-sensitive file system, then
|
||||
// we need to use regexps instead of strings for non-magic
|
||||
// path portions, because statting `aBc` won't return results
|
||||
// for the file `AbC` for example.
|
||||
const nocaseMagicOnly = this.platform === 'darwin' || this.platform === 'win32';
|
||||
const mmo = {
|
||||
// default nocase based on platform
|
||||
...opts,
|
||||
dot: this.dot,
|
||||
matchBase: this.matchBase,
|
||||
nobrace: this.nobrace,
|
||||
nocase: this.nocase,
|
||||
nocaseMagicOnly,
|
||||
nocomment: true,
|
||||
noext: this.noext,
|
||||
nonegate: true,
|
||||
optimizationLevel: 2,
|
||||
platform: this.platform,
|
||||
windowsPathsNoEscape: this.windowsPathsNoEscape,
|
||||
debug: !!this.opts.debug,
|
||||
};
|
||||
const mms = this.pattern.map(p => new Minimatch(p, mmo));
|
||||
const [matchSet, globParts] = mms.reduce((set, m) => {
|
||||
set[0].push(...m.set);
|
||||
set[1].push(...m.globParts);
|
||||
return set;
|
||||
}, [[], []]);
|
||||
this.patterns = matchSet.map((set, i) => {
|
||||
const g = globParts[i];
|
||||
/* c8 ignore start */
|
||||
if (!g)
|
||||
throw new Error('invalid pattern object');
|
||||
/* c8 ignore stop */
|
||||
return new Pattern(set, g, 0, this.platform);
|
||||
});
|
||||
}
|
||||
async walk() {
|
||||
// Walkers always return array of Path objects, so we just have to
|
||||
// coerce them into the right shape. It will have already called
|
||||
// realpath() if the option was set to do so, so we know that's cached.
|
||||
// start out knowing the cwd, at least
|
||||
return [
|
||||
...(await new GlobWalker(this.patterns, this.scurry.cwd, {
|
||||
...this.opts,
|
||||
maxDepth: this.maxDepth !== Infinity
|
||||
? this.maxDepth + this.scurry.cwd.depth()
|
||||
: Infinity,
|
||||
platform: this.platform,
|
||||
nocase: this.nocase,
|
||||
}).walk()),
|
||||
];
|
||||
}
|
||||
walkSync() {
|
||||
return [
|
||||
...new GlobWalker(this.patterns, this.scurry.cwd, {
|
||||
...this.opts,
|
||||
maxDepth: this.maxDepth !== Infinity
|
||||
? this.maxDepth + this.scurry.cwd.depth()
|
||||
: Infinity,
|
||||
platform: this.platform,
|
||||
nocase: this.nocase,
|
||||
}).walkSync(),
|
||||
];
|
||||
}
|
||||
stream() {
|
||||
return new GlobStream(this.patterns, this.scurry.cwd, {
|
||||
...this.opts,
|
||||
maxDepth: this.maxDepth !== Infinity
|
||||
? this.maxDepth + this.scurry.cwd.depth()
|
||||
: Infinity,
|
||||
platform: this.platform,
|
||||
nocase: this.nocase,
|
||||
}).stream();
|
||||
}
|
||||
streamSync() {
|
||||
return new GlobStream(this.patterns, this.scurry.cwd, {
|
||||
...this.opts,
|
||||
maxDepth: this.maxDepth !== Infinity
|
||||
? this.maxDepth + this.scurry.cwd.depth()
|
||||
: Infinity,
|
||||
platform: this.platform,
|
||||
nocase: this.nocase,
|
||||
}).streamSync();
|
||||
}
|
||||
/**
|
||||
* Default sync iteration function. Returns a Generator that
|
||||
* iterates over the results.
|
||||
*/
|
||||
iterateSync() {
|
||||
return this.streamSync()[Symbol.iterator]();
|
||||
}
|
||||
[Symbol.iterator]() {
|
||||
return this.iterateSync();
|
||||
}
|
||||
/**
|
||||
* Default async iteration function. Returns an AsyncGenerator that
|
||||
* iterates over the results.
|
||||
*/
|
||||
iterate() {
|
||||
return this.stream()[Symbol.asyncIterator]();
|
||||
}
|
||||
[Symbol.asyncIterator]() {
|
||||
return this.iterate();
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=glob.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/glob.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/glob.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/has-magic.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/has-magic.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"has-magic.d.ts","sourceRoot":"","sources":["../../src/has-magic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,YACV,MAAM,GAAG,MAAM,EAAE,YACjB,WAAW,KACnB,OAQF,CAAA"}
|
||||
23
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/has-magic.js
generated
vendored
Normal file
23
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/has-magic.js
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
import { Minimatch } from 'minimatch';
|
||||
/**
|
||||
* Return true if the patterns provided contain any magic glob characters,
|
||||
* given the options provided.
|
||||
*
|
||||
* Brace expansion is not considered "magic" unless the `magicalBraces` option
|
||||
* is set, as brace expansion just turns one string into an array of strings.
|
||||
* So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and
|
||||
* `'xby'` both do not contain any magic glob characters, and it's treated the
|
||||
* same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`
|
||||
* is in the options, brace expansion _is_ treated as a pattern having magic.
|
||||
*/
|
||||
export const hasMagic = (pattern, options = {}) => {
|
||||
if (!Array.isArray(pattern)) {
|
||||
pattern = [pattern];
|
||||
}
|
||||
for (const p of pattern) {
|
||||
if (new Minimatch(p, options).hasMagic())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
//# sourceMappingURL=has-magic.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/has-magic.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/has-magic.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"has-magic.js","sourceRoot":"","sources":["../../src/has-magic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAGrC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,OAA0B,EAC1B,UAAuB,EAAE,EAChB,EAAE;IACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,GAAG,CAAC,OAAO,CAAC,CAAA;KACpB;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;QACvB,IAAI,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE;YAAE,OAAO,IAAI,CAAA;KACtD;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import { Minimatch } from 'minimatch'\nimport { GlobOptions } from './glob.js'\n\n/**\n * Return true if the patterns provided contain any magic glob characters,\n * given the options provided.\n *\n * Brace expansion is not considered \"magic\" unless the `magicalBraces` option\n * is set, as brace expansion just turns one string into an array of strings.\n * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and\n * `'xby'` both do not contain any magic glob characters, and it's treated the\n * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`\n * is in the options, brace expansion _is_ treated as a pattern having magic.\n */\nexport const hasMagic = (\n pattern: string | string[],\n options: GlobOptions = {}\n): boolean => {\n if (!Array.isArray(pattern)) {\n pattern = [pattern]\n }\n for (const p of pattern) {\n if (new Minimatch(p, options).hasMagic()) return true\n }\n return false\n}\n"]}
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/ignore.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/ignore.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IAC9B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;CACvC;AASD;;GAEG;AACH,qBAAa,MAAO,YAAW,UAAU;IACvC,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;gBAG3B,OAAO,EAAE,MAAM,EAAE,EACjB,EACE,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAA0B,GAC3B,EAAE,cAAc;IA4DnB,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAczB,eAAe,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;CAWlC"}
|
||||
110
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/ignore.js
generated
vendored
Normal file
110
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/ignore.js
generated
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
// give it a pattern, and it'll be able to tell you if
|
||||
// a given path should be ignored.
|
||||
// Ignoring a path ignores its children if the pattern ends in /**
|
||||
// Ignores are always parsed in dot:true mode
|
||||
import { Minimatch } from 'minimatch';
|
||||
import { Pattern } from './pattern.js';
|
||||
const defaultPlatform = typeof process === 'object' &&
|
||||
process &&
|
||||
typeof process.platform === 'string'
|
||||
? process.platform
|
||||
: 'linux';
|
||||
/**
|
||||
* Class used to process ignored patterns
|
||||
*/
|
||||
export class Ignore {
|
||||
relative;
|
||||
relativeChildren;
|
||||
absolute;
|
||||
absoluteChildren;
|
||||
constructor(ignored, { nobrace, nocase, noext, noglobstar, platform = defaultPlatform, }) {
|
||||
this.relative = [];
|
||||
this.absolute = [];
|
||||
this.relativeChildren = [];
|
||||
this.absoluteChildren = [];
|
||||
const mmopts = {
|
||||
dot: true,
|
||||
nobrace,
|
||||
nocase,
|
||||
noext,
|
||||
noglobstar,
|
||||
optimizationLevel: 2,
|
||||
platform,
|
||||
nocomment: true,
|
||||
nonegate: true,
|
||||
};
|
||||
// this is a little weird, but it gives us a clean set of optimized
|
||||
// minimatch matchers, without getting tripped up if one of them
|
||||
// ends in /** inside a brace section, and it's only inefficient at
|
||||
// the start of the walk, not along it.
|
||||
// It'd be nice if the Pattern class just had a .test() method, but
|
||||
// handling globstars is a bit of a pita, and that code already lives
|
||||
// in minimatch anyway.
|
||||
// Another way would be if maybe Minimatch could take its set/globParts
|
||||
// as an option, and then we could at least just use Pattern to test
|
||||
// for absolute-ness.
|
||||
// Yet another way, Minimatch could take an array of glob strings, and
|
||||
// a cwd option, and do the right thing.
|
||||
for (const ign of ignored) {
|
||||
const mm = new Minimatch(ign, mmopts);
|
||||
for (let i = 0; i < mm.set.length; i++) {
|
||||
const parsed = mm.set[i];
|
||||
const globParts = mm.globParts[i];
|
||||
/* c8 ignore start */
|
||||
if (!parsed || !globParts) {
|
||||
throw new Error('invalid pattern object');
|
||||
}
|
||||
// strip off leading ./ portions
|
||||
// https://github.com/isaacs/node-glob/issues/570
|
||||
while (parsed[0] === '.' && globParts[0] === '.') {
|
||||
parsed.shift();
|
||||
globParts.shift();
|
||||
}
|
||||
/* c8 ignore stop */
|
||||
const p = new Pattern(parsed, globParts, 0, platform);
|
||||
const m = new Minimatch(p.globString(), mmopts);
|
||||
const children = globParts[globParts.length - 1] === '**';
|
||||
const absolute = p.isAbsolute();
|
||||
if (absolute)
|
||||
this.absolute.push(m);
|
||||
else
|
||||
this.relative.push(m);
|
||||
if (children) {
|
||||
if (absolute)
|
||||
this.absoluteChildren.push(m);
|
||||
else
|
||||
this.relativeChildren.push(m);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ignored(p) {
|
||||
const fullpath = p.fullpath();
|
||||
const fullpaths = `${fullpath}/`;
|
||||
const relative = p.relative() || '.';
|
||||
const relatives = `${relative}/`;
|
||||
for (const m of this.relative) {
|
||||
if (m.match(relative) || m.match(relatives))
|
||||
return true;
|
||||
}
|
||||
for (const m of this.absolute) {
|
||||
if (m.match(fullpath) || m.match(fullpaths))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
childrenIgnored(p) {
|
||||
const fullpath = p.fullpath() + '/';
|
||||
const relative = (p.relative() || '.') + '/';
|
||||
for (const m of this.relativeChildren) {
|
||||
if (m.match(relative))
|
||||
return true;
|
||||
}
|
||||
for (const m of this.absoluteChildren) {
|
||||
if (m.match(fullpath))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=ignore.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/ignore.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/ignore.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/index.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/index.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
||||
56
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/index.js
generated
vendored
Normal file
56
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/index.js
generated
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
import { escape, unescape } from 'minimatch';
|
||||
import { Glob } from './glob.js';
|
||||
import { hasMagic } from './has-magic.js';
|
||||
export function globStreamSync(pattern, options = {}) {
|
||||
return new Glob(pattern, options).streamSync();
|
||||
}
|
||||
export function globStream(pattern, options = {}) {
|
||||
return new Glob(pattern, options).stream();
|
||||
}
|
||||
export function globSync(pattern, options = {}) {
|
||||
return new Glob(pattern, options).walkSync();
|
||||
}
|
||||
async function glob_(pattern, options = {}) {
|
||||
return new Glob(pattern, options).walk();
|
||||
}
|
||||
export function globIterateSync(pattern, options = {}) {
|
||||
return new Glob(pattern, options).iterateSync();
|
||||
}
|
||||
export function globIterate(pattern, options = {}) {
|
||||
return new Glob(pattern, options).iterate();
|
||||
}
|
||||
// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc
|
||||
export const streamSync = globStreamSync;
|
||||
export const stream = Object.assign(globStream, { sync: globStreamSync });
|
||||
export const iterateSync = globIterateSync;
|
||||
export const iterate = Object.assign(globIterate, {
|
||||
sync: globIterateSync,
|
||||
});
|
||||
export const sync = Object.assign(globSync, {
|
||||
stream: globStreamSync,
|
||||
iterate: globIterateSync,
|
||||
});
|
||||
/* c8 ignore start */
|
||||
export { escape, unescape } from 'minimatch';
|
||||
export { Glob } from './glob.js';
|
||||
export { hasMagic } from './has-magic.js';
|
||||
/* c8 ignore stop */
|
||||
export const glob = Object.assign(glob_, {
|
||||
glob: glob_,
|
||||
globSync,
|
||||
sync,
|
||||
globStream,
|
||||
stream,
|
||||
globStreamSync,
|
||||
streamSync,
|
||||
globIterate,
|
||||
iterate,
|
||||
globIterateSync,
|
||||
iterateSync,
|
||||
Glob,
|
||||
hasMagic,
|
||||
escape,
|
||||
unescape,
|
||||
});
|
||||
glob.glob = glob;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/index.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
3
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/package.json
generated
vendored
Normal file
3
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/package.json
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"type": "module"
|
||||
}
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/pattern.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/pattern.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,QAAQ,CAAA;AAGzD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,GAAG,IAAI,EAAE,SAAS,EAAE;CACrB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAMrD;;;GAGG;AACH,qBAAa,OAAO;;IAIlB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAUrB,WAAW,EAAE,SAAS,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;IA6D3B;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAGnB;;OAEG;IACH,UAAU,IAAI,OAAO;IAGrB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,UAAU,IAAI,MAAM;IAUpB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,IAAI,OAAO,GAAG,IAAI;IAetB;;OAEG;IACH,KAAK,IAAI,OAAO;IAoBhB;;OAEG;IACH,OAAO,IAAI,OAAO;IAelB;;OAEG;IACH,UAAU,IAAI,OAAO;IAUrB;;OAEG;IACH,IAAI,IAAI,MAAM;IAOd;;;OAGG;IACH,mBAAmB,IAAI,OAAO;IAQ9B;;OAEG;IACH,kBAAkB,IAAI,OAAO;CAM9B"}
|
||||
215
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/pattern.js
generated
vendored
Normal file
215
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/pattern.js
generated
vendored
Normal file
@@ -0,0 +1,215 @@
|
||||
// this is just a very light wrapper around 2 arrays with an offset index
|
||||
import { GLOBSTAR } from 'minimatch';
|
||||
const isPatternList = (pl) => pl.length >= 1;
|
||||
const isGlobList = (gl) => gl.length >= 1;
|
||||
/**
|
||||
* An immutable-ish view on an array of glob parts and their parsed
|
||||
* results
|
||||
*/
|
||||
export class Pattern {
|
||||
#patternList;
|
||||
#globList;
|
||||
#index;
|
||||
length;
|
||||
#platform;
|
||||
#rest;
|
||||
#globString;
|
||||
#isDrive;
|
||||
#isUNC;
|
||||
#isAbsolute;
|
||||
#followGlobstar = true;
|
||||
constructor(patternList, globList, index, platform) {
|
||||
if (!isPatternList(patternList)) {
|
||||
throw new TypeError('empty pattern list');
|
||||
}
|
||||
if (!isGlobList(globList)) {
|
||||
throw new TypeError('empty glob list');
|
||||
}
|
||||
if (globList.length !== patternList.length) {
|
||||
throw new TypeError('mismatched pattern list and glob list lengths');
|
||||
}
|
||||
this.length = patternList.length;
|
||||
if (index < 0 || index >= this.length) {
|
||||
throw new TypeError('index out of range');
|
||||
}
|
||||
this.#patternList = patternList;
|
||||
this.#globList = globList;
|
||||
this.#index = index;
|
||||
this.#platform = platform;
|
||||
// normalize root entries of absolute patterns on initial creation.
|
||||
if (this.#index === 0) {
|
||||
// c: => ['c:/']
|
||||
// C:/ => ['C:/']
|
||||
// C:/x => ['C:/', 'x']
|
||||
// //host/share => ['//host/share/']
|
||||
// //host/share/ => ['//host/share/']
|
||||
// //host/share/x => ['//host/share/', 'x']
|
||||
// /etc => ['/', 'etc']
|
||||
// / => ['/']
|
||||
if (this.isUNC()) {
|
||||
// '' / '' / 'host' / 'share'
|
||||
const [p0, p1, p2, p3, ...prest] = this.#patternList;
|
||||
const [g0, g1, g2, g3, ...grest] = this.#globList;
|
||||
if (prest[0] === '') {
|
||||
// ends in /
|
||||
prest.shift();
|
||||
grest.shift();
|
||||
}
|
||||
const p = [p0, p1, p2, p3, ''].join('/');
|
||||
const g = [g0, g1, g2, g3, ''].join('/');
|
||||
this.#patternList = [p, ...prest];
|
||||
this.#globList = [g, ...grest];
|
||||
this.length = this.#patternList.length;
|
||||
}
|
||||
else if (this.isDrive() || this.isAbsolute()) {
|
||||
const [p1, ...prest] = this.#patternList;
|
||||
const [g1, ...grest] = this.#globList;
|
||||
if (prest[0] === '') {
|
||||
// ends in /
|
||||
prest.shift();
|
||||
grest.shift();
|
||||
}
|
||||
const p = p1 + '/';
|
||||
const g = g1 + '/';
|
||||
this.#patternList = [p, ...prest];
|
||||
this.#globList = [g, ...grest];
|
||||
this.length = this.#patternList.length;
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* The first entry in the parsed list of patterns
|
||||
*/
|
||||
pattern() {
|
||||
return this.#patternList[this.#index];
|
||||
}
|
||||
/**
|
||||
* true of if pattern() returns a string
|
||||
*/
|
||||
isString() {
|
||||
return typeof this.#patternList[this.#index] === 'string';
|
||||
}
|
||||
/**
|
||||
* true of if pattern() returns GLOBSTAR
|
||||
*/
|
||||
isGlobstar() {
|
||||
return this.#patternList[this.#index] === GLOBSTAR;
|
||||
}
|
||||
/**
|
||||
* true if pattern() returns a regexp
|
||||
*/
|
||||
isRegExp() {
|
||||
return this.#patternList[this.#index] instanceof RegExp;
|
||||
}
|
||||
/**
|
||||
* The /-joined set of glob parts that make up this pattern
|
||||
*/
|
||||
globString() {
|
||||
return (this.#globString =
|
||||
this.#globString ||
|
||||
(this.#index === 0
|
||||
? this.isAbsolute()
|
||||
? this.#globList[0] + this.#globList.slice(1).join('/')
|
||||
: this.#globList.join('/')
|
||||
: this.#globList.slice(this.#index).join('/')));
|
||||
}
|
||||
/**
|
||||
* true if there are more pattern parts after this one
|
||||
*/
|
||||
hasMore() {
|
||||
return this.length > this.#index + 1;
|
||||
}
|
||||
/**
|
||||
* The rest of the pattern after this part, or null if this is the end
|
||||
*/
|
||||
rest() {
|
||||
if (this.#rest !== undefined)
|
||||
return this.#rest;
|
||||
if (!this.hasMore())
|
||||
return (this.#rest = null);
|
||||
this.#rest = new Pattern(this.#patternList, this.#globList, this.#index + 1, this.#platform);
|
||||
this.#rest.#isAbsolute = this.#isAbsolute;
|
||||
this.#rest.#isUNC = this.#isUNC;
|
||||
this.#rest.#isDrive = this.#isDrive;
|
||||
return this.#rest;
|
||||
}
|
||||
/**
|
||||
* true if the pattern represents a //unc/path/ on windows
|
||||
*/
|
||||
isUNC() {
|
||||
const pl = this.#patternList;
|
||||
return this.#isUNC !== undefined
|
||||
? this.#isUNC
|
||||
: (this.#isUNC =
|
||||
this.#platform === 'win32' &&
|
||||
this.#index === 0 &&
|
||||
pl[0] === '' &&
|
||||
pl[1] === '' &&
|
||||
typeof pl[2] === 'string' &&
|
||||
!!pl[2] &&
|
||||
typeof pl[3] === 'string' &&
|
||||
!!pl[3]);
|
||||
}
|
||||
// pattern like C:/...
|
||||
// split = ['C:', ...]
|
||||
// XXX: would be nice to handle patterns like `c:*` to test the cwd
|
||||
// in c: for *, but I don't know of a way to even figure out what that
|
||||
// cwd is without actually chdir'ing into it?
|
||||
/**
|
||||
* True if the pattern starts with a drive letter on Windows
|
||||
*/
|
||||
isDrive() {
|
||||
const pl = this.#patternList;
|
||||
return this.#isDrive !== undefined
|
||||
? this.#isDrive
|
||||
: (this.#isDrive =
|
||||
this.#platform === 'win32' &&
|
||||
this.#index === 0 &&
|
||||
this.length > 1 &&
|
||||
typeof pl[0] === 'string' &&
|
||||
/^[a-z]:$/i.test(pl[0]));
|
||||
}
|
||||
// pattern = '/' or '/...' or '/x/...'
|
||||
// split = ['', ''] or ['', ...] or ['', 'x', ...]
|
||||
// Drive and UNC both considered absolute on windows
|
||||
/**
|
||||
* True if the pattern is rooted on an absolute path
|
||||
*/
|
||||
isAbsolute() {
|
||||
const pl = this.#patternList;
|
||||
return this.#isAbsolute !== undefined
|
||||
? this.#isAbsolute
|
||||
: (this.#isAbsolute =
|
||||
(pl[0] === '' && pl.length > 1) ||
|
||||
this.isDrive() ||
|
||||
this.isUNC());
|
||||
}
|
||||
/**
|
||||
* consume the root of the pattern, and return it
|
||||
*/
|
||||
root() {
|
||||
const p = this.#patternList[0];
|
||||
return typeof p === 'string' && this.isAbsolute() && this.#index === 0
|
||||
? p
|
||||
: '';
|
||||
}
|
||||
/**
|
||||
* Check to see if the current globstar pattern is allowed to follow
|
||||
* a symbolic link.
|
||||
*/
|
||||
checkFollowGlobstar() {
|
||||
return !(this.#index === 0 ||
|
||||
!this.isGlobstar() ||
|
||||
!this.#followGlobstar);
|
||||
}
|
||||
/**
|
||||
* Mark that the current globstar pattern is following a symbolic link
|
||||
*/
|
||||
markFollowGlobstar() {
|
||||
if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)
|
||||
return false;
|
||||
this.#followGlobstar = false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=pattern.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/pattern.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/pattern.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/processor.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/processor.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAa,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C;;GAEG;AACH,qBAAa,cAAc;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;gBACnB,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAGvD,IAAI;IAGJ,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAGxC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;CAM3C;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACtB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY;IACpC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAMnD,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;CAOtC;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACnB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAY;IACvC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAWlC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,EAAE;IAS5B,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;IAG9B,IAAI,IAAI,IAAI,EAAE;CAGf;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,cAAoB;IAC3B,QAAQ,WAAiB;IACzB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;gBAER,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,cAAc;IASjE,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;IAmGjD,cAAc,IAAI,IAAI,EAAE;IAIxB,KAAK;IAQL,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS;IAqBvD,YAAY,CACV,CAAC,EAAE,IAAI,EACP,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IA8CnB,UAAU,CACR,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,QAAQ,EACX,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IAUnB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO;CASvE"}
|
||||
295
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/processor.js
generated
vendored
Normal file
295
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/processor.js
generated
vendored
Normal file
@@ -0,0 +1,295 @@
|
||||
// synchronous utility for filtering entries and calculating subwalks
|
||||
import { GLOBSTAR } from 'minimatch';
|
||||
/**
|
||||
* A cache of which patterns have been processed for a given Path
|
||||
*/
|
||||
export class HasWalkedCache {
|
||||
store;
|
||||
constructor(store = new Map()) {
|
||||
this.store = store;
|
||||
}
|
||||
copy() {
|
||||
return new HasWalkedCache(new Map(this.store));
|
||||
}
|
||||
hasWalked(target, pattern) {
|
||||
return this.store.get(target.fullpath())?.has(pattern.globString());
|
||||
}
|
||||
storeWalked(target, pattern) {
|
||||
const fullpath = target.fullpath();
|
||||
const cached = this.store.get(fullpath);
|
||||
if (cached)
|
||||
cached.add(pattern.globString());
|
||||
else
|
||||
this.store.set(fullpath, new Set([pattern.globString()]));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* A record of which paths have been matched in a given walk step,
|
||||
* and whether they only are considered a match if they are a directory,
|
||||
* and whether their absolute or relative path should be returned.
|
||||
*/
|
||||
export class MatchRecord {
|
||||
store = new Map();
|
||||
add(target, absolute, ifDir) {
|
||||
const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0);
|
||||
const current = this.store.get(target);
|
||||
this.store.set(target, current === undefined ? n : n & current);
|
||||
}
|
||||
// match, absolute, ifdir
|
||||
entries() {
|
||||
return [...this.store.entries()].map(([path, n]) => [
|
||||
path,
|
||||
!!(n & 2),
|
||||
!!(n & 1),
|
||||
]);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* A collection of patterns that must be processed in a subsequent step
|
||||
* for a given path.
|
||||
*/
|
||||
export class SubWalks {
|
||||
store = new Map();
|
||||
add(target, pattern) {
|
||||
if (!target.canReaddir()) {
|
||||
return;
|
||||
}
|
||||
const subs = this.store.get(target);
|
||||
if (subs) {
|
||||
if (!subs.find(p => p.globString() === pattern.globString())) {
|
||||
subs.push(pattern);
|
||||
}
|
||||
}
|
||||
else
|
||||
this.store.set(target, [pattern]);
|
||||
}
|
||||
get(target) {
|
||||
const subs = this.store.get(target);
|
||||
/* c8 ignore start */
|
||||
if (!subs) {
|
||||
throw new Error('attempting to walk unknown path');
|
||||
}
|
||||
/* c8 ignore stop */
|
||||
return subs;
|
||||
}
|
||||
entries() {
|
||||
return this.keys().map(k => [k, this.store.get(k)]);
|
||||
}
|
||||
keys() {
|
||||
return [...this.store.keys()].filter(t => t.canReaddir());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* The class that processes patterns for a given path.
|
||||
*
|
||||
* Handles child entry filtering, and determining whether a path's
|
||||
* directory contents must be read.
|
||||
*/
|
||||
export class Processor {
|
||||
hasWalkedCache;
|
||||
matches = new MatchRecord();
|
||||
subwalks = new SubWalks();
|
||||
patterns;
|
||||
follow;
|
||||
dot;
|
||||
opts;
|
||||
constructor(opts, hasWalkedCache) {
|
||||
this.opts = opts;
|
||||
this.follow = !!opts.follow;
|
||||
this.dot = !!opts.dot;
|
||||
this.hasWalkedCache = hasWalkedCache
|
||||
? hasWalkedCache.copy()
|
||||
: new HasWalkedCache();
|
||||
}
|
||||
processPatterns(target, patterns) {
|
||||
this.patterns = patterns;
|
||||
const processingSet = patterns.map(p => [target, p]);
|
||||
// map of paths to the magic-starting subwalks they need to walk
|
||||
// first item in patterns is the filter
|
||||
for (let [t, pattern] of processingSet) {
|
||||
this.hasWalkedCache.storeWalked(t, pattern);
|
||||
const root = pattern.root();
|
||||
const absolute = pattern.isAbsolute() && this.opts.absolute !== false;
|
||||
// start absolute patterns at root
|
||||
if (root) {
|
||||
t = t.resolve(root === '/' && this.opts.root !== undefined
|
||||
? this.opts.root
|
||||
: root);
|
||||
const rest = pattern.rest();
|
||||
if (!rest) {
|
||||
this.matches.add(t, true, false);
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
pattern = rest;
|
||||
}
|
||||
}
|
||||
if (t.isENOENT())
|
||||
continue;
|
||||
let p;
|
||||
let rest;
|
||||
let changed = false;
|
||||
while (typeof (p = pattern.pattern()) === 'string' &&
|
||||
(rest = pattern.rest())) {
|
||||
const c = t.resolve(p);
|
||||
t = c;
|
||||
pattern = rest;
|
||||
changed = true;
|
||||
}
|
||||
p = pattern.pattern();
|
||||
rest = pattern.rest();
|
||||
if (changed) {
|
||||
if (this.hasWalkedCache.hasWalked(t, pattern))
|
||||
continue;
|
||||
this.hasWalkedCache.storeWalked(t, pattern);
|
||||
}
|
||||
// now we have either a final string for a known entry,
|
||||
// more strings for an unknown entry,
|
||||
// or a pattern starting with magic, mounted on t.
|
||||
if (typeof p === 'string') {
|
||||
// must not be final entry, otherwise we would have
|
||||
// concatenated it earlier.
|
||||
const ifDir = p === '..' || p === '' || p === '.';
|
||||
this.matches.add(t.resolve(p), absolute, ifDir);
|
||||
continue;
|
||||
}
|
||||
else if (p === GLOBSTAR) {
|
||||
// if no rest, match and subwalk pattern
|
||||
// if rest, process rest and subwalk pattern
|
||||
// if it's a symlink, but we didn't get here by way of a
|
||||
// globstar match (meaning it's the first time THIS globstar
|
||||
// has traversed a symlink), then we follow it. Otherwise, stop.
|
||||
if (!t.isSymbolicLink() ||
|
||||
this.follow ||
|
||||
pattern.checkFollowGlobstar()) {
|
||||
this.subwalks.add(t, pattern);
|
||||
}
|
||||
const rp = rest?.pattern();
|
||||
const rrest = rest?.rest();
|
||||
if (!rest || ((rp === '' || rp === '.') && !rrest)) {
|
||||
// only HAS to be a dir if it ends in **/ or **/.
|
||||
// but ending in ** will match files as well.
|
||||
this.matches.add(t, absolute, rp === '' || rp === '.');
|
||||
}
|
||||
else {
|
||||
if (rp === '..') {
|
||||
// this would mean you're matching **/.. at the fs root,
|
||||
// and no thanks, I'm not gonna test that specific case.
|
||||
/* c8 ignore start */
|
||||
const tp = t.parent || t;
|
||||
/* c8 ignore stop */
|
||||
if (!rrest)
|
||||
this.matches.add(tp, absolute, true);
|
||||
else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {
|
||||
this.subwalks.add(tp, rrest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (p instanceof RegExp) {
|
||||
this.subwalks.add(t, pattern);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
subwalkTargets() {
|
||||
return this.subwalks.keys();
|
||||
}
|
||||
child() {
|
||||
return new Processor(this.opts, this.hasWalkedCache);
|
||||
}
|
||||
// return a new Processor containing the subwalks for each
|
||||
// child entry, and a set of matches, and
|
||||
// a hasWalkedCache that's a copy of this one
|
||||
// then we're going to call
|
||||
filterEntries(parent, entries) {
|
||||
const patterns = this.subwalks.get(parent);
|
||||
// put matches and entry walks into the results processor
|
||||
const results = this.child();
|
||||
for (const e of entries) {
|
||||
for (const pattern of patterns) {
|
||||
const absolute = pattern.isAbsolute();
|
||||
const p = pattern.pattern();
|
||||
const rest = pattern.rest();
|
||||
if (p === GLOBSTAR) {
|
||||
results.testGlobstar(e, pattern, rest, absolute);
|
||||
}
|
||||
else if (p instanceof RegExp) {
|
||||
results.testRegExp(e, p, rest, absolute);
|
||||
}
|
||||
else {
|
||||
results.testString(e, p, rest, absolute);
|
||||
}
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
testGlobstar(e, pattern, rest, absolute) {
|
||||
if (this.dot || !e.name.startsWith('.')) {
|
||||
if (!pattern.hasMore()) {
|
||||
this.matches.add(e, absolute, false);
|
||||
}
|
||||
if (e.canReaddir()) {
|
||||
// if we're in follow mode or it's not a symlink, just keep
|
||||
// testing the same pattern. If there's more after the globstar,
|
||||
// then this symlink consumes the globstar. If not, then we can
|
||||
// follow at most ONE symlink along the way, so we mark it, which
|
||||
// also checks to ensure that it wasn't already marked.
|
||||
if (this.follow || !e.isSymbolicLink()) {
|
||||
this.subwalks.add(e, pattern);
|
||||
}
|
||||
else if (e.isSymbolicLink()) {
|
||||
if (rest && pattern.checkFollowGlobstar()) {
|
||||
this.subwalks.add(e, rest);
|
||||
}
|
||||
else if (pattern.markFollowGlobstar()) {
|
||||
this.subwalks.add(e, pattern);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if the NEXT thing matches this entry, then also add
|
||||
// the rest.
|
||||
if (rest) {
|
||||
const rp = rest.pattern();
|
||||
if (typeof rp === 'string' &&
|
||||
// dots and empty were handled already
|
||||
rp !== '..' &&
|
||||
rp !== '' &&
|
||||
rp !== '.') {
|
||||
this.testString(e, rp, rest.rest(), absolute);
|
||||
}
|
||||
else if (rp === '..') {
|
||||
/* c8 ignore start */
|
||||
const ep = e.parent || e;
|
||||
/* c8 ignore stop */
|
||||
this.subwalks.add(ep, rest);
|
||||
}
|
||||
else if (rp instanceof RegExp) {
|
||||
this.testRegExp(e, rp, rest.rest(), absolute);
|
||||
}
|
||||
}
|
||||
}
|
||||
testRegExp(e, p, rest, absolute) {
|
||||
if (!p.test(e.name))
|
||||
return;
|
||||
if (!rest) {
|
||||
this.matches.add(e, absolute, false);
|
||||
}
|
||||
else {
|
||||
this.subwalks.add(e, rest);
|
||||
}
|
||||
}
|
||||
testString(e, p, rest, absolute) {
|
||||
// should never happen?
|
||||
if (!e.isNamed(p))
|
||||
return;
|
||||
if (!rest) {
|
||||
this.matches.add(e, absolute, false);
|
||||
}
|
||||
else {
|
||||
this.subwalks.add(e, rest);
|
||||
}
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=processor.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/processor.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/processor.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/walker.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/walker.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"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"}
|
||||
372
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/walker.js
generated
vendored
Normal file
372
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/walker.js
generated
vendored
Normal file
@@ -0,0 +1,372 @@
|
||||
/**
|
||||
* Single-use utility classes to provide functionality to the {@link Glob}
|
||||
* methods.
|
||||
*
|
||||
* @module
|
||||
*/
|
||||
import { Minipass } from 'minipass';
|
||||
import { Ignore } from './ignore.js';
|
||||
import { Processor } from './processor.js';
|
||||
const makeIgnore = (ignore, opts) => typeof ignore === 'string'
|
||||
? new Ignore([ignore], opts)
|
||||
: Array.isArray(ignore)
|
||||
? new Ignore(ignore, opts)
|
||||
: ignore;
|
||||
/**
|
||||
* basic walking utilities that all the glob walker types use
|
||||
*/
|
||||
export class GlobUtil {
|
||||
path;
|
||||
patterns;
|
||||
opts;
|
||||
seen = new Set();
|
||||
paused = false;
|
||||
aborted = false;
|
||||
#onResume = [];
|
||||
#ignore;
|
||||
#sep;
|
||||
signal;
|
||||
maxDepth;
|
||||
constructor(patterns, path, opts) {
|
||||
this.patterns = patterns;
|
||||
this.path = path;
|
||||
this.opts = opts;
|
||||
this.#sep = !opts.posix && opts.platform === 'win32' ? '\\' : '/';
|
||||
if (opts.ignore) {
|
||||
this.#ignore = makeIgnore(opts.ignore, opts);
|
||||
}
|
||||
// ignore, always set with maxDepth, but it's optional on the
|
||||
// GlobOptions type
|
||||
/* c8 ignore start */
|
||||
this.maxDepth = opts.maxDepth || Infinity;
|
||||
/* c8 ignore stop */
|
||||
if (opts.signal) {
|
||||
this.signal = opts.signal;
|
||||
this.signal.addEventListener('abort', () => {
|
||||
this.#onResume.length = 0;
|
||||
});
|
||||
}
|
||||
}
|
||||
#ignored(path) {
|
||||
return this.seen.has(path) || !!this.#ignore?.ignored?.(path);
|
||||
}
|
||||
#childrenIgnored(path) {
|
||||
return !!this.#ignore?.childrenIgnored?.(path);
|
||||
}
|
||||
// backpressure mechanism
|
||||
pause() {
|
||||
this.paused = true;
|
||||
}
|
||||
resume() {
|
||||
/* c8 ignore start */
|
||||
if (this.signal?.aborted)
|
||||
return;
|
||||
/* c8 ignore stop */
|
||||
this.paused = false;
|
||||
let fn = undefined;
|
||||
while (!this.paused && (fn = this.#onResume.shift())) {
|
||||
fn();
|
||||
}
|
||||
}
|
||||
onResume(fn) {
|
||||
if (this.signal?.aborted)
|
||||
return;
|
||||
/* c8 ignore start */
|
||||
if (!this.paused) {
|
||||
fn();
|
||||
}
|
||||
else {
|
||||
/* c8 ignore stop */
|
||||
this.#onResume.push(fn);
|
||||
}
|
||||
}
|
||||
// do the requisite realpath/stat checking, and return the path
|
||||
// to add or undefined to filter it out.
|
||||
async matchCheck(e, ifDir) {
|
||||
if (ifDir && this.opts.nodir)
|
||||
return undefined;
|
||||
let rpc;
|
||||
if (this.opts.realpath) {
|
||||
rpc = e.realpathCached() || (await e.realpath());
|
||||
if (!rpc)
|
||||
return undefined;
|
||||
e = rpc;
|
||||
}
|
||||
const needStat = e.isUnknown() || this.opts.stat;
|
||||
const s = needStat ? await e.lstat() : e;
|
||||
if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
|
||||
const target = await s.realpath();
|
||||
/* c8 ignore start */
|
||||
if (target && (target.isUnknown() || this.opts.stat)) {
|
||||
await target.lstat();
|
||||
}
|
||||
/* c8 ignore stop */
|
||||
}
|
||||
return this.matchCheckTest(s, ifDir);
|
||||
}
|
||||
matchCheckTest(e, ifDir) {
|
||||
return e &&
|
||||
(this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&
|
||||
(!ifDir || e.canReaddir()) &&
|
||||
(!this.opts.nodir || !e.isDirectory()) &&
|
||||
(!this.opts.nodir ||
|
||||
!this.opts.follow ||
|
||||
!e.isSymbolicLink() ||
|
||||
!e.realpathCached()?.isDirectory()) &&
|
||||
!this.#ignored(e)
|
||||
? e
|
||||
: undefined;
|
||||
}
|
||||
matchCheckSync(e, ifDir) {
|
||||
if (ifDir && this.opts.nodir)
|
||||
return undefined;
|
||||
let rpc;
|
||||
if (this.opts.realpath) {
|
||||
rpc = e.realpathCached() || e.realpathSync();
|
||||
if (!rpc)
|
||||
return undefined;
|
||||
e = rpc;
|
||||
}
|
||||
const needStat = e.isUnknown() || this.opts.stat;
|
||||
const s = needStat ? e.lstatSync() : e;
|
||||
if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
|
||||
const target = s.realpathSync();
|
||||
if (target && (target?.isUnknown() || this.opts.stat)) {
|
||||
target.lstatSync();
|
||||
}
|
||||
}
|
||||
return this.matchCheckTest(s, ifDir);
|
||||
}
|
||||
matchFinish(e, absolute) {
|
||||
if (this.#ignored(e))
|
||||
return;
|
||||
const abs = this.opts.absolute === undefined ? absolute : this.opts.absolute;
|
||||
this.seen.add(e);
|
||||
const mark = this.opts.mark && e.isDirectory() ? this.#sep : '';
|
||||
// ok, we have what we need!
|
||||
if (this.opts.withFileTypes) {
|
||||
this.matchEmit(e);
|
||||
}
|
||||
else if (abs) {
|
||||
const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath();
|
||||
this.matchEmit(abs + mark);
|
||||
}
|
||||
else {
|
||||
const rel = this.opts.posix ? e.relativePosix() : e.relative();
|
||||
const pre = this.opts.dotRelative && !rel.startsWith('..' + this.#sep)
|
||||
? '.' + this.#sep
|
||||
: '';
|
||||
this.matchEmit(!rel ? '.' + mark : pre + rel + mark);
|
||||
}
|
||||
}
|
||||
async match(e, absolute, ifDir) {
|
||||
const p = await this.matchCheck(e, ifDir);
|
||||
if (p)
|
||||
this.matchFinish(p, absolute);
|
||||
}
|
||||
matchSync(e, absolute, ifDir) {
|
||||
const p = this.matchCheckSync(e, ifDir);
|
||||
if (p)
|
||||
this.matchFinish(p, absolute);
|
||||
}
|
||||
walkCB(target, patterns, cb) {
|
||||
/* c8 ignore start */
|
||||
if (this.signal?.aborted)
|
||||
cb();
|
||||
/* c8 ignore stop */
|
||||
this.walkCB2(target, patterns, new Processor(this.opts), cb);
|
||||
}
|
||||
walkCB2(target, patterns, processor, cb) {
|
||||
if (this.#childrenIgnored(target))
|
||||
return cb();
|
||||
if (this.signal?.aborted)
|
||||
cb();
|
||||
if (this.paused) {
|
||||
this.onResume(() => this.walkCB2(target, patterns, processor, cb));
|
||||
return;
|
||||
}
|
||||
processor.processPatterns(target, patterns);
|
||||
// done processing. all of the above is sync, can be abstracted out.
|
||||
// subwalks is a map of paths to the entry filters they need
|
||||
// matches is a map of paths to [absolute, ifDir] tuples.
|
||||
let tasks = 1;
|
||||
const next = () => {
|
||||
if (--tasks === 0)
|
||||
cb();
|
||||
};
|
||||
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
||||
if (this.#ignored(m))
|
||||
continue;
|
||||
tasks++;
|
||||
this.match(m, absolute, ifDir).then(() => next());
|
||||
}
|
||||
for (const t of processor.subwalkTargets()) {
|
||||
if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
|
||||
continue;
|
||||
}
|
||||
tasks++;
|
||||
const childrenCached = t.readdirCached();
|
||||
if (t.calledReaddir())
|
||||
this.walkCB3(t, childrenCached, processor, next);
|
||||
else {
|
||||
t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true);
|
||||
}
|
||||
}
|
||||
next();
|
||||
}
|
||||
walkCB3(target, entries, processor, cb) {
|
||||
processor = processor.filterEntries(target, entries);
|
||||
let tasks = 1;
|
||||
const next = () => {
|
||||
if (--tasks === 0)
|
||||
cb();
|
||||
};
|
||||
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
||||
if (this.#ignored(m))
|
||||
continue;
|
||||
tasks++;
|
||||
this.match(m, absolute, ifDir).then(() => next());
|
||||
}
|
||||
for (const [target, patterns] of processor.subwalks.entries()) {
|
||||
tasks++;
|
||||
this.walkCB2(target, patterns, processor.child(), next);
|
||||
}
|
||||
next();
|
||||
}
|
||||
walkCBSync(target, patterns, cb) {
|
||||
/* c8 ignore start */
|
||||
if (this.signal?.aborted)
|
||||
cb();
|
||||
/* c8 ignore stop */
|
||||
this.walkCB2Sync(target, patterns, new Processor(this.opts), cb);
|
||||
}
|
||||
walkCB2Sync(target, patterns, processor, cb) {
|
||||
if (this.#childrenIgnored(target))
|
||||
return cb();
|
||||
if (this.signal?.aborted)
|
||||
cb();
|
||||
if (this.paused) {
|
||||
this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb));
|
||||
return;
|
||||
}
|
||||
processor.processPatterns(target, patterns);
|
||||
// done processing. all of the above is sync, can be abstracted out.
|
||||
// subwalks is a map of paths to the entry filters they need
|
||||
// matches is a map of paths to [absolute, ifDir] tuples.
|
||||
let tasks = 1;
|
||||
const next = () => {
|
||||
if (--tasks === 0)
|
||||
cb();
|
||||
};
|
||||
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
||||
if (this.#ignored(m))
|
||||
continue;
|
||||
this.matchSync(m, absolute, ifDir);
|
||||
}
|
||||
for (const t of processor.subwalkTargets()) {
|
||||
if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
|
||||
continue;
|
||||
}
|
||||
tasks++;
|
||||
const children = t.readdirSync();
|
||||
this.walkCB3Sync(t, children, processor, next);
|
||||
}
|
||||
next();
|
||||
}
|
||||
walkCB3Sync(target, entries, processor, cb) {
|
||||
processor = processor.filterEntries(target, entries);
|
||||
let tasks = 1;
|
||||
const next = () => {
|
||||
if (--tasks === 0)
|
||||
cb();
|
||||
};
|
||||
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
||||
if (this.#ignored(m))
|
||||
continue;
|
||||
this.matchSync(m, absolute, ifDir);
|
||||
}
|
||||
for (const [target, patterns] of processor.subwalks.entries()) {
|
||||
tasks++;
|
||||
this.walkCB2Sync(target, patterns, processor.child(), next);
|
||||
}
|
||||
next();
|
||||
}
|
||||
}
|
||||
export class GlobWalker extends GlobUtil {
|
||||
matches;
|
||||
constructor(patterns, path, opts) {
|
||||
super(patterns, path, opts);
|
||||
this.matches = new Set();
|
||||
}
|
||||
matchEmit(e) {
|
||||
this.matches.add(e);
|
||||
}
|
||||
async walk() {
|
||||
if (this.signal?.aborted)
|
||||
throw this.signal.reason;
|
||||
if (this.path.isUnknown()) {
|
||||
await this.path.lstat();
|
||||
}
|
||||
await new Promise((res, rej) => {
|
||||
this.walkCB(this.path, this.patterns, () => {
|
||||
if (this.signal?.aborted) {
|
||||
rej(this.signal.reason);
|
||||
}
|
||||
else {
|
||||
res(this.matches);
|
||||
}
|
||||
});
|
||||
});
|
||||
return this.matches;
|
||||
}
|
||||
walkSync() {
|
||||
if (this.signal?.aborted)
|
||||
throw this.signal.reason;
|
||||
if (this.path.isUnknown()) {
|
||||
this.path.lstatSync();
|
||||
}
|
||||
// nothing for the callback to do, because this never pauses
|
||||
this.walkCBSync(this.path, this.patterns, () => {
|
||||
if (this.signal?.aborted)
|
||||
throw this.signal.reason;
|
||||
});
|
||||
return this.matches;
|
||||
}
|
||||
}
|
||||
export class GlobStream extends GlobUtil {
|
||||
results;
|
||||
constructor(patterns, path, opts) {
|
||||
super(patterns, path, opts);
|
||||
this.results = new Minipass({
|
||||
signal: this.signal,
|
||||
objectMode: true,
|
||||
});
|
||||
this.results.on('drain', () => this.resume());
|
||||
this.results.on('resume', () => this.resume());
|
||||
}
|
||||
matchEmit(e) {
|
||||
this.results.write(e);
|
||||
if (!this.results.flowing)
|
||||
this.pause();
|
||||
}
|
||||
stream() {
|
||||
const target = this.path;
|
||||
if (target.isUnknown()) {
|
||||
target.lstat().then(() => {
|
||||
this.walkCB(target, this.patterns, () => this.results.end());
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.walkCB(target, this.patterns, () => this.results.end());
|
||||
}
|
||||
return this.results;
|
||||
}
|
||||
streamSync() {
|
||||
if (this.path.isUnknown()) {
|
||||
this.path.lstatSync();
|
||||
}
|
||||
this.walkCBSync(this.path, this.patterns, () => this.results.end());
|
||||
return this.results;
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=walker.js.map
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/walker.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/glob/dist/esm/walker.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
78
resources/app/node_modules/express-handlebars/node_modules/glob/package.json
generated
vendored
Normal file
78
resources/app/node_modules/express-handlebars/node_modules/glob/package.json
generated
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"author": "Isaac Z. Schlueter <i@izs.me> (https://blog.izs.me/)",
|
||||
"name": "glob",
|
||||
"description": "the most correct and second fastest glob implementation in JavaScript",
|
||||
"version": "10.3.16",
|
||||
"type": "module",
|
||||
"tshy": {
|
||||
"main": true,
|
||||
"exports": {
|
||||
"./package.json": "./package.json",
|
||||
".": "./src/index.ts"
|
||||
}
|
||||
},
|
||||
"bin": "./dist/esm/bin.mjs",
|
||||
"main": "./dist/commonjs/index.js",
|
||||
"types": "./dist/commonjs/index.d.ts",
|
||||
"exports": {
|
||||
"./package.json": "./package.json",
|
||||
".": {
|
||||
"import": {
|
||||
"types": "./dist/esm/index.d.ts",
|
||||
"default": "./dist/esm/index.js"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/commonjs/index.d.ts",
|
||||
"default": "./dist/commonjs/index.js"
|
||||
}
|
||||
}
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/isaacs/node-glob.git"
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"prettier": {
|
||||
"semi": false,
|
||||
"printWidth": 75,
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"singleQuote": true,
|
||||
"jsxSingleQuote": false,
|
||||
"bracketSameLine": true,
|
||||
"arrowParens": "avoid",
|
||||
"endOfLine": "lf"
|
||||
},
|
||||
"dependencies": {
|
||||
"foreground-child": "^3.1.0",
|
||||
"jackspeak": "^3.1.2",
|
||||
"minimatch": "^9.0.1",
|
||||
"minipass": "^7.0.4",
|
||||
"path-scurry": "^1.11.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.11.30",
|
||||
"memfs": "^3.4.13",
|
||||
"mkdirp": "^3.0.1",
|
||||
"prettier": "^2.8.3",
|
||||
"rimraf": "^5.0.1",
|
||||
"sync-content": "^1.0.2",
|
||||
"tap": "^18.7.2",
|
||||
"ts-node": "^10.9.2",
|
||||
"tshy": "^1.12.0",
|
||||
"typedoc": "^0.25.12",
|
||||
"typescript": "^5.2.2"
|
||||
},
|
||||
"tap": {
|
||||
"before": "test/00-setup.ts"
|
||||
},
|
||||
"license": "ISC",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16 || 14 >=14.18"
|
||||
}
|
||||
}
|
||||
15
resources/app/node_modules/express-handlebars/node_modules/minipass/LICENSE
generated
vendored
Normal file
15
resources/app/node_modules/express-handlebars/node_modules/minipass/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
The ISC License
|
||||
|
||||
Copyright (c) 2017-2023 npm, Inc., Isaac Z. Schlueter, and Contributors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/commonjs/index.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/commonjs/index.d.ts.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1028
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/commonjs/index.js
generated
vendored
Normal file
1028
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/commonjs/index.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/commonjs/index.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/commonjs/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/commonjs/package.json
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/commonjs/package.json
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"type":"commonjs"}
|
||||
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/esm/index.d.ts.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/esm/index.d.ts.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1018
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/esm/index.js
generated
vendored
Normal file
1018
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/esm/index.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/esm/index.js.map
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/esm/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/esm/package.json
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/node_modules/minipass/dist/esm/package.json
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"type":"module"}
|
||||
66
resources/app/node_modules/express-handlebars/node_modules/minipass/package.json
generated
vendored
Normal file
66
resources/app/node_modules/express-handlebars/node_modules/minipass/package.json
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"name": "minipass",
|
||||
"version": "7.1.1",
|
||||
"description": "minimal implementation of a PassThrough stream",
|
||||
"main": "./dist/commonjs/index.js",
|
||||
"types": "./dist/commonjs/index.d.ts",
|
||||
"type": "module",
|
||||
"tshy": {
|
||||
"main": true,
|
||||
"exports": {
|
||||
"./package.json": "./package.json",
|
||||
".": "./src/index.ts"
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
"./package.json": "./package.json",
|
||||
".": {
|
||||
"import": {
|
||||
"types": "./dist/esm/index.d.ts",
|
||||
"default": "./dist/esm/index.js"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/commonjs/index.d.ts",
|
||||
"default": "./dist/commonjs/index.js"
|
||||
}
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"prettier": {
|
||||
"semi": false,
|
||||
"printWidth": 75,
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"singleQuote": true,
|
||||
"jsxSingleQuote": false,
|
||||
"bracketSameLine": true,
|
||||
"arrowParens": "avoid",
|
||||
"endOfLine": "lf"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/end-of-stream": "^1.4.2",
|
||||
"@types/node": "^20.1.2",
|
||||
"end-of-stream": "^1.4.0",
|
||||
"node-abort-controller": "^3.1.1",
|
||||
"prettier": "^2.6.2",
|
||||
"tap": "^18.3.0",
|
||||
"through2": "^2.0.3",
|
||||
"tshy": "^1.2.2",
|
||||
"typedoc": "^0.25.1",
|
||||
"typescript": "^5.2.2"
|
||||
},
|
||||
"repository": "https://github.com/isaacs/minipass",
|
||||
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=16 || 14 >=14.17"
|
||||
},
|
||||
"tap": {
|
||||
"typecheck": true,
|
||||
"include": [
|
||||
"test/*.ts"
|
||||
]
|
||||
}
|
||||
}
|
||||
56
resources/app/node_modules/express-handlebars/package.json
generated
vendored
Normal file
56
resources/app/node_modules/express-handlebars/package.json
generated
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"name": "express-handlebars",
|
||||
"description": "A Handlebars view engine for Express which doesn't suck.",
|
||||
"version": "7.1.2",
|
||||
"homepage": "https://github.com/express-handlebars/express-handlebars",
|
||||
"author": "Eric Ferraiuolo <eferraiuolo@gmail.com> (http://ericf.me/)",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/express-handlebars/express-handlebars.git"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=v16"
|
||||
},
|
||||
"dependencies": {
|
||||
"glob": "^10.3.3",
|
||||
"graceful-fs": "^4.2.11",
|
||||
"handlebars": "^4.7.8"
|
||||
},
|
||||
"main": "dist/index.js",
|
||||
"directories": {
|
||||
"example": "examples"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@semantic-release/changelog": "^6.0.3",
|
||||
"@semantic-release/commit-analyzer": "^10.0.1",
|
||||
"@semantic-release/git": "^10.0.1",
|
||||
"@semantic-release/github": "^9.0.4",
|
||||
"@semantic-release/npm": "^10.0.4",
|
||||
"@semantic-release/release-notes-generator": "^11.0.4",
|
||||
"@types/glob": "^8.1.0",
|
||||
"@types/jest": "^29.5.3",
|
||||
"@types/node": "^18.17.3",
|
||||
"@typescript-eslint/eslint-plugin": "^6.3.0",
|
||||
"@typescript-eslint/parser": "^6.3.0",
|
||||
"eslint": "^8.46.0",
|
||||
"eslint-config-standard": "^17.1.0",
|
||||
"eslint-plugin-import": "^2.28.0",
|
||||
"eslint-plugin-n": "^16.0.1",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"jest-cli": "^29.6.2",
|
||||
"semantic-release": "^21.0.7",
|
||||
"ts-jest": "^29.1.1",
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"release": {
|
||||
"plugins": [
|
||||
"@semantic-release/commit-analyzer",
|
||||
"@semantic-release/release-notes-generator",
|
||||
"@semantic-release/changelog",
|
||||
"@semantic-release/npm",
|
||||
"@semantic-release/github",
|
||||
"@semantic-release/git"
|
||||
]
|
||||
},
|
||||
"license": "BSD-3-Clause"
|
||||
}
|
||||
10
resources/app/node_modules/express-handlebars/renovate.json
generated
vendored
Normal file
10
resources/app/node_modules/express-handlebars/renovate.json
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"extends": [
|
||||
"config:base"
|
||||
],
|
||||
"devDependencies": {
|
||||
"automerge": true,
|
||||
"commitMessageTopic": "devDependency {{depName}}"
|
||||
},
|
||||
"rangeStrategy": "bump"
|
||||
}
|
||||
880
resources/app/node_modules/express-handlebars/spec/express-handlebars.test.ts
generated
vendored
Normal file
880
resources/app/node_modules/express-handlebars/spec/express-handlebars.test.ts
generated
vendored
Normal file
@@ -0,0 +1,880 @@
|
||||
import * as path from "node:path";
|
||||
import * as expressHandlebars from "../lib/index";
|
||||
import type {
|
||||
TemplateDelegateObject,
|
||||
EngineOptions,
|
||||
} from "../types";
|
||||
|
||||
function fixturePath (filePath = "") {
|
||||
return path.resolve(__dirname, "./fixtures", filePath);
|
||||
}
|
||||
|
||||
// allow access to private functions for testing
|
||||
// https://github.com/microsoft/TypeScript/issues/19335
|
||||
/* eslint-disable dot-notation, @typescript-eslint/no-empty-function */
|
||||
|
||||
describe("express-handlebars", () => {
|
||||
test("ExpressHandlebars instance", () => {
|
||||
const exphbs = new expressHandlebars.ExpressHandlebars();
|
||||
expect(exphbs).toBeDefined();
|
||||
});
|
||||
|
||||
test("should nomalize extname", () => {
|
||||
const exphbs1 = expressHandlebars.create({ extname: "ext" });
|
||||
const exphbs2 = expressHandlebars.create({ extname: ".ext" });
|
||||
expect(exphbs1.extname).toBe(".ext");
|
||||
expect(exphbs2.extname).toBe(".ext");
|
||||
});
|
||||
|
||||
describe("getPartials", () => {
|
||||
test("should throw if partialsDir is not correct type", async () => {
|
||||
// @ts-expect-error partialsDir is invalid
|
||||
const exphbs = expressHandlebars.create({ partialsDir: 1 });
|
||||
let error: Error | undefined;
|
||||
try {
|
||||
await exphbs.getPartials();
|
||||
} catch (e) {
|
||||
error = e;
|
||||
}
|
||||
expect(error).toEqual(expect.any(Error));
|
||||
expect(error?.message).toBe("A partials dir must be a string or config object");
|
||||
});
|
||||
|
||||
test("should return empty object if no partialsDir is defined", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const partials = await exphbs.getPartials();
|
||||
expect(partials).toEqual({});
|
||||
});
|
||||
|
||||
test("should return empty object partialsDir does not exist", async () => {
|
||||
const exphbs = expressHandlebars.create({ partialsDir: "does-not-exist" });
|
||||
const partials = await exphbs.getPartials();
|
||||
expect(partials).toEqual({});
|
||||
});
|
||||
|
||||
test("should return partials on string", async () => {
|
||||
const exphbs = expressHandlebars.create({ partialsDir: fixturePath("partials") });
|
||||
const partials = await exphbs.getPartials();
|
||||
expect(partials).toEqual({
|
||||
partial: expect.any(Function),
|
||||
"partial-latin1": expect.any(Function),
|
||||
"subdir/partial-subdir": expect.any(Function),
|
||||
});
|
||||
});
|
||||
|
||||
test("should return partials on array", async () => {
|
||||
const exphbs = expressHandlebars.create({ partialsDir: [fixturePath("partials")] });
|
||||
const partials = await exphbs.getPartials();
|
||||
expect(partials).toEqual({
|
||||
partial: expect.any(Function),
|
||||
"partial-latin1": expect.any(Function),
|
||||
"subdir/partial-subdir": expect.any(Function),
|
||||
});
|
||||
});
|
||||
|
||||
test("should return partials on object", async () => {
|
||||
const fn = jest.fn();
|
||||
const exphbs = expressHandlebars.create({
|
||||
partialsDir: {
|
||||
templates: { "partial template": fn },
|
||||
namespace: "partial namespace",
|
||||
dir: fixturePath("partials"),
|
||||
},
|
||||
});
|
||||
const partials = await exphbs.getPartials();
|
||||
expect(partials).toEqual({
|
||||
"partial namespace/partial template": fn,
|
||||
});
|
||||
});
|
||||
|
||||
test("should return renamed partials with rename function", async () => {
|
||||
const fn = jest.fn();
|
||||
const exphbs = expressHandlebars.create({
|
||||
partialsDir: {
|
||||
templates: { "partial/template": fn },
|
||||
namespace: "partial namespace",
|
||||
dir: fixturePath("partials"),
|
||||
rename: (filePath, namespace) => {
|
||||
return `${namespace}/${filePath.split("/")[0]}`;
|
||||
},
|
||||
},
|
||||
});
|
||||
const partials = await exphbs.getPartials();
|
||||
expect(partials).toEqual({
|
||||
"partial namespace/partial": fn,
|
||||
});
|
||||
});
|
||||
|
||||
test("should return partials on path relative to cwd", async () => {
|
||||
const exphbs = expressHandlebars.create({ partialsDir: "spec/fixtures/partials" });
|
||||
const partials = await exphbs.getPartials();
|
||||
expect(partials).toEqual({
|
||||
partial: expect.any(Function),
|
||||
"partial-latin1": expect.any(Function),
|
||||
"subdir/partial-subdir": expect.any(Function),
|
||||
});
|
||||
});
|
||||
|
||||
test("should return template function", async () => {
|
||||
const exphbs = expressHandlebars.create({ partialsDir: "spec/fixtures/partials" });
|
||||
const partials = await exphbs.getPartials() as TemplateDelegateObject;
|
||||
const html = partials.partial({ text: "test text" });
|
||||
expect(html).toBe("partial test text");
|
||||
});
|
||||
|
||||
test("should return a template with encoding", async () => {
|
||||
const exphbs = expressHandlebars.create({ partialsDir: "spec/fixtures/partials" });
|
||||
const partials = await exphbs.getPartials({ encoding: "latin1" }) as TemplateDelegateObject;
|
||||
const html = partials["partial-latin1"]({});
|
||||
expect(html).toContain("ñáéíóú");
|
||||
});
|
||||
|
||||
test("should return a template with default encoding", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
encoding: "latin1",
|
||||
partialsDir: "spec/fixtures/partials",
|
||||
});
|
||||
const partials = await exphbs.getPartials() as TemplateDelegateObject;
|
||||
const html = partials["partial-latin1"]({});
|
||||
expect(html).toContain("ñáéíóú");
|
||||
});
|
||||
});
|
||||
|
||||
describe("getTemplate", () => {
|
||||
test("should return cached template", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("templates/template.handlebars");
|
||||
const compiledCachedFunction = (() => "compiled") as Handlebars.TemplateDelegate;
|
||||
exphbs.compiled[filePath] = Promise.resolve(compiledCachedFunction);
|
||||
const precompiledCachedFunction = (() => "precompiled") as TemplateSpecification;
|
||||
exphbs.precompiled[filePath] = Promise.resolve(precompiledCachedFunction);
|
||||
const template = await exphbs.getTemplate(filePath, { cache: true });
|
||||
expect(template).toBe(compiledCachedFunction);
|
||||
});
|
||||
|
||||
test("should return precompiled cached template", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("templates/template.handlebars");
|
||||
const compiledCachedFunction = (() => "compiled") as Handlebars.TemplateDelegate;
|
||||
exphbs.compiled[filePath] = Promise.resolve(compiledCachedFunction);
|
||||
const precompiledCachedFunction = (() => "precompiled") as TemplateSpecification;
|
||||
exphbs.precompiled[filePath] = Promise.resolve(precompiledCachedFunction);
|
||||
const template = await exphbs.getTemplate(filePath, { precompiled: true, cache: true });
|
||||
expect(template).toBe(precompiledCachedFunction);
|
||||
});
|
||||
|
||||
test("should store in precompiled cache", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("templates/template.handlebars");
|
||||
expect(exphbs.compiled[filePath]).toBeUndefined();
|
||||
expect(exphbs.precompiled[filePath]).toBeUndefined();
|
||||
await exphbs.getTemplate(filePath, { precompiled: true });
|
||||
expect(exphbs.compiled[filePath]).toBeUndefined();
|
||||
expect(exphbs.precompiled[filePath]).toBeDefined();
|
||||
});
|
||||
|
||||
test("should store in compiled cache", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("templates/template.handlebars");
|
||||
expect(exphbs.compiled[filePath]).toBeUndefined();
|
||||
expect(exphbs.precompiled[filePath]).toBeUndefined();
|
||||
await exphbs.getTemplate(filePath);
|
||||
expect(exphbs.compiled[filePath]).toBeDefined();
|
||||
expect(exphbs.precompiled[filePath]).toBeUndefined();
|
||||
});
|
||||
|
||||
test("should return a template", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("templates/template.handlebars");
|
||||
const template = await exphbs.getTemplate(filePath) as HandlebarsTemplateDelegate;
|
||||
const html = template({ text: "test text" });
|
||||
expect(html).toBe("<p>test text</p>");
|
||||
});
|
||||
|
||||
test("should return a template with encoding", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("templates/template-latin1.handlebars");
|
||||
const template = await exphbs.getTemplate(filePath, { encoding: "latin1" }) as HandlebarsTemplateDelegate;
|
||||
const html = template({});
|
||||
expect(html).toContain("ñáéíóú");
|
||||
});
|
||||
|
||||
test("should return a template with default encoding", async () => {
|
||||
const exphbs = expressHandlebars.create({ encoding: "latin1" });
|
||||
const filePath = fixturePath("templates/template-latin1.handlebars");
|
||||
const template = await exphbs.getTemplate(filePath) as HandlebarsTemplateDelegate;
|
||||
const html = template({});
|
||||
expect(html).toContain("ñáéíóú");
|
||||
});
|
||||
|
||||
test("should not store in cache on error", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = "does-not-exist";
|
||||
expect(exphbs.compiled[filePath]).toBeUndefined();
|
||||
let error: Error | undefined;
|
||||
try {
|
||||
await exphbs.getTemplate(filePath);
|
||||
} catch (e) {
|
||||
error = e;
|
||||
}
|
||||
expect(error?.message).toEqual(expect.stringContaining("no such file or directory"));
|
||||
expect(exphbs.compiled[filePath]).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("getTemplates", () => {
|
||||
test("should return cached templates", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const dirPath = fixturePath("templates");
|
||||
const fsCache = Promise.resolve([]);
|
||||
exphbs._fsCache[dirPath] = fsCache;
|
||||
const templates = await exphbs.getTemplates(dirPath, { cache: true });
|
||||
expect(templates).toEqual({});
|
||||
});
|
||||
|
||||
test("should return templates", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const dirPath = fixturePath("templates");
|
||||
const templates = await exphbs.getTemplates(dirPath);
|
||||
const html = templates["template.handlebars"]({ text: "test text" });
|
||||
expect(html).toBe("<p>test text</p>");
|
||||
});
|
||||
|
||||
test("should get templates in sub directories", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const dirPath = fixturePath("templates");
|
||||
const templates = await exphbs.getTemplates(dirPath);
|
||||
const paths = Object.keys(templates);
|
||||
expect(paths).toEqual([
|
||||
"template.handlebars",
|
||||
"template-latin1.handlebars",
|
||||
"subdir/template.handlebars",
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("render", () => {
|
||||
test("should return cached templates", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("render-cached.handlebars");
|
||||
exphbs.compiled[filePath] = Promise.resolve(() => "cached");
|
||||
const html = await exphbs.render(filePath, undefined, { cache: true });
|
||||
expect(html).toBe("cached");
|
||||
});
|
||||
|
||||
test("should use helpers", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
helpers: {
|
||||
help: () => "help",
|
||||
},
|
||||
});
|
||||
const filePath = fixturePath("render-helper.handlebars");
|
||||
const html = await exphbs.render(filePath, { text: "test text" });
|
||||
expect(html).toBe("<p>help</p>");
|
||||
});
|
||||
|
||||
test("should override helpers", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
helpers: {
|
||||
help: () => "help",
|
||||
},
|
||||
});
|
||||
const filePath = fixturePath("render-helper.handlebars");
|
||||
const html = await exphbs.render(filePath, { text: "test text" }, {
|
||||
helpers: {
|
||||
help: (text: string) => text,
|
||||
},
|
||||
});
|
||||
expect(html).toBe("<p>test text</p>");
|
||||
});
|
||||
|
||||
test("should return html", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("render-text.handlebars");
|
||||
const html = await exphbs.render(filePath, { text: "test text" });
|
||||
expect(html).toBe("<p>test text</p>");
|
||||
});
|
||||
|
||||
test("should return html with encoding", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
partialsDir: fixturePath("partials"),
|
||||
});
|
||||
const filePath = fixturePath("render-latin1.handlebars");
|
||||
const html = await exphbs.render(filePath, undefined, { encoding: "latin1" });
|
||||
expect(html).toContain("partial ñáéíóú");
|
||||
expect(html).toContain("render ñáéíóú");
|
||||
});
|
||||
|
||||
test("should return html with default encoding", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
encoding: "latin1",
|
||||
partialsDir: fixturePath("partials"),
|
||||
});
|
||||
const filePath = fixturePath("render-latin1.handlebars");
|
||||
const html = await exphbs.render(filePath);
|
||||
expect(html).toContain("partial ñáéíóú");
|
||||
expect(html).toContain("render ñáéíóú");
|
||||
});
|
||||
|
||||
test("should render with partial", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
partialsDir: fixturePath("partials"),
|
||||
});
|
||||
const filePath = fixturePath("render-partial.handlebars");
|
||||
const html = await exphbs.render(filePath, { text: "test text" });
|
||||
expect(html.replace(/\r/g, "")).toBe("<h1>partial test text</h1>\n<p>test text</p>");
|
||||
});
|
||||
|
||||
test("should render with subdir/partial", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
partialsDir: fixturePath("partials"),
|
||||
});
|
||||
const filePath = fixturePath("render-subdir-partial.handlebars");
|
||||
const html = await exphbs.render(filePath, { text: "test text" });
|
||||
expect(html.replace(/\r/g, "")).toBe("<h1>subdir partial test text</h1>\n<p>test text</p>");
|
||||
});
|
||||
|
||||
test("should render with runtimeOptions", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
runtimeOptions: { allowProtoPropertiesByDefault: true },
|
||||
});
|
||||
const filePath = fixturePath("test");
|
||||
const spy = jest.fn(() => { return "test"; }) as Handlebars.TemplateDelegate;
|
||||
exphbs.compiled[filePath] = Promise.resolve(spy);
|
||||
await exphbs.render(filePath, undefined, { cache: true });
|
||||
expect(spy).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({ allowProtoPropertiesByDefault: true }));
|
||||
});
|
||||
|
||||
test("should override runtimeOptions", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
runtimeOptions: { allowProtoPropertiesByDefault: true },
|
||||
});
|
||||
const filePath = fixturePath("test");
|
||||
const spy = jest.fn(() => { return "test"; }) as Handlebars.TemplateDelegate;
|
||||
exphbs.compiled[filePath] = Promise.resolve(spy);
|
||||
await exphbs.render(filePath, undefined, {
|
||||
cache: true,
|
||||
runtimeOptions: { allowProtoPropertiesByDefault: false },
|
||||
});
|
||||
expect(spy).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({ allowProtoPropertiesByDefault: false }));
|
||||
});
|
||||
});
|
||||
|
||||
describe("engine", () => {
|
||||
test("should call renderView", async () => {
|
||||
jest.spyOn(expressHandlebars.ExpressHandlebars.prototype, "renderView").mockImplementation(() => Promise.resolve(null));
|
||||
const exphbs = expressHandlebars.create();
|
||||
const cb = () => { /* empty */ };
|
||||
exphbs.engine("view", {}, cb);
|
||||
expect(expressHandlebars.ExpressHandlebars.prototype.renderView).toHaveBeenCalledWith("view", {}, cb);
|
||||
});
|
||||
|
||||
test("should call engine", async () => {
|
||||
jest.spyOn(expressHandlebars.ExpressHandlebars.prototype, "renderView").mockImplementation(() => Promise.resolve(null));
|
||||
const cb = () => { /* empty */ };
|
||||
expressHandlebars.engine()("view", {}, cb);
|
||||
expect(expressHandlebars.ExpressHandlebars.prototype.renderView).toHaveBeenCalledWith("view", {}, cb);
|
||||
});
|
||||
|
||||
test("should render html", async () => {
|
||||
const renderView = expressHandlebars.engine({ defaultLayout: undefined });
|
||||
const viewPath = fixturePath("render-text.handlebars");
|
||||
const html = await renderView(viewPath, { text: "test text" } as EngineOptions);
|
||||
expect(html).toBe("<p>test text</p>");
|
||||
});
|
||||
});
|
||||
|
||||
describe("renderView", () => {
|
||||
test("should use settings.views", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const viewPath = fixturePath("render-partial.handlebars");
|
||||
const viewsPath = fixturePath();
|
||||
const html = await exphbs.renderView(viewPath, {
|
||||
text: "test text",
|
||||
settings: { views: viewsPath },
|
||||
});
|
||||
expect(html.replace(/\r/g, "")).toBe("<body>\n<h1>partial test text</h1>\n<p>test text</p>\n</body>");
|
||||
});
|
||||
|
||||
test("should use settings.views array", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const viewPath = fixturePath("render-partial.handlebars");
|
||||
const viewsPath = fixturePath();
|
||||
const html = await exphbs.renderView(viewPath, {
|
||||
text: "test text",
|
||||
settings: { views: [viewsPath] },
|
||||
});
|
||||
expect(html.replace(/\r/g, "")).toBe("<body>\n<h1>partial test text</h1>\n<p>test text</p>\n</body>");
|
||||
});
|
||||
|
||||
test("should not use settings.views array when no parent found", async () => {
|
||||
const exphbs = expressHandlebars.create({ defaultLayout: undefined });
|
||||
const viewPath = fixturePath("render-text.handlebars");
|
||||
const viewsPath = "does-not-exist";
|
||||
const html = await exphbs.renderView(viewPath, {
|
||||
text: "test text",
|
||||
settings: { views: [viewsPath] },
|
||||
});
|
||||
expect(html).toBe("<p>test text</p>");
|
||||
});
|
||||
|
||||
test("should use settings.views when it changes", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const viewPath = fixturePath("render-partial.handlebars");
|
||||
const viewsPath = fixturePath();
|
||||
const html = await exphbs.renderView(viewPath, {
|
||||
text: "test text",
|
||||
settings: { views: viewsPath },
|
||||
});
|
||||
expect(html.replace(/\r/g, "")).toBe("<body>\n<h1>partial test text</h1>\n<p>test text</p>\n</body>");
|
||||
const otherViewsPath = fixturePath("other-views");
|
||||
const otherhtml = await exphbs.renderView(viewPath, {
|
||||
text: "test text",
|
||||
settings: { views: otherViewsPath },
|
||||
});
|
||||
expect(otherhtml.replace(/\r/g, "")).toBe("<body>\nother layout\n<h1>other partial test text</h1>\n<p>test text</p>\n</body>");
|
||||
});
|
||||
|
||||
test("should not overwrite config with settings.views", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
layoutsDir: fixturePath("layouts"),
|
||||
partialsDir: fixturePath("partials"),
|
||||
});
|
||||
const viewPath = fixturePath("render-partial.handlebars");
|
||||
const viewsPath = fixturePath("other-views");
|
||||
const html = await exphbs.renderView(viewPath, {
|
||||
text: "test text",
|
||||
settings: { views: viewsPath },
|
||||
});
|
||||
expect(html.replace(/\r/g, "")).toBe("<body>\n<h1>partial test text</h1>\n<p>test text</p>\n</body>");
|
||||
});
|
||||
|
||||
test("should merge helpers", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
defaultLayout: undefined,
|
||||
helpers: {
|
||||
help: () => "help",
|
||||
},
|
||||
});
|
||||
const viewPath = fixturePath("render-helper.handlebars");
|
||||
const html = await exphbs.renderView(viewPath, {
|
||||
text: "test text",
|
||||
helpers: {
|
||||
help: (text: string) => text,
|
||||
},
|
||||
});
|
||||
expect(html).toBe("<p>test text</p>");
|
||||
});
|
||||
|
||||
test("should use layout option", async () => {
|
||||
const exphbs = expressHandlebars.create({ defaultLayout: undefined });
|
||||
const layoutPath = fixturePath("layouts/main.handlebars");
|
||||
const viewPath = fixturePath("render-text.handlebars");
|
||||
const html = await exphbs.renderView(viewPath, {
|
||||
text: "test text",
|
||||
layout: layoutPath,
|
||||
});
|
||||
expect(html.replace(/\r/g, "")).toBe("<body>\n<p>test text</p>\n</body>");
|
||||
});
|
||||
|
||||
test("should render html", async () => {
|
||||
const exphbs = expressHandlebars.create({ defaultLayout: undefined });
|
||||
const viewPath = fixturePath("render-text.handlebars");
|
||||
const html = await exphbs.renderView(viewPath, { text: "test text" });
|
||||
expect(html).toBe("<p>test text</p>");
|
||||
});
|
||||
|
||||
test("should render html with encoding", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
defaultLayout: "main-latin1",
|
||||
partialsDir: fixturePath("partials"),
|
||||
layoutsDir: fixturePath("layouts"),
|
||||
});
|
||||
const viewPath = fixturePath("render-latin1.handlebars");
|
||||
const html = await exphbs.renderView(viewPath, { encoding: "latin1" });
|
||||
expect(html).toContain("layout ñáéíóú");
|
||||
expect(html).toContain("partial ñáéíóú");
|
||||
expect(html).toContain("render ñáéíóú");
|
||||
});
|
||||
|
||||
test("should render html with default encoding", async () => {
|
||||
const exphbs = expressHandlebars.create({
|
||||
encoding: "latin1",
|
||||
defaultLayout: "main-latin1",
|
||||
partialsDir: fixturePath("partials"),
|
||||
layoutsDir: fixturePath("layouts"),
|
||||
});
|
||||
const viewPath = fixturePath("render-latin1.handlebars");
|
||||
const html = await exphbs.renderView(viewPath);
|
||||
expect(html).toContain("layout ñáéíóú");
|
||||
expect(html).toContain("partial ñáéíóú");
|
||||
expect(html).toContain("render ñáéíóú");
|
||||
});
|
||||
|
||||
test("should call callback with html", (done) => {
|
||||
const exphbs = expressHandlebars.create({ defaultLayout: undefined });
|
||||
const viewPath = fixturePath("render-text.handlebars");
|
||||
exphbs.renderView(viewPath, { text: "test text" }, (err: Error|null, html: string|undefined) => {
|
||||
expect(err).toBe(null);
|
||||
expect(html).toBe("<p>test text</p>");
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test("should call callback as second parameter", (done) => {
|
||||
const exphbs = expressHandlebars.create({ defaultLayout: undefined });
|
||||
const viewPath = fixturePath("render-text.handlebars");
|
||||
exphbs.renderView(viewPath, (err: Error|null, html: string|undefined) => {
|
||||
expect(err).toBe(null);
|
||||
expect(html).toBe("<p></p>");
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test("should call callback with error", (done) => {
|
||||
const exphbs = expressHandlebars.create({ defaultLayout: undefined });
|
||||
const viewPath = "does-not-exist";
|
||||
exphbs.renderView(viewPath, {}, (err: Error|null, html: string | undefined) => {
|
||||
expect(err?.message).toEqual(expect.stringContaining("no such file or directory"));
|
||||
expect(html).toBeUndefined();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test("should reject with error", async () => {
|
||||
const exphbs = expressHandlebars.create({ defaultLayout: undefined });
|
||||
const viewPath = "does-not-exist";
|
||||
let error: Error | undefined;
|
||||
try {
|
||||
await exphbs.renderView(viewPath);
|
||||
} catch (e) {
|
||||
error = e;
|
||||
}
|
||||
expect(error?.message).toEqual(expect.stringContaining("no such file or directory"));
|
||||
});
|
||||
|
||||
test("should use runtimeOptions", async () => {
|
||||
const exphbs = expressHandlebars.create({ defaultLayout: undefined });
|
||||
const filePath = fixturePath("test");
|
||||
const spy = jest.fn(() => { return "test"; }) as Handlebars.TemplateDelegate;
|
||||
exphbs.compiled[filePath] = Promise.resolve(spy);
|
||||
await exphbs.renderView(filePath, {
|
||||
cache: true,
|
||||
runtimeOptions: { allowProtoPropertiesByDefault: true },
|
||||
});
|
||||
expect(spy).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({ allowProtoPropertiesByDefault: true }));
|
||||
});
|
||||
});
|
||||
|
||||
describe("resetCache", () => {
|
||||
test("should reset all cache", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const dirPath = fixturePath("templates");
|
||||
const template = fixturePath("templates/template.handlebars");
|
||||
await exphbs.getTemplates(dirPath);
|
||||
expect(exphbs._fsCache[template]).toBeDefined();
|
||||
exphbs.resetCache();
|
||||
expect(exphbs._fsCache).toEqual({});
|
||||
});
|
||||
|
||||
test("should reset all cache with undefined", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const dirPath = fixturePath("templates");
|
||||
const template = fixturePath("templates/template.handlebars");
|
||||
await exphbs.getTemplates(dirPath);
|
||||
expect(exphbs._fsCache[template]).toBeDefined();
|
||||
let undef: undefined;
|
||||
exphbs.resetCache(undef);
|
||||
expect(exphbs._fsCache).toEqual({});
|
||||
});
|
||||
|
||||
test("should reset cached file path", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const dirPath = fixturePath("templates");
|
||||
const template = fixturePath("templates/template.handlebars");
|
||||
await exphbs.getTemplates(dirPath);
|
||||
expect(Object.keys(exphbs._fsCache).length).toEqual(4);
|
||||
expect(exphbs._fsCache[template]).toBeDefined();
|
||||
exphbs.resetCache(template);
|
||||
expect(Object.keys(exphbs._fsCache).length).toEqual(3);
|
||||
expect(exphbs._fsCache[template]).toBeUndefined();
|
||||
});
|
||||
|
||||
test("should reset cached file paths", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const dirPath = fixturePath("templates");
|
||||
const template = fixturePath("templates/template.handlebars");
|
||||
const templateLatin1 = fixturePath("templates/template-latin1.handlebars");
|
||||
await exphbs.getTemplates(dirPath);
|
||||
expect(Object.keys(exphbs._fsCache).length).toEqual(4);
|
||||
expect(exphbs._fsCache[template]).toBeDefined();
|
||||
expect(exphbs._fsCache[templateLatin1]).toBeDefined();
|
||||
exphbs.resetCache([template, templateLatin1]);
|
||||
expect(Object.keys(exphbs._fsCache).length).toEqual(2);
|
||||
expect(exphbs._fsCache[template]).toBeUndefined();
|
||||
expect(exphbs._fsCache[templateLatin1]).toBeUndefined();
|
||||
});
|
||||
|
||||
test("should reset cached file based on filter", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const dirPath = fixturePath("templates");
|
||||
const templateLatin1 = fixturePath("templates/template-latin1.handlebars");
|
||||
await exphbs.getTemplates(dirPath);
|
||||
expect(Object.keys(exphbs._fsCache).length).toEqual(4);
|
||||
expect(exphbs._fsCache[templateLatin1]).toBeDefined();
|
||||
exphbs.resetCache((f) => f.includes("latin1"));
|
||||
expect(Object.keys(exphbs._fsCache).length).toEqual(3);
|
||||
expect(exphbs._fsCache[templateLatin1]).toBeUndefined();
|
||||
});
|
||||
|
||||
test("should not error on invalid file path", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const dirPath = fixturePath("templates");
|
||||
const template = fixturePath("templates/invalid.handlebars");
|
||||
await exphbs.getTemplates(dirPath);
|
||||
expect(Object.keys(exphbs._fsCache).length).toEqual(4);
|
||||
expect(exphbs._fsCache[template]).toBeUndefined();
|
||||
exphbs.resetCache(template);
|
||||
expect(Object.keys(exphbs._fsCache).length).toEqual(4);
|
||||
expect(exphbs._fsCache[template]).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("hooks", () => {
|
||||
describe("_compileTemplate", () => {
|
||||
test("should call template with context and options", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
// @ts-expect-error empty function
|
||||
jest.spyOn(exphbs.handlebars, "compile").mockImplementation(() => {});
|
||||
const template = "template";
|
||||
const options = {};
|
||||
exphbs["_compileTemplate"](template, options);
|
||||
expect(exphbs.handlebars.compile).toHaveBeenCalledWith(template, options);
|
||||
});
|
||||
|
||||
test("should trim template", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
// @ts-expect-error empty function
|
||||
jest.spyOn(exphbs.handlebars, "compile").mockImplementation(() => {});
|
||||
const template = " template\n";
|
||||
const options = {};
|
||||
exphbs["_compileTemplate"](template, options);
|
||||
expect(exphbs.handlebars.compile).toHaveBeenCalledWith("template", options);
|
||||
});
|
||||
});
|
||||
|
||||
describe("_precompileTemplate", () => {
|
||||
test("should call template with context and options", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
// @ts-expect-error empty function
|
||||
jest.spyOn(exphbs.handlebars, "precompile").mockImplementation(() => {});
|
||||
const template = "template";
|
||||
const options = {};
|
||||
exphbs["_precompileTemplate"](template, options);
|
||||
expect(exphbs.handlebars.precompile).toHaveBeenCalledWith(template, options);
|
||||
});
|
||||
|
||||
test("should trim template", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
// @ts-expect-error empty function
|
||||
jest.spyOn(exphbs.handlebars, "precompile").mockImplementation(() => {});
|
||||
const template = " template\n";
|
||||
const options = {};
|
||||
exphbs["_precompileTemplate"](template, options);
|
||||
expect(exphbs.handlebars.precompile).toHaveBeenCalledWith("template", options);
|
||||
});
|
||||
});
|
||||
|
||||
describe("_renderTemplate", () => {
|
||||
test("should call template with context and options", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const template = jest.fn(() => "");
|
||||
const context = {};
|
||||
const options = {};
|
||||
exphbs["_renderTemplate"](template, context, options);
|
||||
expect(template).toHaveBeenCalledWith(context, options);
|
||||
});
|
||||
|
||||
test("should trim html", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const template = () => " \n";
|
||||
const html = exphbs["_renderTemplate"](template);
|
||||
expect(html).toBe("");
|
||||
});
|
||||
});
|
||||
|
||||
describe("_getDir", () => {
|
||||
test("should get from cache", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("test");
|
||||
exphbs._fsCache[filePath] = Promise.resolve(["test"]);
|
||||
const file = await exphbs["_getDir"](filePath, { cache: true });
|
||||
expect(file).toEqual(["test"]);
|
||||
});
|
||||
|
||||
test("should store in cache", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("templates");
|
||||
expect(exphbs._fsCache[filePath]).toBeUndefined();
|
||||
const expected = await exphbs["_getDir"](filePath);
|
||||
expect(exphbs._fsCache[filePath]).toBeInstanceOf(Promise);
|
||||
expect(await exphbs._fsCache[filePath]).toEqual(expected);
|
||||
});
|
||||
|
||||
test("should not store in cache on error", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = "test";
|
||||
expect(exphbs._fsCache[filePath]).toBeUndefined();
|
||||
let error: Error | undefined;
|
||||
try {
|
||||
await exphbs["_getDir"](filePath, {
|
||||
// @ts-expect-error Add this just for testing
|
||||
_throwTestError: true,
|
||||
});
|
||||
} catch (e) {
|
||||
error = e;
|
||||
}
|
||||
expect(error).toBeTruthy();
|
||||
expect(exphbs._fsCache[filePath]).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("_getFile", () => {
|
||||
test("should get from cache", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("test");
|
||||
exphbs._fsCache[filePath] = "test";
|
||||
const file = await exphbs["_getFile"](filePath, { cache: true });
|
||||
expect(file).toBe("test");
|
||||
});
|
||||
|
||||
test("should store in cache", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("render-text.handlebars");
|
||||
expect(exphbs._fsCache[filePath]).toBeUndefined();
|
||||
await exphbs["_getFile"](filePath);
|
||||
expect(exphbs._fsCache[filePath]).toBeDefined();
|
||||
});
|
||||
|
||||
test("should not store in cache on error", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = "does-not-exist";
|
||||
expect(exphbs._fsCache[filePath]).toBeUndefined();
|
||||
let error: Error | undefined;
|
||||
try {
|
||||
await exphbs["_getFile"](filePath);
|
||||
} catch (e) {
|
||||
error = e;
|
||||
}
|
||||
expect(error?.message).toEqual(expect.stringContaining("no such file or directory"));
|
||||
expect(exphbs._fsCache[filePath]).toBeUndefined();
|
||||
});
|
||||
|
||||
test("should read as utf8", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("render-text.handlebars");
|
||||
const text = await exphbs["_getFile"](filePath);
|
||||
expect(text.trim()).toBe("<p>{{text}}</p>");
|
||||
});
|
||||
|
||||
test("should read as utf8 by default", async () => {
|
||||
const exphbs = expressHandlebars.create({ encoding: undefined });
|
||||
const filePath = fixturePath("render-text.handlebars");
|
||||
const text = await exphbs["_getFile"](filePath);
|
||||
expect(text.trim()).toBe("<p>{{text}}</p>");
|
||||
});
|
||||
|
||||
test("should read as latin1", async () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const filePath = fixturePath("render-latin1.handlebars");
|
||||
const text = await exphbs["_getFile"](filePath, { encoding: "latin1" });
|
||||
expect(text).toContain("ñáéíóú");
|
||||
});
|
||||
|
||||
test("should read as default encoding", async () => {
|
||||
const exphbs = expressHandlebars.create({ encoding: "latin1" });
|
||||
const filePath = fixturePath("render-latin1.handlebars");
|
||||
const text = await exphbs["_getFile"](filePath);
|
||||
expect(text).toContain("ñáéíóú");
|
||||
});
|
||||
});
|
||||
|
||||
describe("_getTemplateName", () => {
|
||||
test("should remove extension", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const name = exphbs["_getTemplateName"]("filePath.handlebars");
|
||||
expect(name).toBe("filePath");
|
||||
});
|
||||
|
||||
test("should leave if no extension", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const name = exphbs["_getTemplateName"]("filePath");
|
||||
expect(name).toBe("filePath");
|
||||
});
|
||||
|
||||
test("should add namespace", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const name = exphbs["_getTemplateName"]("filePath.handlebars", "namespace");
|
||||
expect(name).toBe("namespace/filePath");
|
||||
});
|
||||
});
|
||||
|
||||
describe("_resolveViewsPath", () => {
|
||||
test("should return closest parent", () => {
|
||||
const file = "/root/views/file.hbs";
|
||||
const exphbs = expressHandlebars.create();
|
||||
const viewsPath = exphbs["_resolveViewsPath"]([
|
||||
"/root",
|
||||
"/root/views",
|
||||
"/root/views/file",
|
||||
], file);
|
||||
expect(viewsPath).toBe("/root/views");
|
||||
});
|
||||
|
||||
test("should return string views", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const viewsPath = exphbs["_resolveViewsPath"]("./views", "filePath.hbs");
|
||||
expect(viewsPath).toBe("./views");
|
||||
});
|
||||
|
||||
test("should return null views", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
// @ts-expect-error shouldn't expect null parameter
|
||||
const viewsPath = exphbs["_resolveViewsPath"](null, "filePath.hbs");
|
||||
expect(viewsPath).toBe(null);
|
||||
});
|
||||
|
||||
test("should return null if not found", () => {
|
||||
const file = "/file.hbs";
|
||||
const exphbs = expressHandlebars.create();
|
||||
const viewsPath = exphbs["_resolveViewsPath"]([
|
||||
"/views",
|
||||
], file);
|
||||
expect(viewsPath).toBe(null);
|
||||
});
|
||||
});
|
||||
|
||||
describe("_resolveLayoutPath", () => {
|
||||
test("should add extension", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
const layoutPath = exphbs["_resolveLayoutPath"]("filePath");
|
||||
expect(layoutPath).toEqual(expect.stringMatching(/filePath\.handlebars$/));
|
||||
});
|
||||
|
||||
test("should use layoutsDir", () => {
|
||||
const layoutsDir = fixturePath("layouts");
|
||||
const filePath = "filePath.handlebars";
|
||||
const exphbs = expressHandlebars.create({ layoutsDir });
|
||||
const layoutPath = exphbs["_resolveLayoutPath"](filePath);
|
||||
expect(layoutPath).toBe(path.resolve(layoutsDir, filePath));
|
||||
});
|
||||
|
||||
test("should return null", () => {
|
||||
const exphbs = expressHandlebars.create();
|
||||
// @ts-expect-error shouldn't expect null parameter
|
||||
const layoutPath = exphbs["_resolveLayoutPath"](null);
|
||||
expect(layoutPath).toBe(null);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
3
resources/app/node_modules/express-handlebars/spec/fixtures/layouts/main-latin1.handlebars
generated
vendored
Normal file
3
resources/app/node_modules/express-handlebars/spec/fixtures/layouts/main-latin1.handlebars
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
file encoding: Windows 1252 (latin1)
|
||||
<p>layout <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></p>
|
||||
{{{body}}}
|
||||
3
resources/app/node_modules/express-handlebars/spec/fixtures/layouts/main.handlebars
generated
vendored
Normal file
3
resources/app/node_modules/express-handlebars/spec/fixtures/layouts/main.handlebars
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
<body>
|
||||
{{{body}}}
|
||||
</body>
|
||||
4
resources/app/node_modules/express-handlebars/spec/fixtures/other-views/layouts/main.handlebars
generated
vendored
Normal file
4
resources/app/node_modules/express-handlebars/spec/fixtures/other-views/layouts/main.handlebars
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
<body>
|
||||
other layout
|
||||
{{{body}}}
|
||||
</body>
|
||||
1
resources/app/node_modules/express-handlebars/spec/fixtures/other-views/partials/partial.handlebars
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/spec/fixtures/other-views/partials/partial.handlebars
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
other partial {{text}}
|
||||
2
resources/app/node_modules/express-handlebars/spec/fixtures/partials/partial-latin1.handlebars
generated
vendored
Normal file
2
resources/app/node_modules/express-handlebars/spec/fixtures/partials/partial-latin1.handlebars
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
file encoding: Windows 1252 (latin1)
|
||||
<p>partial <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></p>
|
||||
1
resources/app/node_modules/express-handlebars/spec/fixtures/partials/partial.handlebars
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/spec/fixtures/partials/partial.handlebars
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
partial {{text}}
|
||||
1
resources/app/node_modules/express-handlebars/spec/fixtures/partials/subdir/partial-subdir.handlebars
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/spec/fixtures/partials/subdir/partial-subdir.handlebars
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
subdir partial {{text}}
|
||||
1
resources/app/node_modules/express-handlebars/spec/fixtures/render-cached.handlebars
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/spec/fixtures/render-cached.handlebars
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
not cached
|
||||
1
resources/app/node_modules/express-handlebars/spec/fixtures/render-helper.handlebars
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/spec/fixtures/render-helper.handlebars
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<p>{{help text}}</p>
|
||||
3
resources/app/node_modules/express-handlebars/spec/fixtures/render-latin1.handlebars
generated
vendored
Normal file
3
resources/app/node_modules/express-handlebars/spec/fixtures/render-latin1.handlebars
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{{> partial-latin1}}
|
||||
file encoding: Windows 1252 (latin1)
|
||||
<p>render <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></p>
|
||||
2
resources/app/node_modules/express-handlebars/spec/fixtures/render-partial.handlebars
generated
vendored
Normal file
2
resources/app/node_modules/express-handlebars/spec/fixtures/render-partial.handlebars
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
<h1>{{> partial}}</h1>
|
||||
<p>{{text}}</p>
|
||||
2
resources/app/node_modules/express-handlebars/spec/fixtures/render-subdir-partial.handlebars
generated
vendored
Normal file
2
resources/app/node_modules/express-handlebars/spec/fixtures/render-subdir-partial.handlebars
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
<h1>{{> subdir/partial-subdir}}</h1>
|
||||
<p>{{text}}</p>
|
||||
1
resources/app/node_modules/express-handlebars/spec/fixtures/render-text.handlebars
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/spec/fixtures/render-text.handlebars
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<p>{{text}}</p>
|
||||
1
resources/app/node_modules/express-handlebars/spec/fixtures/templates/subdir/template.handlebars
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/spec/fixtures/templates/subdir/template.handlebars
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<p>{{text}}</p>
|
||||
2
resources/app/node_modules/express-handlebars/spec/fixtures/templates/template-latin1.handlebars
generated
vendored
Normal file
2
resources/app/node_modules/express-handlebars/spec/fixtures/templates/template-latin1.handlebars
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
file encoding: Windows 1252 (latin1)
|
||||
<p><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></p>
|
||||
1
resources/app/node_modules/express-handlebars/spec/fixtures/templates/template.handlebars
generated
vendored
Normal file
1
resources/app/node_modules/express-handlebars/spec/fixtures/templates/template.handlebars
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<p>{{text}}</p>
|
||||
12
resources/app/node_modules/express-handlebars/tsconfig.json
generated
vendored
Normal file
12
resources/app/node_modules/express-handlebars/tsconfig.json
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"outDir": "./dist",
|
||||
"target": "ES2015",
|
||||
"declaration": true,
|
||||
"sourceMap": true,
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"allowSyntheticDefaultImports": true
|
||||
},
|
||||
"include": ["./lib/**/*"]
|
||||
}
|
||||
Reference in New Issue
Block a user