UNPKG

6.26 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.StrictPackage = exports.Package = void 0;
7
8var _sarcastic = _interopRequireDefault(require("sarcastic"));
9
10var _globby = _interopRequireDefault(require("globby"));
11
12var fs = _interopRequireWildcard(require("fs-extra"));
13
14var _path = _interopRequireDefault(require("path"));
15
16var _item = require("./item");
17
18var _errors = require("./errors");
19
20var _entrypoint = require("./entrypoint");
21
22var _utils = require("./utils");
23
24var _messages = require("./messages");
25
26function _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; } }
27
28function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
30function _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; }
31
32/*::
33import {Project} from './project'
34*/
35class Package extends _item.Item {
36 constructor(...args) {
37 super(...args);
38
39 _defineProperty(this, "project", void 0);
40
41 _defineProperty(this, "entrypoints", void 0);
42 }
43
44 get configEntrypoints() {
45 return (0, _sarcastic.default)(this._config.entrypoints, _sarcastic.default.default(_sarcastic.default.arrayOf(_sarcastic.default.string), ["."]));
46 }
47
48 static async create(directory) {
49 let filePath = _path.default.join(directory, "package.json");
50
51 let contents = await fs.readFile(filePath, "utf-8");
52 let pkg = new Package(filePath, contents);
53 let entrypointDirectories = await (0, _globby.default)(pkg.configEntrypoints, {
54 cwd: pkg.directory,
55 onlyDirectories: true,
56 absolute: true,
57 expandDirectories: false
58 });
59 pkg.entrypoints = await Promise.all(entrypointDirectories.map(async directory => {
60 let filename = _path.default.join(directory, "package.json");
61
62 let contents = null;
63
64 try {
65 contents = await fs.readFile(filename, "utf-8");
66 } catch (e) {
67 if (e.code !== "ENOENT") {
68 throw e;
69 }
70 }
71
72 return {
73 filename,
74 contents
75 };
76 })).then(descriptors => {
77 let getPlainEntrypointContent = () => {
78 let plainEntrypointObj = {
79 main: (0, _utils.getValidStringFieldContentForBuildType)("main", pkg.name)
80 };
81
82 for (let descriptor of descriptors) {
83 if (descriptor.contents !== null) {
84 let parsed = JSON.parse(descriptor.contents);
85
86 for (let field of ["module", "umd:main"]) {
87 if (parsed[field] !== undefined) {
88 plainEntrypointObj[field] = (0, _utils.getValidStringFieldContentForBuildType)(field, pkg.name);
89 }
90 }
91
92 for (let field of ["browser", "react-native"]) {
93 if (parsed[field] !== undefined) {
94 plainEntrypointObj[field] = (0, _utils.getValidObjectFieldContentForBuildType)(field, pkg.name, plainEntrypointObj.module !== undefined);
95 }
96 }
97 }
98 }
99
100 let plainEntrypointContents = JSON.stringify(plainEntrypointObj);
101
102 getPlainEntrypointContent = () => plainEntrypointContents;
103
104 return plainEntrypointContents;
105 };
106
107 return Promise.all(descriptors.map(async ({
108 filename,
109 contents
110 }) => {
111 if (contents === null) {
112 let shouldCreateEntrypointPkgJson = await _messages.confirms.createEntrypointPkgJson({
113 name: _path.default.join(pkg.name, _path.default.relative(pkg.directory, directory))
114 });
115
116 if (!shouldCreateEntrypointPkgJson) {
117 throw new _errors.FatalError(_messages.errors.noEntrypointPkgJson, {
118 name: _path.default.join(pkg.name, _path.default.relative(pkg.directory, directory))
119 });
120 }
121
122 contents = getPlainEntrypointContent();
123 await fs.writeFile(filename, contents);
124 }
125
126 return new _entrypoint.Entrypoint(filename, contents, pkg);
127 }));
128 });
129 return pkg;
130 }
131
132 setFieldOnEntrypoints(field) {
133 this.entrypoints.forEach(entrypoint => {
134 switch (field) {
135 case "main":
136 {
137 entrypoint.main = (0, _utils.getValidStringFieldContentForBuildType)("main", this.name);
138 break;
139 }
140
141 case "module":
142 {
143 entrypoint.module = (0, _utils.getValidStringFieldContentForBuildType)("module", this.name);
144 break;
145 }
146
147 case "browser":
148 {
149 entrypoint.browser = (0, _utils.getValidObjectFieldContentForBuildType)("browser", this.name, entrypoint.module !== null);
150 break;
151 }
152
153 case "umdMain":
154 {
155 entrypoint.umdMain = (0, _utils.getValidStringFieldContentForBuildType)("umd:main", this.name);
156 break;
157 }
158
159 case "reactNative":
160 {
161 entrypoint.reactNative = (0, _utils.getValidObjectFieldContentForBuildType)("react-native", this.name, entrypoint.module !== null);
162 break;
163 }
164 }
165 });
166 }
167
168 get name() {
169 return (0, _sarcastic.default)(this.json.name, _sarcastic.default.string);
170 }
171
172 set name(name) {
173 this.json.name = name;
174 }
175
176 get dependencies() {
177 return (0, _sarcastic.default)(this.json.dependencies, _sarcastic.default.maybe(_sarcastic.default.objectOf(_sarcastic.default.string)));
178 }
179
180 get peerDependencies() {
181 return (0, _sarcastic.default)(this.json.peerDependencies, _sarcastic.default.maybe(_sarcastic.default.objectOf(_sarcastic.default.string)));
182 }
183
184}
185
186exports.Package = Package;
187
188class StrictPackage extends Package {
189 constructor(...args) {
190 super(...args);
191
192 _defineProperty(this, "strictEntrypoints", void 0);
193 }
194
195}
196
197exports.StrictPackage = StrictPackage;
\No newline at end of file