@intelligentgraphics/ig.gfx.packager 3.0.0-alpha.1 → 3.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cli.mjs +595 -0
- package/build/cli.mjs.map +1 -0
- package/build/commands/{build.js → build.mjs} +73 -77
- package/build/commands/build.mjs.map +1 -0
- package/build/commands/{generate.js → generate.mjs} +31 -58
- package/build/commands/generate.mjs.map +1 -0
- package/build/commands/postinstall.mjs +49 -0
- package/build/commands/postinstall.mjs.map +1 -0
- package/build/commands/publishNpm.mjs +129 -0
- package/build/commands/publishNpm.mjs.map +1 -0
- package/build/commands/{release.js → release.mjs} +101 -124
- package/build/commands/release.mjs.map +1 -0
- package/build/{dependencies.js → dependencies.mjs} +16 -40
- package/build/dependencies.mjs.map +1 -0
- package/build/index.mjs +6 -0
- package/build/index.mjs.map +1 -0
- package/build/scripts.mjs +11 -0
- package/build/scripts.mjs.map +1 -0
- package/build/versionFile.mjs +365 -0
- package/build/versionFile.mjs.map +1 -0
- package/package.json +12 -11
- package/readme.md +12 -0
- package/build/cli.js +0 -8316
- package/build/cli.js.map +0 -1
- package/build/commands/build.js.map +0 -1
- package/build/commands/generate.js.map +0 -1
- package/build/commands/postinstall.js +0 -78
- package/build/commands/postinstall.js.map +0 -1
- package/build/commands/publishNpm.js +0 -157
- package/build/commands/publishNpm.js.map +0 -1
- package/build/commands/release.js.map +0 -1
- package/build/dependencies.js.map +0 -1
- package/build/index.js +0 -8
- package/build/index.js.map +0 -1
- package/build/scripts.js +0 -32
- package/build/scripts.js.map +0 -1
- package/build/versionFile.js +0 -182
- package/build/versionFile.js.map +0 -1
package/build/cli.mjs
ADDED
|
@@ -0,0 +1,595 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import updateNotifier from 'update-notifier';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { dirname } from 'path';
|
|
6
|
+
import yargs from 'yargs/yargs';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import y18n from 'y18n';
|
|
9
|
+
import writePkg from 'write-pkg';
|
|
10
|
+
import inquirer from 'inquirer';
|
|
11
|
+
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const instance = y18n({
|
|
14
|
+
directory: path.join(__dirname, "..", "locales"),
|
|
15
|
+
updateFiles: false,
|
|
16
|
+
locale: "en",
|
|
17
|
+
fallbackToLanguage: true
|
|
18
|
+
});
|
|
19
|
+
const translate = (key, ...args) => instance.__(key, ...args);
|
|
20
|
+
|
|
21
|
+
const getNodeErrorCode = error => {
|
|
22
|
+
if (error !== null && typeof error === "object" && error.code !== undefined) {
|
|
23
|
+
return error.code;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* No such file or directory: Commonly raised by fs operations to indicate that a component of the specified pathname does not exist. No entity (file or directory) could be found by the given path.
|
|
29
|
+
*
|
|
30
|
+
* @param {unknown} error
|
|
31
|
+
*/
|
|
32
|
+
const isErrorENOENT = error => getNodeErrorCode(error) === "ENOENT";
|
|
33
|
+
|
|
34
|
+
const readNpmManifest = directory => {
|
|
35
|
+
const packageJsonPath = path.join(directory, "package.json");
|
|
36
|
+
const packageJson = fs.readFileSync(packageJsonPath, {
|
|
37
|
+
encoding: "utf8"
|
|
38
|
+
});
|
|
39
|
+
return JSON.parse(packageJson);
|
|
40
|
+
};
|
|
41
|
+
const writeNpmManifest = (directory, packageJson) => {
|
|
42
|
+
const packageJsonPath = path.join(directory, "package.json");
|
|
43
|
+
writePkg.sync(packageJsonPath, packageJson);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// Functionality related to working with a single package.
|
|
47
|
+
const PACKAGE_FILE = "_Package.json";
|
|
48
|
+
const INDEX_FILE = "_Index.json";
|
|
49
|
+
const ANIMATION_FILE = ".animation.json";
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Describes the location of a single package.
|
|
53
|
+
*
|
|
54
|
+
* @export
|
|
55
|
+
* @interface PackageLocation
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
const parseCreatorPackageName = manifest => {
|
|
59
|
+
const [domain, ...subdomainParts] = manifest.Package.split(".");
|
|
60
|
+
return {
|
|
61
|
+
domain,
|
|
62
|
+
subdomain: subdomainParts.join(".")
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Detects the package at the given directory.
|
|
67
|
+
*
|
|
68
|
+
* @param {string} directory
|
|
69
|
+
* @returns {PackageLocation}
|
|
70
|
+
*/
|
|
71
|
+
const detectPackage = (workspace, directory) => {
|
|
72
|
+
directory = path.resolve(workspace.path, directory);
|
|
73
|
+
const scriptsPath = path.join(directory, "Scripts");
|
|
74
|
+
const tsPath = path.join(directory, "ts");
|
|
75
|
+
let location;
|
|
76
|
+
if (fs.existsSync(scriptsPath)) {
|
|
77
|
+
location = {
|
|
78
|
+
_kind: "PackageLocation",
|
|
79
|
+
path: directory,
|
|
80
|
+
scriptsDir: scriptsPath,
|
|
81
|
+
manifestDir: scriptsPath
|
|
82
|
+
};
|
|
83
|
+
} else if (fs.existsSync(tsPath)) {
|
|
84
|
+
location = {
|
|
85
|
+
_kind: "PackageLocation",
|
|
86
|
+
path: directory,
|
|
87
|
+
scriptsDir: tsPath,
|
|
88
|
+
manifestDir: directory
|
|
89
|
+
};
|
|
90
|
+
} else {
|
|
91
|
+
location = {
|
|
92
|
+
_kind: "PackageLocation",
|
|
93
|
+
path: directory,
|
|
94
|
+
scriptsDir: directory,
|
|
95
|
+
manifestDir: directory
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (readPackageCreatorManifest(location) === undefined) {
|
|
99
|
+
throw new Error(`No _Package.json found in ${location.manifestDir}`);
|
|
100
|
+
}
|
|
101
|
+
return location;
|
|
102
|
+
};
|
|
103
|
+
const readPackageCreatorManifest = location => {
|
|
104
|
+
const packageJsonPath = path.join(location.manifestDir, PACKAGE_FILE);
|
|
105
|
+
const packageJson = fs.readFileSync(packageJsonPath, {
|
|
106
|
+
encoding: "utf8"
|
|
107
|
+
});
|
|
108
|
+
const result = JSON.parse(packageJson);
|
|
109
|
+
return {
|
|
110
|
+
...result,
|
|
111
|
+
Scope: result.Scope || result.Package
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
const writePackageCreatorManifest = (location, creatorPackage) => {
|
|
115
|
+
const packageJsonPath = path.join(location.manifestDir, PACKAGE_FILE);
|
|
116
|
+
fs.writeFileSync(packageJsonPath, JSON.stringify(creatorPackage, null, "\t") + "\n");
|
|
117
|
+
};
|
|
118
|
+
const readPackageCreatorIndex = location => {
|
|
119
|
+
try {
|
|
120
|
+
const indexPath = path.join(location.manifestDir, INDEX_FILE);
|
|
121
|
+
const index = fs.readFileSync(indexPath, {
|
|
122
|
+
encoding: "utf8"
|
|
123
|
+
});
|
|
124
|
+
return JSON.parse(index);
|
|
125
|
+
} catch (err) {
|
|
126
|
+
if (isErrorENOENT(err)) {
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
throw err;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const writePackageCreatorIndex = (location, index) => {
|
|
133
|
+
const packageJsonPath = path.join(location.manifestDir, INDEX_FILE);
|
|
134
|
+
fs.writeFileSync(packageJsonPath, JSON.stringify(index, null, "\t") + "\n");
|
|
135
|
+
};
|
|
136
|
+
const readPackageNpmManifest = location => {
|
|
137
|
+
try {
|
|
138
|
+
return readNpmManifest(location.manifestDir);
|
|
139
|
+
} catch (err) {
|
|
140
|
+
if (isErrorENOENT(err)) {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
throw err;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
const writePackageNpmManifest = (location, packageJson) => {
|
|
147
|
+
writeNpmManifest(location.manifestDir, packageJson);
|
|
148
|
+
};
|
|
149
|
+
const readPackageAnimationList = location => {
|
|
150
|
+
const directoryContent = fs.readdirSync(location.manifestDir);
|
|
151
|
+
const animationPathList = [];
|
|
152
|
+
for (const entry of directoryContent) {
|
|
153
|
+
if (entry.endsWith(ANIMATION_FILE)) {
|
|
154
|
+
const animationPath = path.join(location.manifestDir, entry);
|
|
155
|
+
animationPathList.push(animationPath);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return animationPathList;
|
|
159
|
+
};
|
|
160
|
+
const getPackageReleasesDirectory = location => path.join(location.path, "Releases");
|
|
161
|
+
|
|
162
|
+
// Functionality related to working with a workspace consisting of multiple packages.
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Describe the location of a workspace constining of n packages.
|
|
166
|
+
*
|
|
167
|
+
* @export
|
|
168
|
+
* @interface WorkspaceLocation
|
|
169
|
+
*/
|
|
170
|
+
|
|
171
|
+
const detectWorkspace = directory => {
|
|
172
|
+
directory = path.resolve(process.cwd(), directory);
|
|
173
|
+
return {
|
|
174
|
+
_kind: "WorkspaceLocation",
|
|
175
|
+
path: directory
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
const readWorkspaceNpmManifest = workspace => {
|
|
179
|
+
try {
|
|
180
|
+
return readNpmManifest(workspace.path);
|
|
181
|
+
} catch (err) {
|
|
182
|
+
if (isErrorENOENT(err)) {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
throw err;
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
const writeWorkspaceNpmManifest = (workspace, packageJson) => writeNpmManifest(workspace.path, packageJson);
|
|
189
|
+
const getWorkspaceOutputPath = workspace => path.join(workspace.path, "bin");
|
|
190
|
+
const getWorkspaceLibPath = workspace => path.join(workspace.path, "lib");
|
|
191
|
+
function* iterateWorkspacePackages(workspace) {
|
|
192
|
+
const entries = fs.readdirSync(workspace.path, {
|
|
193
|
+
withFileTypes: true
|
|
194
|
+
});
|
|
195
|
+
for (const entry of entries) {
|
|
196
|
+
if (!entry.isDirectory()) {
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
yield detectPackage(workspace, entry.name);
|
|
201
|
+
} catch {}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const createDefaultPrompter = () => {
|
|
206
|
+
return {
|
|
207
|
+
confirm: async message => {
|
|
208
|
+
const {
|
|
209
|
+
confirm
|
|
210
|
+
} = await inquirer.prompt([{
|
|
211
|
+
type: "confirm",
|
|
212
|
+
message,
|
|
213
|
+
name: "confirm"
|
|
214
|
+
}]);
|
|
215
|
+
return confirm;
|
|
216
|
+
},
|
|
217
|
+
ask: async question => {
|
|
218
|
+
const {
|
|
219
|
+
answer
|
|
220
|
+
} = await inquirer.prompt([{
|
|
221
|
+
type: "list",
|
|
222
|
+
message: question.message,
|
|
223
|
+
name: "answer",
|
|
224
|
+
choices: question.options,
|
|
225
|
+
default: question.default
|
|
226
|
+
}]);
|
|
227
|
+
return answer;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
var name = "@intelligentgraphics/ig.gfx.packager";
|
|
233
|
+
var version = "3.0.0-alpha.4";
|
|
234
|
+
var description = "IG.GFX.Packager 3.0.0 Alpha 4 (3.0.0.5)";
|
|
235
|
+
var author = "Michael Beier <mb@intelligentgraphics.biz>";
|
|
236
|
+
var main = "build/index.mjs";
|
|
237
|
+
var type = "module";
|
|
238
|
+
var publishConfig = {
|
|
239
|
+
access: "public"
|
|
240
|
+
};
|
|
241
|
+
var engines = {
|
|
242
|
+
node: ">=16.0.0"
|
|
243
|
+
};
|
|
244
|
+
var bin = {
|
|
245
|
+
packager: "./build/index.mjs"
|
|
246
|
+
};
|
|
247
|
+
var files = [
|
|
248
|
+
"build",
|
|
249
|
+
"locales",
|
|
250
|
+
"scripts"
|
|
251
|
+
];
|
|
252
|
+
var scripts = {
|
|
253
|
+
dist: "rollup -c rollup.config.mjs",
|
|
254
|
+
clean: "rimraf build *.tsbuildinfo",
|
|
255
|
+
prepublishOnly: "yarn clean && yarn dist",
|
|
256
|
+
test: "vitest",
|
|
257
|
+
format: "prettier --write \"**/*.{ts,tsx,json}\""
|
|
258
|
+
};
|
|
259
|
+
var dependencies = {
|
|
260
|
+
ajv: "^8.6.2",
|
|
261
|
+
axios: "^0.21.1",
|
|
262
|
+
"core-js": "^3.16.0",
|
|
263
|
+
glob: "^7.1.4",
|
|
264
|
+
inquirer: "^9.1.4",
|
|
265
|
+
jszip: "^3.10.0",
|
|
266
|
+
lodash: "^4.17.21",
|
|
267
|
+
resolve: "^1.22.1",
|
|
268
|
+
"simple-git": "^3.15.1",
|
|
269
|
+
"source-map-support": "^0.5.19",
|
|
270
|
+
terser: "^4.8.0",
|
|
271
|
+
typedoc: "~0.23.2",
|
|
272
|
+
typescript: "~4.9.4",
|
|
273
|
+
"update-notifier": "^5.1.0",
|
|
274
|
+
"v8-compile-cache": "^2.1.1",
|
|
275
|
+
"write-pkg": "4",
|
|
276
|
+
y18n: "^5.0.8",
|
|
277
|
+
yargs: "^17.0.1"
|
|
278
|
+
};
|
|
279
|
+
var devDependencies = {
|
|
280
|
+
"@babel/preset-env": "^7.18.9",
|
|
281
|
+
"@babel/preset-typescript": "^7.18.6",
|
|
282
|
+
"@rollup/plugin-babel": "^6.0.3",
|
|
283
|
+
"@rollup/plugin-commonjs": "^24.0.0",
|
|
284
|
+
"@rollup/plugin-json": "^6.0.0",
|
|
285
|
+
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
286
|
+
"@types/glob": "^7.1.4",
|
|
287
|
+
"@types/inquirer": "^9.0.3",
|
|
288
|
+
"@types/node": "^16.4.11",
|
|
289
|
+
"@types/update-notifier": "^5.1.0",
|
|
290
|
+
"@types/yargs": "^17.0.2",
|
|
291
|
+
rollup: "^3.10.0",
|
|
292
|
+
vitest: "^0.28.1"
|
|
293
|
+
};
|
|
294
|
+
var pjson = {
|
|
295
|
+
name: name,
|
|
296
|
+
version: version,
|
|
297
|
+
description: description,
|
|
298
|
+
author: author,
|
|
299
|
+
main: main,
|
|
300
|
+
"private": false,
|
|
301
|
+
type: type,
|
|
302
|
+
publishConfig: publishConfig,
|
|
303
|
+
engines: engines,
|
|
304
|
+
bin: bin,
|
|
305
|
+
files: files,
|
|
306
|
+
scripts: scripts,
|
|
307
|
+
dependencies: dependencies,
|
|
308
|
+
devDependencies: devDependencies
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
312
|
+
const captureError = err => {
|
|
313
|
+
console.log("");
|
|
314
|
+
if (process.env.NODE_ENV !== "production") {
|
|
315
|
+
console.error(err);
|
|
316
|
+
} else {
|
|
317
|
+
console.error(translate("messages.error", err.message));
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
const buildOptions = {
|
|
321
|
+
outDir: {
|
|
322
|
+
description: translate("options.outDir.description"),
|
|
323
|
+
type: "string",
|
|
324
|
+
default: "bin",
|
|
325
|
+
coerce: input => input === undefined || input === null ? undefined : path.resolve(process.cwd(), input)
|
|
326
|
+
},
|
|
327
|
+
minimize: {
|
|
328
|
+
description: translate("options.minimize.description"),
|
|
329
|
+
type: "boolean",
|
|
330
|
+
default: true
|
|
331
|
+
},
|
|
332
|
+
cwd: {
|
|
333
|
+
description: translate("options.cwd.description"),
|
|
334
|
+
type: "string",
|
|
335
|
+
default: process.cwd()
|
|
336
|
+
},
|
|
337
|
+
clean: {
|
|
338
|
+
description: translate("options.clean.description"),
|
|
339
|
+
type: "boolean",
|
|
340
|
+
default: false
|
|
341
|
+
},
|
|
342
|
+
docs: {
|
|
343
|
+
type: "boolean",
|
|
344
|
+
default: false
|
|
345
|
+
}
|
|
346
|
+
};
|
|
347
|
+
const preCommandCheck = async () => {
|
|
348
|
+
var _repositoryPackage, _repositoryPackage$de, _repositoryPackage2, _repositoryPackage2$d;
|
|
349
|
+
const executedLocalPackager = path.relative(process.cwd(), __filename).indexOf("..") === -1;
|
|
350
|
+
let repositoryPackage;
|
|
351
|
+
try {
|
|
352
|
+
const repositoryPackageJson = fs.readFileSync(path.resolve(process.cwd(), "package.json"), "utf8");
|
|
353
|
+
repositoryPackage = JSON.parse(repositoryPackageJson);
|
|
354
|
+
} catch (err) {}
|
|
355
|
+
if ((_repositoryPackage = repositoryPackage) !== null && _repositoryPackage !== void 0 && (_repositoryPackage$de = _repositoryPackage.dependencies) !== null && _repositoryPackage$de !== void 0 && _repositoryPackage$de["@intelligentgraphics/ig.gfx.packager"] || (_repositoryPackage2 = repositoryPackage) !== null && _repositoryPackage2 !== void 0 && (_repositoryPackage2$d = _repositoryPackage2.devDependencies) !== null && _repositoryPackage2$d !== void 0 && _repositoryPackage2$d["@intelligentgraphics/ig.gfx.packager"]) {
|
|
356
|
+
const parts = ["Detected locally installed ig.gfx.packager."];
|
|
357
|
+
if (executedLocalPackager) {
|
|
358
|
+
parts.push('Run "npm install -g @intelligentgraphics/ig.gfx.packager@latest" to install the global version, if it is not yet installed.');
|
|
359
|
+
}
|
|
360
|
+
parts.push('Run "npm uninstall @intelligentgraphics/ig.gfx.packager" to remove the local version.');
|
|
361
|
+
console.error(parts.join("\n"));
|
|
362
|
+
process.exit(1);
|
|
363
|
+
}
|
|
364
|
+
if (executedLocalPackager) {
|
|
365
|
+
console.error(`Detected locally installed ig.gfx.packager.
|
|
366
|
+
Run "npm install -g @intelligentgraphics/ig.gfx.packager@latest" to install the global version, if it is not yet installed.
|
|
367
|
+
Run "npm install" to get rid of the local packager version.`);
|
|
368
|
+
process.exit(1);
|
|
369
|
+
}
|
|
370
|
+
const notifier = updateNotifier({
|
|
371
|
+
pkg: pjson,
|
|
372
|
+
shouldNotifyInNpmScript: true,
|
|
373
|
+
updateCheckInterval: 1000 * 60
|
|
374
|
+
});
|
|
375
|
+
notifier.notify({
|
|
376
|
+
isGlobal: true,
|
|
377
|
+
defer: true
|
|
378
|
+
});
|
|
379
|
+
const workspaceLocation = detectWorkspace(process.cwd());
|
|
380
|
+
const packageJson = readWorkspaceNpmManifest(workspaceLocation);
|
|
381
|
+
if (packageJson === undefined) {
|
|
382
|
+
throw new Error("Could not load package.json file in current directory");
|
|
383
|
+
}
|
|
384
|
+
packageJson.scripts ??= {};
|
|
385
|
+
packageJson.scripts.postinstall = "packager postinstall";
|
|
386
|
+
writeWorkspaceNpmManifest(workspaceLocation, packageJson);
|
|
387
|
+
};
|
|
388
|
+
const yargsInstance = yargs(process.argv.slice(2));
|
|
389
|
+
yargsInstance.command("build [directories...]", "Builds the specified directories", argv => argv.options(buildOptions), async ({
|
|
390
|
+
directories = [],
|
|
391
|
+
...options
|
|
392
|
+
}) => {
|
|
393
|
+
await preCommandCheck();
|
|
394
|
+
const {
|
|
395
|
+
buildFolders
|
|
396
|
+
} = await import('./commands/build.mjs').then(function (n) { return n.i; });
|
|
397
|
+
await buildFolders({
|
|
398
|
+
...options,
|
|
399
|
+
directories: directories
|
|
400
|
+
}).catch(captureError);
|
|
401
|
+
});
|
|
402
|
+
yargsInstance.command("publish [directory]", "Publishes the specified directory", argv => argv.options({
|
|
403
|
+
...buildOptions,
|
|
404
|
+
noUpload: {
|
|
405
|
+
type: "boolean",
|
|
406
|
+
default: false,
|
|
407
|
+
description: translate("options.noUpload.description")
|
|
408
|
+
},
|
|
409
|
+
domain: {
|
|
410
|
+
type: "string",
|
|
411
|
+
description: translate("options.domain.description")
|
|
412
|
+
},
|
|
413
|
+
subdomain: {
|
|
414
|
+
type: "string",
|
|
415
|
+
description: translate("options.subdomain.description")
|
|
416
|
+
},
|
|
417
|
+
newVersion: {
|
|
418
|
+
type: "string",
|
|
419
|
+
description: translate("options.newVersion.description"),
|
|
420
|
+
default: process.env.VERSION,
|
|
421
|
+
required: true
|
|
422
|
+
},
|
|
423
|
+
address: {
|
|
424
|
+
type: "string",
|
|
425
|
+
description: translate("options.address.description"),
|
|
426
|
+
default: "localhost"
|
|
427
|
+
},
|
|
428
|
+
service: {
|
|
429
|
+
type: "string",
|
|
430
|
+
description: translate("options.service.description"),
|
|
431
|
+
default: process.env.IG_GFX_ASSET_SERVICE,
|
|
432
|
+
required: true
|
|
433
|
+
},
|
|
434
|
+
user: {
|
|
435
|
+
type: "string",
|
|
436
|
+
description: translate("options.user.description"),
|
|
437
|
+
default: process.env.IG_GFX_USER
|
|
438
|
+
},
|
|
439
|
+
password: {
|
|
440
|
+
type: "string",
|
|
441
|
+
description: translate("options.password.description"),
|
|
442
|
+
default: process.env.IG_GFX_PWD
|
|
443
|
+
},
|
|
444
|
+
docs: {
|
|
445
|
+
type: "boolean",
|
|
446
|
+
default: false,
|
|
447
|
+
description: translate("options.docs.description")
|
|
448
|
+
},
|
|
449
|
+
pushOnly: {
|
|
450
|
+
type: "boolean",
|
|
451
|
+
default: false,
|
|
452
|
+
description: translate("options.pushOnly.description")
|
|
453
|
+
},
|
|
454
|
+
license: {
|
|
455
|
+
type: "string",
|
|
456
|
+
description: translate("options.license.description"),
|
|
457
|
+
default: process.env.IG_GFX_LICENSE
|
|
458
|
+
}
|
|
459
|
+
}), async ({
|
|
460
|
+
directory,
|
|
461
|
+
user,
|
|
462
|
+
password,
|
|
463
|
+
service,
|
|
464
|
+
license,
|
|
465
|
+
...options
|
|
466
|
+
}) => {
|
|
467
|
+
await preCommandCheck();
|
|
468
|
+
if (!options.noUpload) {
|
|
469
|
+
if (!service) {
|
|
470
|
+
captureError(new Error(translate("options.service.demands", "IG_GFX_ASSET_SERVICE")));
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
if (!license && (!user || !password)) {
|
|
474
|
+
captureError(new Error(`Expected authentication to be provided through either of the following methods:
|
|
475
|
+
- as a path to a license file using the --license option or the IG_GFX_LICENSE environment variable
|
|
476
|
+
- as a username and password using the --user and --password options, or the IG_GFX_USER and IG_GFX_PWD environment variables`));
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
if (license && !license.endsWith(".iglic")) {
|
|
480
|
+
captureError(new Error(`Expected the license path to end with the extension .iglic. Received the path "${license}". You may need to reload your environment variables by restarting the program you're using to execute the packager.`));
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
let authentication;
|
|
485
|
+
if (license) {
|
|
486
|
+
const fullLicensePath = path.resolve(process.cwd(), license);
|
|
487
|
+
try {
|
|
488
|
+
const content = fs.readFileSync(fullLicensePath);
|
|
489
|
+
authentication = {
|
|
490
|
+
type: "license",
|
|
491
|
+
license: content.toString("base64")
|
|
492
|
+
};
|
|
493
|
+
} catch (err) {
|
|
494
|
+
if ((err === null || err === void 0 ? void 0 : err.code) === "ENOENT") {
|
|
495
|
+
captureError(new Error(`Expected to find a license file at path: ${fullLicensePath}`));
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
captureError(new Error(`Failed to read license file at path: ${fullLicensePath}`));
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
} else if (user && password) {
|
|
502
|
+
console.log(`Detected usage of username and password authentication. Please migrate to the new license file based authentication.`);
|
|
503
|
+
authentication = {
|
|
504
|
+
type: "credentials",
|
|
505
|
+
username: user,
|
|
506
|
+
password
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
const {
|
|
510
|
+
releaseFolder
|
|
511
|
+
} = await import('./commands/release.mjs');
|
|
512
|
+
const prompter = createDefaultPrompter();
|
|
513
|
+
const fullOptions = {
|
|
514
|
+
...options,
|
|
515
|
+
authentication,
|
|
516
|
+
service: service,
|
|
517
|
+
directory: directory,
|
|
518
|
+
banner: true,
|
|
519
|
+
prompter,
|
|
520
|
+
newVersion: options.newVersion
|
|
521
|
+
};
|
|
522
|
+
await releaseFolder(fullOptions).catch(captureError);
|
|
523
|
+
});
|
|
524
|
+
yargsInstance.command({
|
|
525
|
+
command: "generateIndex [directory]",
|
|
526
|
+
builder: argv => {
|
|
527
|
+
return argv.option("ignore", {
|
|
528
|
+
type: "array",
|
|
529
|
+
default: [],
|
|
530
|
+
description: translate("options.ignore.description")
|
|
531
|
+
});
|
|
532
|
+
},
|
|
533
|
+
handler: async ({
|
|
534
|
+
directory,
|
|
535
|
+
ignore
|
|
536
|
+
}) => {
|
|
537
|
+
await preCommandCheck();
|
|
538
|
+
const {
|
|
539
|
+
extract
|
|
540
|
+
} = await import('./commands/generate.mjs');
|
|
541
|
+
const workspace = detectWorkspace(process.cwd());
|
|
542
|
+
const location = detectPackage(workspace, directory);
|
|
543
|
+
extract(location, ignore);
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
yargsInstance.command({
|
|
547
|
+
command: "postinstall",
|
|
548
|
+
builder: argv => argv,
|
|
549
|
+
handler: async () => {
|
|
550
|
+
const {
|
|
551
|
+
executePostInstall
|
|
552
|
+
} = await import('./commands/postinstall.mjs');
|
|
553
|
+
executePostInstall(detectWorkspace(process.cwd()));
|
|
554
|
+
},
|
|
555
|
+
describe: "Runs postinstall tasks"
|
|
556
|
+
});
|
|
557
|
+
yargsInstance.command({
|
|
558
|
+
command: "publishNpm [directory]",
|
|
559
|
+
builder: argv => argv.options({
|
|
560
|
+
newVersion: {
|
|
561
|
+
type: "string",
|
|
562
|
+
description: translate("options.newVersion.description"),
|
|
563
|
+
default: process.env.VERSION,
|
|
564
|
+
required: true
|
|
565
|
+
},
|
|
566
|
+
dryRun: {
|
|
567
|
+
type: "boolean"
|
|
568
|
+
}
|
|
569
|
+
}),
|
|
570
|
+
handler: async ({
|
|
571
|
+
directory,
|
|
572
|
+
newVersion,
|
|
573
|
+
dryRun
|
|
574
|
+
}) => {
|
|
575
|
+
const workspace = detectWorkspace(process.cwd());
|
|
576
|
+
const {
|
|
577
|
+
publishToNpm
|
|
578
|
+
} = await import('./commands/publishNpm.mjs');
|
|
579
|
+
await publishToNpm({
|
|
580
|
+
workspace,
|
|
581
|
+
location: detectPackage(workspace, directory),
|
|
582
|
+
version: newVersion,
|
|
583
|
+
dryRun
|
|
584
|
+
}).catch(captureError);
|
|
585
|
+
},
|
|
586
|
+
describe: "Publishes the package to npm. Requires @intelligentgraphics/ig.tools to be installed"
|
|
587
|
+
});
|
|
588
|
+
yargsInstance.demandCommand().pkgConf("packager").showHelpOnFail(false).version().argv;
|
|
589
|
+
|
|
590
|
+
var cli = /*#__PURE__*/Object.freeze({
|
|
591
|
+
__proto__: null
|
|
592
|
+
});
|
|
593
|
+
|
|
594
|
+
export { detectPackage as a, readPackageNpmManifest as b, readPackageAnimationList as c, detectWorkspace as d, readPackageCreatorIndex as e, readWorkspaceNpmManifest as f, getWorkspaceOutputPath as g, getPackageReleasesDirectory as h, isErrorENOENT as i, readNpmManifest as j, writePackageCreatorIndex as k, getWorkspaceLibPath as l, writePackageNpmManifest as m, iterateWorkspacePackages as n, cli as o, parseCreatorPackageName as p, readPackageCreatorManifest as r, translate as t, writePackageCreatorManifest as w };
|
|
595
|
+
//# sourceMappingURL=cli.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.mjs","sources":["../src/lib/localization.ts","../src/lib/error.ts","../src/lib/npmPackage.ts","../src/lib/package.ts","../src/lib/workspace.ts","../src/lib/prompter.ts","../src/cli.ts"],"sourcesContent":["import y18n from \"y18n\";\nimport * as path from \"path\";\nimport { dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nconst instance = y18n({\n\tdirectory: path.join(__dirname, \"..\", \"locales\"),\n\tupdateFiles: false,\n\tlocale: \"en\",\n\tfallbackToLanguage: true,\n});\n\nexport const setLocale = (locale: string) => {\n\tinstance.setLocale(locale);\n};\n\nexport const translate = (key: string, ...args: string[]) =>\n\tinstance.__(key, ...args);\n","interface NodeError extends Error {\n\tcode: string;\n}\n\nexport const getNodeErrorCode = (error: unknown) => {\n\tif (\n\t\terror !== null &&\n\t\ttypeof error === \"object\" &&\n\t\t(error as NodeError).code !== undefined\n\t) {\n\t\treturn (error as NodeError).code;\n\t}\n};\n\n/**\n * Permission denied: An attempt was made to access a file in a way forbidden by its file access permissions.\n *\n * @param {unknown} error\n */\nexport const isErrorEACCES = (error: unknown) =>\n\tgetNodeErrorCode(error) === \"EACCES\";\n\n/**\n * No such file or directory: Commonly raised by fs operations to indicate that a component of the specified pathname does not exist. No entity (file or directory) could be found by the given path.\n *\n * @param {unknown} error\n */\nexport const isErrorENOENT = (error: unknown) =>\n\tgetNodeErrorCode(error) === \"ENOENT\";\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport writePkg from \"write-pkg\";\n\nimport { PackageJSON } from \"./packageJSON\";\n\nexport const readNpmManifest = <T extends PackageJSON>(\n\tdirectory: string,\n): T => {\n\tconst packageJsonPath = path.join(directory, \"package.json\");\n\tconst packageJson = fs.readFileSync(packageJsonPath, {\n\t\tencoding: \"utf8\",\n\t});\n\treturn JSON.parse(packageJson);\n};\n\nexport const writeNpmManifest = <T extends PackageJSON>(\n\tdirectory: string,\n\tpackageJson: T,\n) => {\n\tconst packageJsonPath = path.join(directory, \"package.json\");\n\twritePkg.sync(packageJsonPath, packageJson);\n};\n","// Functionality related to working with a single package.\n\nimport * as path from \"path\";\nimport * as fs from \"fs\";\n\nimport { isErrorENOENT } from \"./error\";\nimport { WorkspaceLocation } from \"./workspace\";\nimport { readNpmManifest, writeNpmManifest } from \"./npmPackage\";\nimport { PackageJSON } from \"./packageJSON\";\n\nconst PACKAGE_FILE = \"_Package.json\";\nconst INDEX_FILE = \"_Index.json\";\nconst ANIMATION_FILE = \".animation.json\";\n\n/**\n * Describes the location of a single package.\n *\n * @export\n * @interface PackageLocation\n */\nexport interface PackageLocation {\n\t_kind: \"PackageLocation\";\n\t/**\n\t * Main directory of a package\n\t *\n\t * @type {string}\n\t */\n\tpath: string;\n\t/**\n\t * Directory containing the typescript files\n\t *\n\t * @type {string}\n\t */\n\tscriptsDir: string;\n\t/**\n\t * Diretory containing the _Package.json, _Index.json, package.json and animation.json files\n\t *\n\t * @type {string}\n\t */\n\tmanifestDir: string;\n}\n\nexport interface CreatorPackage {\n\tScope: string;\n\tPackage: string;\n\tRunTime: boolean;\n\tType: \"Interactor\" | \"Mixed\" | \"Core\" | \"Context\" | \"Evaluator\";\n}\n\nexport const parseCreatorPackageName = (manifest: CreatorPackage) => {\n\tconst [domain, ...subdomainParts] = manifest.Package.split(\".\");\n\treturn {\n\t\tdomain,\n\t\tsubdomain: subdomainParts.join(\".\"),\n\t};\n};\n\nexport interface PackageNpmManifest extends PackageJSON {\n\tig?: {\n\t\tscriptingLibrary?: boolean;\n\t};\n}\n\n/**\n * Detects the package at the given directory.\n *\n * @param {string} directory\n * @returns {PackageLocation}\n */\nexport const detectPackage = (\n\tworkspace: WorkspaceLocation,\n\tdirectory: string,\n): PackageLocation => {\n\tdirectory = path.resolve(workspace.path, directory);\n\n\tconst scriptsPath = path.join(directory, \"Scripts\");\n\tconst tsPath = path.join(directory, \"ts\");\n\n\tlet location: PackageLocation;\n\n\tif (fs.existsSync(scriptsPath)) {\n\t\tlocation = {\n\t\t\t_kind: \"PackageLocation\",\n\t\t\tpath: directory,\n\t\t\tscriptsDir: scriptsPath,\n\t\t\tmanifestDir: scriptsPath,\n\t\t};\n\t} else if (fs.existsSync(tsPath)) {\n\t\tlocation = {\n\t\t\t_kind: \"PackageLocation\",\n\t\t\tpath: directory,\n\t\t\tscriptsDir: tsPath,\n\t\t\tmanifestDir: directory,\n\t\t};\n\t} else {\n\t\tlocation = {\n\t\t\t_kind: \"PackageLocation\",\n\t\t\tpath: directory,\n\t\t\tscriptsDir: directory,\n\t\t\tmanifestDir: directory,\n\t\t};\n\t}\n\n\tif (readPackageCreatorManifest(location) === undefined) {\n\t\tthrow new Error(`No _Package.json found in ${location.manifestDir}`);\n\t}\n\n\treturn location;\n};\n\nexport const readPackageCreatorManifest = (\n\tlocation: PackageLocation,\n): CreatorPackage => {\n\tconst packageJsonPath = path.join(location.manifestDir, PACKAGE_FILE);\n\tconst packageJson = fs.readFileSync(packageJsonPath, { encoding: \"utf8\" });\n\tconst result: Omit<CreatorPackage, \"Scope\"> & { Scope?: string } =\n\t\tJSON.parse(packageJson);\n\treturn {\n\t\t...result,\n\t\tScope: result.Scope || result.Package,\n\t};\n};\n\nexport const writePackageCreatorManifest = (\n\tlocation: PackageLocation,\n\tcreatorPackage: CreatorPackage,\n) => {\n\tconst packageJsonPath = path.join(location.manifestDir, PACKAGE_FILE);\n\tfs.writeFileSync(\n\t\tpackageJsonPath,\n\t\tJSON.stringify(creatorPackage, null, \"\\t\") + \"\\n\",\n\t);\n};\n\nexport const readPackageCreatorIndex = (\n\tlocation: PackageLocation,\n): object | undefined => {\n\ttry {\n\t\tconst indexPath = path.join(location.manifestDir, INDEX_FILE);\n\t\tconst index = fs.readFileSync(indexPath, { encoding: \"utf8\" });\n\t\treturn JSON.parse(index);\n\t} catch (err) {\n\t\tif (isErrorENOENT(err)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthrow err;\n\t}\n};\n\nexport const writePackageCreatorIndex = (\n\tlocation: PackageLocation,\n\tindex: object,\n) => {\n\tconst packageJsonPath = path.join(location.manifestDir, INDEX_FILE);\n\tfs.writeFileSync(packageJsonPath, JSON.stringify(index, null, \"\\t\") + \"\\n\");\n};\n\nexport const readPackageNpmManifest = (\n\tlocation: PackageLocation,\n): PackageNpmManifest | undefined => {\n\ttry {\n\t\treturn readNpmManifest(location.manifestDir);\n\t} catch (err) {\n\t\tif (isErrorENOENT(err)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthrow err;\n\t}\n};\n\nexport const writePackageNpmManifest = (\n\tlocation: PackageLocation,\n\tpackageJson: PackageNpmManifest,\n) => {\n\twriteNpmManifest(location.manifestDir, packageJson);\n};\n\nexport const readPackageAnimationList = (location: PackageLocation) => {\n\tconst directoryContent = fs.readdirSync(location.manifestDir);\n\tconst animationPathList: string[] = [];\n\n\tfor (const entry of directoryContent) {\n\t\tif (entry.endsWith(ANIMATION_FILE)) {\n\t\t\tconst animationPath = path.join(location.manifestDir, entry);\n\t\t\tanimationPathList.push(animationPath);\n\t\t}\n\t}\n\n\treturn animationPathList;\n};\n\nexport const getPackageReleasesDirectory = (location: PackageLocation) =>\n\tpath.join(location.path, \"Releases\");\n\nexport const arePackageLocationsEqual = (\n\ta: PackageLocation,\n\tb: PackageLocation,\n) => a.path === b.path;\n","// Functionality related to working with a workspace consisting of multiple packages.\n\nimport * as path from \"path\";\nimport * as fs from \"fs\";\n\nimport { PackageJSON } from \"./packageJSON\";\nimport { isErrorENOENT } from \"./error\";\nimport { readNpmManifest, writeNpmManifest } from \"./npmPackage\";\nimport { detectPackage } from \"./package\";\n\n/**\n * Describe the location of a workspace constining of n packages.\n *\n * @export\n * @interface WorkspaceLocation\n */\nexport interface WorkspaceLocation {\n\t_kind: \"WorkspaceLocation\";\n\tpath: string;\n}\n\nexport interface WorkspacePackageJSON extends PackageJSON {\n\tpackager?: { banner?: string };\n}\n\nexport const detectWorkspace = (directory: string): WorkspaceLocation => {\n\tdirectory = path.resolve(process.cwd(), directory);\n\treturn {\n\t\t_kind: \"WorkspaceLocation\",\n\t\tpath: directory,\n\t};\n};\n\nexport const readWorkspaceNpmManifest = (\n\tworkspace: WorkspaceLocation,\n): WorkspacePackageJSON | undefined => {\n\ttry {\n\t\treturn readNpmManifest<WorkspacePackageJSON>(workspace.path);\n\t} catch (err) {\n\t\tif (isErrorENOENT(err)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthrow err;\n\t}\n};\n\nexport const writeWorkspaceNpmManifest = <T extends WorkspacePackageJSON>(\n\tworkspace: WorkspaceLocation,\n\tpackageJson: T,\n) => writeNpmManifest(workspace.path, packageJson);\n\nexport const getWorkspaceOutputPath = (workspace: WorkspaceLocation) =>\n\tpath.join(workspace.path, \"bin\");\n\nexport const getWorkspaceLibPath = (workspace: WorkspaceLocation) =>\n\tpath.join(workspace.path, \"lib\");\n\nexport function* iterateWorkspacePackages(workspace: WorkspaceLocation) {\n\tconst entries = fs.readdirSync(workspace.path, { withFileTypes: true });\n\n\tfor (const entry of entries) {\n\t\tif (!entry.isDirectory()) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tyield detectPackage(workspace, entry.name);\n\t\t} catch {}\n\t}\n}\n","import inquirer from \"inquirer\";\n\nexport interface PrompterQuestion {\n\tmessage: string;\n\toptions: string[];\n\tdefault?: string;\n}\n\nexport interface Prompter {\n\tconfirm(message: string): Promise<boolean>;\n\n\task(question: PrompterQuestion): Promise<string>;\n}\n\nexport const createDefaultPrompter = (): Prompter => {\n\treturn {\n\t\tconfirm: async (message) => {\n\t\t\tconst { confirm } = await inquirer.prompt([\n\t\t\t\t{\n\t\t\t\t\ttype: \"confirm\",\n\t\t\t\t\tmessage,\n\t\t\t\t\tname: \"confirm\",\n\t\t\t\t},\n\t\t\t]);\n\t\t\treturn confirm as boolean;\n\t\t},\n\n\t\task: async (question) => {\n\t\t\tconst { answer } = await inquirer.prompt([\n\t\t\t\t{\n\t\t\t\t\ttype: \"list\",\n\t\t\t\t\tmessage: question.message,\n\t\t\t\t\tname: \"answer\",\n\t\t\t\t\tchoices: question.options,\n\t\t\t\t\tdefault: question.default,\n\t\t\t\t},\n\t\t\t]);\n\t\t\treturn answer as string;\n\t\t},\n\t};\n};\n","import updateNotifier from \"update-notifier\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport yargs from \"yargs/yargs\";\nimport * as yargsTypes from \"yargs\";\nimport { fileURLToPath } from \"url\";\n\nimport { translate } from \"./lib/localization\";\nimport { Authentication } from \"./lib/authentication\";\nimport { detectPackage } from \"./lib/package\";\nimport {\n\tdetectWorkspace,\n\treadWorkspaceNpmManifest,\n\twriteWorkspaceNpmManifest,\n} from \"./lib/workspace\";\nimport type { ReleaseFolderOptions } from \"./commands/release\";\nimport { createDefaultPrompter } from \"./lib/prompter\";\n\nimport pjson from \"../package.json\";\n\nconst __filename = fileURLToPath(import.meta.url);\n\nconst captureError = (err: Error) => {\n\tconsole.log(\"\");\n\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconsole.error(err);\n\t} else {\n\t\tconsole.error(translate(\"messages.error\", err.message));\n\t}\n};\n\nconst buildOptions = {\n\toutDir: {\n\t\tdescription: translate(\"options.outDir.description\"),\n\t\ttype: \"string\",\n\t\tdefault: \"bin\",\n\t\tcoerce: (input: string | undefined | null) =>\n\t\t\tinput === undefined || input === null\n\t\t\t\t? undefined\n\t\t\t\t: path.resolve(process.cwd(), input),\n\t},\n\tminimize: {\n\t\tdescription: translate(\"options.minimize.description\"),\n\t\ttype: \"boolean\",\n\t\tdefault: true,\n\t},\n\tcwd: {\n\t\tdescription: translate(\"options.cwd.description\"),\n\t\ttype: \"string\",\n\t\tdefault: process.cwd(),\n\t},\n\tclean: {\n\t\tdescription: translate(\"options.clean.description\"),\n\t\ttype: \"boolean\",\n\t\tdefault: false,\n\t},\n\tdocs: {\n\t\ttype: \"boolean\",\n\t\tdefault: false,\n\t},\n} as const;\n\nconst preCommandCheck = async () => {\n\tconst executedLocalPackager =\n\t\tpath.relative(process.cwd(), __filename).indexOf(\"..\") === -1;\n\n\tlet repositoryPackage:\n\t\t| {\n\t\t\t\tdependencies?: Record<string, string>;\n\t\t\t\tdevDependencies?: Record<string, string>;\n\t\t }\n\t\t| undefined;\n\n\ttry {\n\t\tconst repositoryPackageJson = fs.readFileSync(\n\t\t\tpath.resolve(process.cwd(), \"package.json\"),\n\t\t\t\"utf8\",\n\t\t);\n\n\t\trepositoryPackage = JSON.parse(repositoryPackageJson);\n\t} catch (err) {}\n\n\tif (\n\t\trepositoryPackage?.dependencies?.[\n\t\t\t\"@intelligentgraphics/ig.gfx.packager\"\n\t\t] ||\n\t\trepositoryPackage?.devDependencies?.[\n\t\t\t\"@intelligentgraphics/ig.gfx.packager\"\n\t\t]\n\t) {\n\t\tconst parts = [\"Detected locally installed ig.gfx.packager.\"];\n\n\t\tif (executedLocalPackager) {\n\t\t\tparts.push(\n\t\t\t\t'Run \"npm install -g @intelligentgraphics/ig.gfx.packager@latest\" to install the global version, if it is not yet installed.',\n\t\t\t);\n\t\t}\n\t\tparts.push(\n\t\t\t'Run \"npm uninstall @intelligentgraphics/ig.gfx.packager\" to remove the local version.',\n\t\t);\n\n\t\tconsole.error(parts.join(\"\\n\"));\n\t\tprocess.exit(1);\n\t}\n\n\tif (executedLocalPackager) {\n\t\tconsole.error(`Detected locally installed ig.gfx.packager.\nRun \"npm install -g @intelligentgraphics/ig.gfx.packager@latest\" to install the global version, if it is not yet installed.\nRun \"npm install\" to get rid of the local packager version.`);\n\t\tprocess.exit(1);\n\t}\n\n\tconst notifier = updateNotifier({\n\t\tpkg: pjson,\n\t\tshouldNotifyInNpmScript: true,\n\t\tupdateCheckInterval: 1000 * 60,\n\t});\n\n\tnotifier.notify({\n\t\tisGlobal: true,\n\t\tdefer: true,\n\t});\n\n\tconst workspaceLocation = detectWorkspace(process.cwd());\n\n\tconst packageJson = readWorkspaceNpmManifest(workspaceLocation);\n\n\tif (packageJson === undefined) {\n\t\tthrow new Error(\n\t\t\t\"Could not load package.json file in current directory\",\n\t\t);\n\t}\n\n\tpackageJson.scripts ??= {};\n\tpackageJson.scripts.postinstall = \"packager postinstall\";\n\n\twriteWorkspaceNpmManifest(workspaceLocation, packageJson);\n};\n\nconst yargsInstance = yargs(process.argv.slice(2));\n\nyargsInstance.command(\n\t\"build [directories...]\",\n\t\"Builds the specified directories\",\n\t(argv) => argv.options(buildOptions),\n\tasync ({ directories = [], ...options }) => {\n\t\tawait preCommandCheck();\n\n\t\tconst { buildFolders } = await import(\"./commands/build\");\n\n\t\tawait buildFolders({\n\t\t\t...options,\n\t\t\tdirectories: directories as string[],\n\t\t}).catch(captureError);\n\t},\n);\n\nyargsInstance.command(\n\t\"publish [directory]\",\n\t\"Publishes the specified directory\",\n\t(argv) =>\n\t\targv.options({\n\t\t\t...buildOptions,\n\t\t\tnoUpload: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: translate(\"options.noUpload.description\"),\n\t\t\t},\n\t\t\tdomain: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: translate(\"options.domain.description\"),\n\t\t\t},\n\t\t\tsubdomain: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: translate(\"options.subdomain.description\"),\n\t\t\t},\n\t\t\tnewVersion: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: translate(\"options.newVersion.description\"),\n\t\t\t\tdefault: process.env.VERSION,\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\taddress: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: translate(\"options.address.description\"),\n\t\t\t\tdefault: \"localhost\",\n\t\t\t},\n\t\t\tservice: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: translate(\"options.service.description\"),\n\t\t\t\tdefault: process.env.IG_GFX_ASSET_SERVICE,\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\tuser: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: translate(\"options.user.description\"),\n\t\t\t\tdefault: process.env.IG_GFX_USER,\n\t\t\t},\n\t\t\tpassword: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: translate(\"options.password.description\"),\n\t\t\t\tdefault: process.env.IG_GFX_PWD,\n\t\t\t},\n\t\t\tdocs: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: translate(\"options.docs.description\"),\n\t\t\t},\n\t\t\tpushOnly: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: translate(\"options.pushOnly.description\"),\n\t\t\t},\n\t\t\tlicense: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: translate(\"options.license.description\"),\n\t\t\t\tdefault: process.env.IG_GFX_LICENSE,\n\t\t\t},\n\t\t}),\n\tasync ({ directory, user, password, service, license, ...options }) => {\n\t\tawait preCommandCheck();\n\n\t\tif (!options.noUpload) {\n\t\t\tif (!service) {\n\t\t\t\tcaptureError(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\ttranslate(\n\t\t\t\t\t\t\t\"options.service.demands\",\n\t\t\t\t\t\t\t\"IG_GFX_ASSET_SERVICE\",\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!license && (!user || !password)) {\n\t\t\t\tcaptureError(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t`Expected authentication to be provided through either of the following methods:\n\t - as a path to a license file using the --license option or the IG_GFX_LICENSE environment variable\n\t - as a username and password using the --user and --password options, or the IG_GFX_USER and IG_GFX_PWD environment variables`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (license && !license.endsWith(\".iglic\")) {\n\t\t\t\tcaptureError(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t`Expected the license path to end with the extension .iglic. Received the path \"${license}\". You may need to reload your environment variables by restarting the program you're using to execute the packager.`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet authentication: Authentication | undefined;\n\n\t\tif (license) {\n\t\t\tconst fullLicensePath = path.resolve(process.cwd(), license);\n\t\t\ttry {\n\t\t\t\tconst content = fs.readFileSync(fullLicensePath);\n\t\t\t\tauthentication = {\n\t\t\t\t\ttype: \"license\",\n\t\t\t\t\tlicense: content.toString(\"base64\"),\n\t\t\t\t};\n\t\t\t} catch (err) {\n\t\t\t\tif (err?.code === \"ENOENT\") {\n\t\t\t\t\tcaptureError(\n\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t`Expected to find a license file at path: ${fullLicensePath}`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcaptureError(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t`Failed to read license file at path: ${fullLicensePath}`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (user && password) {\n\t\t\tconsole.log(\n\t\t\t\t`Detected usage of username and password authentication. Please migrate to the new license file based authentication.`,\n\t\t\t);\n\t\t\tauthentication = {\n\t\t\t\ttype: \"credentials\",\n\t\t\t\tusername: user,\n\t\t\t\tpassword,\n\t\t\t};\n\t\t}\n\n\t\tconst { releaseFolder } = await import(\"./commands/release\");\n\n\t\tconst prompter = createDefaultPrompter();\n\n\t\tconst fullOptions: ReleaseFolderOptions = {\n\t\t\t...options,\n\t\t\tauthentication,\n\t\t\tservice: service!,\n\t\t\tdirectory: directory as string,\n\t\t\tbanner: true,\n\t\t\tprompter,\n\t\t\tnewVersion: options.newVersion!,\n\t\t};\n\n\t\tawait releaseFolder(fullOptions).catch(captureError);\n\t},\n);\n\nyargsInstance.command({\n\tcommand: \"generateIndex [directory]\",\n\tbuilder: (argv) => {\n\t\treturn argv.option(\"ignore\", {\n\t\t\ttype: \"array\",\n\t\t\tdefault: [],\n\t\t\tdescription: translate(\"options.ignore.description\"),\n\t\t});\n\t},\n\thandler: async ({ directory, ignore }) => {\n\t\tawait preCommandCheck();\n\n\t\tconst { extract } = await import(\"./commands/generate\");\n\n\t\tconst workspace = detectWorkspace(process.cwd());\n\t\tconst location = detectPackage(workspace, directory as string);\n\n\t\textract(location, ignore as string[]);\n\t},\n});\n\nyargsInstance.command({\n\tcommand: \"postinstall\",\n\tbuilder: (argv) => argv,\n\thandler: async () => {\n\t\tconst { executePostInstall } = await import(\"./commands/postinstall\");\n\n\t\texecutePostInstall(detectWorkspace(process.cwd()));\n\t},\n\tdescribe: \"Runs postinstall tasks\",\n});\n\nyargsInstance.command({\n\tcommand: \"publishNpm [directory]\",\n\tbuilder: (argv) =>\n\t\targv.options({\n\t\t\tnewVersion: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: translate(\"options.newVersion.description\"),\n\t\t\t\tdefault: process.env.VERSION,\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\tdryRun: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t}),\n\thandler: async ({ directory, newVersion, dryRun }) => {\n\t\tconst workspace = detectWorkspace(process.cwd());\n\n\t\tconst { publishToNpm } = await import(\"./commands/publishNpm\");\n\n\t\tawait publishToNpm({\n\t\t\tworkspace,\n\t\t\tlocation: detectPackage(workspace, directory as string),\n\t\t\tversion: newVersion,\n\t\t\tdryRun,\n\t\t}).catch(captureError);\n\t},\n\tdescribe:\n\t\t\"Publishes the package to npm. Requires @intelligentgraphics/ig.tools to be installed\",\n});\n\nyargsInstance\n\t.demandCommand()\n\t.pkgConf(\"packager\")\n\t.showHelpOnFail(false)\n\t.version().argv;\n"],"names":["__dirname","dirname","fileURLToPath","import","meta","url","instance","y18n","directory","path","join","updateFiles","locale","fallbackToLanguage","translate","key","args","__","getNodeErrorCode","error","code","undefined","isErrorENOENT","readNpmManifest","packageJsonPath","packageJson","fs","readFileSync","encoding","JSON","parse","writeNpmManifest","writePkg","sync","PACKAGE_FILE","INDEX_FILE","ANIMATION_FILE","parseCreatorPackageName","manifest","domain","subdomainParts","Package","split","subdomain","detectPackage","workspace","resolve","scriptsPath","tsPath","location","existsSync","_kind","scriptsDir","manifestDir","readPackageCreatorManifest","Error","result","Scope","writePackageCreatorManifest","creatorPackage","writeFileSync","stringify","readPackageCreatorIndex","indexPath","index","err","writePackageCreatorIndex","readPackageNpmManifest","writePackageNpmManifest","readPackageAnimationList","directoryContent","readdirSync","animationPathList","entry","endsWith","animationPath","push","getPackageReleasesDirectory","detectWorkspace","process","cwd","readWorkspaceNpmManifest","writeWorkspaceNpmManifest","getWorkspaceOutputPath","getWorkspaceLibPath","iterateWorkspacePackages","entries","withFileTypes","isDirectory","name","createDefaultPrompter","confirm","message","inquirer","prompt","type","ask","question","answer","choices","options","default","__filename","captureError","console","log","env","NODE_ENV","buildOptions","outDir","description","coerce","input","minimize","clean","docs","preCommandCheck","executedLocalPackager","relative","indexOf","repositoryPackage","repositoryPackageJson","dependencies","devDependencies","parts","exit","notifier","updateNotifier","pkg","pjson","shouldNotifyInNpmScript","updateCheckInterval","notify","isGlobal","defer","workspaceLocation","scripts","postinstall","yargsInstance","yargs","argv","slice","command","directories","buildFolders","catch","noUpload","newVersion","VERSION","required","address","service","IG_GFX_ASSET_SERVICE","user","IG_GFX_USER","password","IG_GFX_PWD","pushOnly","license","IG_GFX_LICENSE","authentication","fullLicensePath","content","toString","username","releaseFolder","prompter","fullOptions","banner","builder","option","handler","ignore","extract","executePostInstall","describe","dryRun","publishToNpm","version","demandCommand","pkgConf","showHelpOnFail"],"mappings":"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"}
|