"use strict";
|
Object.defineProperty(exports, "__esModule", { value: true });
|
exports.maybeSetModuleExports = void 0;
|
var tslib_1 = require("tslib");
|
var types_1 = tslib_1.__importDefault(require("./types"));
|
function default_1(fork) {
|
var types = fork.use(types_1.default);
|
var Type = types.Type;
|
var builtin = types.builtInTypes;
|
var isNumber = builtin.number;
|
// An example of constructing a new type with arbitrary constraints from
|
// an existing type.
|
function geq(than) {
|
return Type.from(function (value) { return isNumber.check(value) && value >= than; }, isNumber + " >= " + than);
|
}
|
;
|
// Default value-returning functions that may optionally be passed as a
|
// third argument to Def.prototype.field.
|
var defaults = {
|
// Functions were used because (among other reasons) that's the most
|
// elegant way to allow for the emptyArray one always to give a new
|
// array instance.
|
"null": function () { return null; },
|
"emptyArray": function () { return []; },
|
"false": function () { return false; },
|
"true": function () { return true; },
|
"undefined": function () { },
|
"use strict": function () { return "use strict"; }
|
};
|
var naiveIsPrimitive = Type.or(builtin.string, builtin.number, builtin.boolean, builtin.null, builtin.undefined);
|
var isPrimitive = Type.from(function (value) {
|
if (value === null)
|
return true;
|
var type = typeof value;
|
if (type === "object" ||
|
type === "function") {
|
return false;
|
}
|
return true;
|
}, naiveIsPrimitive.toString());
|
return {
|
geq: geq,
|
defaults: defaults,
|
isPrimitive: isPrimitive,
|
};
|
}
|
exports.default = default_1;
|
;
|
// This function accepts a getter function that should return an object
|
// conforming to the NodeModule interface above. Typically, this means calling
|
// maybeSetModuleExports(() => module) at the very end of any module that has a
|
// default export, so the default export value can replace module.exports and
|
// thus CommonJS consumers can continue to rely on require("./that/module")
|
// returning the default-exported value, rather than always returning an exports
|
// object with a default property equal to that value. This function should help
|
// preserve backwards compatibility for CommonJS consumers, as a replacement for
|
// the ts-add-module-exports package.
|
function maybeSetModuleExports(moduleGetter) {
|
try {
|
var nodeModule = moduleGetter();
|
var originalExports = nodeModule.exports;
|
var defaultExport = originalExports["default"];
|
}
|
catch (_a) {
|
// It's normal/acceptable for this code to throw a ReferenceError due to
|
// the moduleGetter function attempting to access a non-existent global
|
// `module` variable. That's the reason we use a getter function here:
|
// so the calling code doesn't have to do its own typeof module ===
|
// "object" checking (because it's always safe to pass `() => module` as
|
// an argument, even when `module` is not defined in the calling scope).
|
return;
|
}
|
if (defaultExport &&
|
defaultExport !== originalExports &&
|
typeof originalExports === "object") {
|
// Make all properties found in originalExports properties of the
|
// default export, including the default property itself, so that
|
// require(nodeModule.id).default === require(nodeModule.id).
|
Object.assign(defaultExport, originalExports, { "default": defaultExport });
|
// Object.assign only transfers enumerable properties, and
|
// __esModule is (and should remain) non-enumerable.
|
if (originalExports.__esModule) {
|
Object.defineProperty(defaultExport, "__esModule", { value: true });
|
}
|
// This line allows require(nodeModule.id) === defaultExport, rather
|
// than (only) require(nodeModule.id).default === defaultExport.
|
nodeModule.exports = defaultExport;
|
}
|
}
|
exports.maybeSetModuleExports = maybeSetModuleExports;
|
//# sourceMappingURL=shared.js.map
|