UNPKG

6.22 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, _path.default.join(pkg.name, _path.default.relative(pkg.directory, directory)));
118 }
119
120 contents = getPlainEntrypointContent();
121 await fs.writeFile(filename, contents);
122 }
123
124 return new _entrypoint.Entrypoint(filename, contents, pkg);
125 }));
126 });
127 return pkg;
128 }
129
130 setFieldOnEntrypoints(field) {
131 this.entrypoints.forEach(entrypoint => {
132 switch (field) {
133 case "main":
134 {
135 entrypoint.main = (0, _utils.getValidStringFieldContentForBuildType)("main", this.name);
136 break;
137 }
138
139 case "module":
140 {
141 entrypoint.module = (0, _utils.getValidStringFieldContentForBuildType)("module", this.name);
142 break;
143 }
144
145 case "browser":
146 {
147 entrypoint.browser = (0, _utils.getValidObjectFieldContentForBuildType)("browser", this.name, entrypoint.module !== null);
148 break;
149 }
150
151 case "umdMain":
152 {
153 entrypoint.umdMain = (0, _utils.getValidStringFieldContentForBuildType)("umd:main", this.name);
154 break;
155 }
156
157 case "reactNative":
158 {
159 entrypoint.reactNative = (0, _utils.getValidObjectFieldContentForBuildType)("react-native", this.name, entrypoint.module !== null);
160 break;
161 }
162 }
163 });
164 }
165
166 get name() {
167 return (0, _sarcastic.default)(this.json.name, _sarcastic.default.string);
168 }
169
170 set name(name) {
171 this.json.name = name;
172 }
173
174 get dependencies() {
175 return (0, _sarcastic.default)(this.json.dependencies, _sarcastic.default.maybe(_sarcastic.default.objectOf(_sarcastic.default.string)));
176 }
177
178 get peerDependencies() {
179 return (0, _sarcastic.default)(this.json.peerDependencies, _sarcastic.default.maybe(_sarcastic.default.objectOf(_sarcastic.default.string)));
180 }
181
182}
183
184exports.Package = Package;
185
186class StrictPackage extends Package {
187 constructor(...args) {
188 super(...args);
189
190 _defineProperty(this, "strictEntrypoints", void 0);
191 }
192
193}
194
195exports.StrictPackage = StrictPackage;
\No newline at end of file