UNPKG

5.35 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.validateEntrypointSource = validateEntrypointSource;
7exports.isMainFieldValid = isMainFieldValid;
8exports.isModuleFieldValid = isModuleFieldValid;
9exports.isUmdMainFieldValid = isUmdMainFieldValid;
10exports.isBrowserFieldValid = isBrowserFieldValid;
11exports.isReactNativeFieldValid = isReactNativeFieldValid;
12exports.isUmdNameSpecified = isUmdNameSpecified;
13exports.validateEntrypoint = validateEntrypoint;
14exports.default = validate;
15
16var _project = require("./project");
17
18var _entrypoint = require("./entrypoint");
19
20var _messages = require("./messages");
21
22var _errors = require("./errors");
23
24var _utils = require("./utils");
25
26var logger = _interopRequireWildcard(require("./logger"));
27
28var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal"));
29
30var _validatePackage = require("./validate-package");
31
32function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
34function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
35
36// this doesn't offer to fix anything
37// just does validation
38// used in build and watch
39function validateEntrypointSource(entrypoint) {
40 try {
41 if (!entrypoint.source.startsWith(entrypoint.package.directory)) {
42 throw new _errors.FatalError(`entrypoint source files must be inside their respective package directory but this entrypoint has specified its source file as ${entrypoint.configSource}`, entrypoint.name);
43 }
44 } catch (e) {
45 if (e.code === "MODULE_NOT_FOUND") {
46 throw new _errors.FatalError(_messages.errors.noSource(entrypoint.configSource), entrypoint.name);
47 }
48
49 throw e;
50 }
51}
52
53function isMainFieldValid(entrypoint) {
54 return entrypoint.main === (0, _utils.getValidStringFieldContentForBuildType)("main", entrypoint.package.name);
55}
56
57function isModuleFieldValid(entrypoint) {
58 return entrypoint.module === (0, _utils.getValidStringFieldContentForBuildType)("module", entrypoint.package.name);
59}
60
61function isUmdMainFieldValid(entrypoint) {
62 return entrypoint.umdMain === (0, _utils.getValidStringFieldContentForBuildType)("umd:main", entrypoint.package.name);
63}
64
65function isBrowserFieldValid(entrypoint) {
66 return (0, _fastDeepEqual.default)(entrypoint.browser, (0, _utils.getValidObjectFieldContentForBuildType)("browser", entrypoint.package.name, entrypoint.module !== null));
67}
68
69function isReactNativeFieldValid(entrypoint) {
70 return (0, _fastDeepEqual.default)(entrypoint.reactNative, (0, _utils.getValidObjectFieldContentForBuildType)("react-native", entrypoint.package.name, entrypoint.module !== null));
71}
72
73function isUmdNameSpecified(entrypoint) {
74 return typeof entrypoint._config.umdName === "string";
75}
76
77function validateEntrypoint(entrypoint, log) {
78 validateEntrypointSource(entrypoint);
79
80 if (log) {
81 logger.info(_messages.infos.validEntrypoint, entrypoint.name);
82 }
83
84 if (!isMainFieldValid(entrypoint)) {
85 throw new _errors.FixableError(_messages.errors.invalidMainField, entrypoint.name);
86 }
87
88 if (log) {
89 logger.info(_messages.infos.validMainField, entrypoint.name);
90 }
91
92 if (entrypoint.module !== null) {
93 if (isModuleFieldValid(entrypoint)) {
94 if (log) {
95 logger.info(_messages.infos.validModuleField, entrypoint.name);
96 }
97 } else {
98 throw new _errors.FixableError(_messages.errors.invalidModuleField, entrypoint.name);
99 }
100 }
101
102 if (entrypoint.umdMain !== null) {
103 if (isUmdMainFieldValid(entrypoint)) {
104 if (isUmdNameSpecified(entrypoint)) {
105 if (log) {
106 logger.info(_messages.infos.validUmdMainField, entrypoint.name);
107 }
108 } else {
109 throw new _errors.FixableError(_messages.errors.umdNameNotSpecified, entrypoint.name);
110 }
111 } else {
112 throw new _errors.FixableError(_messages.errors.invalidUmdMainField, entrypoint.name);
113 }
114 }
115
116 if (entrypoint.browser !== null) {
117 if (typeof entrypoint.browser === "string" || !isBrowserFieldValid(entrypoint)) {
118 throw new _errors.FixableError(_messages.errors.invalidBrowserField, entrypoint.name);
119 } else if (log) {
120 logger.info(_messages.infos.validBrowserField, entrypoint.name);
121 }
122 }
123
124 if (entrypoint.reactNative !== null) {
125 if (typeof entrypoint.reactNative === "string" || !isReactNativeFieldValid(entrypoint)) {
126 throw new _errors.FixableError(_messages.errors.invalidReactNativeField, entrypoint.name);
127 } else if (log) {
128 logger.info(_messages.infos.validReactNativeField, entrypoint.name);
129 }
130 }
131}
132
133async function validate(directory) {
134 let project = await _project.Project.create(directory);
135
136 for (let pkg of project.packages) {
137 (0, _validatePackage.validatePackage)(pkg);
138
139 for (let entrypoint of pkg.entrypoints) {
140 validateEntrypoint(entrypoint, true);
141 }
142
143 logger.info(_messages.infos.validPackageEntrypoints, pkg.name);
144 }
145
146 logger.success(_messages.successes.validProject);
147}
\No newline at end of file