UNPKG

5.1 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.Project = void 0;
7
8var _sarcastic = _interopRequireDefault(require("sarcastic"));
9
10var _path = _interopRequireDefault(require("path"));
11
12var _prompt = require("./prompt");
13
14var _pLimit = _interopRequireDefault(require("p-limit"));
15
16var _resolveFrom = _interopRequireDefault(require("resolve-from"));
17
18var _globby = _interopRequireDefault(require("globby"));
19
20var fs = _interopRequireWildcard(require("fs-extra"));
21
22var _item = require("./item");
23
24var _package = require("./package");
25
26var _constants = require("./constants");
27
28function _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; } }
29
30function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
32function _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; }
33
34let unsafeRequire = require;
35let askGlobalLimit = (0, _pLimit.default)(1);
36
37class Project extends _item.Item {
38 constructor(...args) {
39 super(...args);
40
41 _defineProperty(this, "packages", void 0);
42 }
43
44 get configPackages() {
45 return (0, _sarcastic.default)(this._config.packages, _sarcastic.default.default(_sarcastic.default.arrayOf(_sarcastic.default.string), ["."]));
46 } // probably gonna be irrelevant later but i want it for now
47
48
49 get isBolt() {
50 // we only want to return true when there is bolt config
51 // AND no yarn workspaces config
52 // because emotion has a bolt config and yarn workspaces
53 // and if you have both, you probably want workspaces
54 let hasBolt = !!this.json.bolt;
55 let hasYarnWorkspaces = !!this.json.workspaces;
56 return hasBolt && !hasYarnWorkspaces;
57 }
58
59 static async create(directory) {
60 let filePath = _path.default.join(directory, "package.json");
61
62 let contents = await fs.readFile(filePath, "utf-8");
63 let project = new Project(filePath, contents);
64 project.packages = await project._packages();
65 return project;
66 }
67
68 get name() {
69 return (0, _sarcastic.default)(this.json.name, _sarcastic.default.string);
70 }
71
72 set name(name) {
73 this.json.name = name;
74 }
75
76 async _packages() {
77 // suport bolt later probably
78 // maybe lerna too though probably not
79 if (!this._config.packages && this.json.workspaces) {
80 let _workspaces;
81
82 if (Array.isArray(this.json.workspaces)) {
83 _workspaces = this.json.workspaces;
84 } else if (Array.isArray(this.json.workspaces.packages)) {
85 _workspaces = this.json.workspaces.packages;
86 }
87
88 let workspaces = (0, _sarcastic.default)(_workspaces, _sarcastic.default.arrayOf(_sarcastic.default.string));
89 let packages = await (0, _prompt.promptInput)("what packages should preconstruct build?", this, workspaces.join(","));
90 this._config.packages = packages.split(",");
91 await this.save();
92 }
93
94 try {
95 let filenames = await (0, _globby.default)(this.configPackages, {
96 cwd: this.directory,
97 onlyDirectories: true,
98 absolute: true,
99 expandDirectories: false
100 });
101 let packages = await Promise.all(filenames.map(async x => {
102 let pkg = await _package.Package.create(x);
103 pkg.project = this;
104 return pkg;
105 }));
106 return packages;
107 } catch (error) {
108 if (error instanceof _sarcastic.default.AssertionError) {
109 return [];
110 }
111
112 throw error;
113 }
114 }
115
116 global(pkg) {
117 if (this._config.globals !== undefined && this._config.globals[pkg]) {
118 return this._config.globals[pkg];
119 } else {
120 try {
121 let pkgJson = unsafeRequire((0, _resolveFrom.default)(this.directory, _path.default.join(pkg, "package.json")));
122
123 if (pkgJson && pkgJson[_constants.PKG_JSON_CONFIG_FIELD] && pkgJson[_constants.PKG_JSON_CONFIG_FIELD].umdName) {
124 return pkgJson[_constants.PKG_JSON_CONFIG_FIELD].umdName;
125 }
126 } catch (err) {
127 if (err.code !== "MODULE_NOT_FOUND") {
128 throw err;
129 }
130 }
131
132 throw askGlobalLimit(() => (async () => {
133 // if while we were waiting, that global was added, return
134 if (this._config.globals !== undefined && this._config.globals[pkg]) {
135 return;
136 }
137
138 let response = await (0, _prompt.promptInput)(`What should the umdName of ${pkg} be?`, this);
139
140 this._addGlobal(pkg, response);
141
142 await this.save();
143 })());
144 }
145 }
146
147 _addGlobal(pkg, name) {
148 if (!this._config.globals) {
149 this._config.globals = {};
150 }
151
152 this._config.globals[pkg] = name;
153 }
154
155}
156
157exports.Project = Project;
\No newline at end of file