UNPKG

5.51 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.StrictEntrypoint = exports.Entrypoint = void 0;
7
8var _sarcastic = _interopRequireDefault(require("sarcastic"));
9
10var _path = _interopRequireDefault(require("path"));
11
12var _validate = require("./validate");
13
14var _item = require("./item");
15
16var _validatePackage = require("./validate-package");
17
18var _resolve = _interopRequireDefault(require("resolve"));
19
20var _constants = require("./constants");
21
22function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
24function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
25
26function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
27
28let fields = ["version", "description", "main", "module", "umd:main", "browser", "react-native"];
29
30function setFieldInOrder(obj, field, value) {
31 if (field in obj) {
32 return _objectSpread({}, obj, {
33 [field]: value
34 });
35 }
36
37 let fieldIndex = fields.indexOf(field);
38 let idealField = fields.slice(0, fieldIndex).reverse().find(key => {
39 return key in obj;
40 });
41
42 if (idealField === undefined) {
43 return _objectSpread({}, obj, {
44 [field]: value
45 });
46 }
47
48 let newObj = {};
49
50 for (let key in obj) {
51 newObj[key] = obj[key];
52
53 if (key === idealField) {
54 newObj[field] = value;
55 }
56 }
57
58 return newObj;
59}
60/*::
61import { Package } from './package'
62*/
63
64
65class Entrypoint extends _item.Item {
66 constructor(filePath, contents, pkg) {
67 super(filePath, contents);
68
69 _defineProperty(this, "package", void 0);
70
71 _defineProperty(this, "_strict", void 0);
72
73 this.package = pkg;
74 }
75
76 get name() {
77 return _path.default.join(this.package.name, _path.default.relative(this.package.directory, this.directory));
78 }
79
80 get main() {
81 return (0, _sarcastic.default)(this.json.main, _sarcastic.default.maybe(_sarcastic.default.string));
82 }
83
84 set main(path) {
85 this.json = setFieldInOrder(this.json, "main", path);
86 }
87
88 get module() {
89 return (0, _sarcastic.default)(this.json.module, _sarcastic.default.maybe(_sarcastic.default.string));
90 }
91
92 set module(path) {
93 this.json = setFieldInOrder(this.json, "module", path);
94 }
95
96 get browser() {
97 return (0, _sarcastic.default)(this.json.browser, _sarcastic.default.maybe(_sarcastic.default.either(_sarcastic.default.string, _sarcastic.default.objectOf(_sarcastic.default.string))));
98 }
99
100 set browser(option) {
101 this.json = setFieldInOrder(this.json, "browser", option);
102 }
103
104 get reactNative() {
105 return (0, _sarcastic.default)(this.json["react-native"], _sarcastic.default.maybe(_sarcastic.default.either(_sarcastic.default.string, _sarcastic.default.objectOf(_sarcastic.default.string))));
106 }
107
108 set reactNative(option) {
109 this.json = setFieldInOrder(this.json, "react-native", option);
110 }
111
112 get umdMain() {
113 return (0, _sarcastic.default)(this.json["umd:main"], _sarcastic.default.maybe(_sarcastic.default.string));
114 }
115
116 set umdMain(path) {
117 this.json = setFieldInOrder(this.json, "umd:main", path);
118 }
119
120 get configSource() {
121 return (0, _sarcastic.default)(this._config.source, _sarcastic.default.default(_sarcastic.default.string, "src/index"));
122 }
123
124 get source() {
125 return _resolve.default.sync(_path.default.join(this.directory, this.configSource), {
126 extensions: _constants.EXTENSIONS
127 });
128 }
129
130 get umdName() {
131 return (0, _sarcastic.default)(this._config.umdName, _sarcastic.default.maybe(_sarcastic.default.string));
132 }
133
134 set umdName(umdName) {
135 if (umdName === null) {
136 delete this._config.umdName;
137 } else {
138 this._config.umdName = umdName;
139 }
140 }
141
142 strict() {
143 if (!this._strict) {
144 (0, _validatePackage.validatePackage)(this.package);
145 (0, _validate.validateEntrypoint)(this, false);
146 this._strict = new StrictEntrypoint(this.path, this._contents, this.package);
147 }
148
149 return this._strict;
150 }
151
152}
153
154exports.Entrypoint = Entrypoint;
155
156class StrictEntrypoint extends Entrypoint {
157 get main() {
158 return (0, _sarcastic.default)(this.json.main, _sarcastic.default.string);
159 }
160
161 set main(path) {
162 this.json = setFieldInOrder(this.json, "main", path);
163 }
164
165 get browser() {
166 return (0, _sarcastic.default)(this.json.browser, _sarcastic.default.maybe(_sarcastic.default.objectOf(_sarcastic.default.string)));
167 }
168
169 set browser(option) {
170 this.json = setFieldInOrder(this.json, "browser", option);
171 }
172
173 get reactNative() {
174 return (0, _sarcastic.default)(this.json["react-native"], _sarcastic.default.maybe(_sarcastic.default.objectOf(_sarcastic.default.string)));
175 }
176
177 set reactNative(option) {
178 this.json = setFieldInOrder(this.json, "react-native", option);
179 }
180
181 updater(json) {
182 super.updater(json);
183 (0, _validatePackage.validatePackage)(this.package);
184 (0, _validate.validateEntrypoint)(this, false);
185 }
186
187 strict() {
188 return this;
189 }
190
191}
192
193exports.StrictEntrypoint = StrictEntrypoint;
\No newline at end of file