@prismicio/cli 0.0.1
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/bin/prismic.js +47 -0
- package/dist/_node_modules/meow/build/dependencies.js +9040 -0
- package/dist/_node_modules/meow/build/dependencies.js.map +1 -0
- package/dist/_node_modules/meow/build/index.js +80 -0
- package/dist/_node_modules/meow/build/index.js.map +1 -0
- package/dist/_node_modules/meow/build/options.js +86 -0
- package/dist/_node_modules/meow/build/options.js.map +1 -0
- package/dist/_node_modules/meow/build/parser.js +61 -0
- package/dist/_node_modules/meow/build/parser.js.map +1 -0
- package/dist/_node_modules/meow/build/utils.js +8 -0
- package/dist/_node_modules/meow/build/utils.js.map +1 -0
- package/dist/_node_modules/meow/build/validate.js +102 -0
- package/dist/_node_modules/meow/build/validate.js.map +1 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.js +147 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.js +34 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/sync.d.ts +6 -0
- package/dist/commands/sync.js +32 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/core/auth.d.ts +2 -0
- package/dist/core/auth.js +72 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/customType.d.ts +6 -0
- package/dist/core/customType.js +43 -0
- package/dist/core/customType.js.map +1 -0
- package/dist/core/framework.d.ts +41 -0
- package/dist/core/framework.js +128 -0
- package/dist/core/framework.js.map +1 -0
- package/dist/core/project.d.ts +19 -0
- package/dist/core/project.js +92 -0
- package/dist/core/project.js.map +1 -0
- package/dist/core/repository.d.ts +6 -0
- package/dist/core/repository.js +33 -0
- package/dist/core/repository.js.map +1 -0
- package/dist/core/slices.d.ts +6 -0
- package/dist/core/slices.js +47 -0
- package/dist/core/slices.js.map +1 -0
- package/dist/core/version.d.ts +15 -0
- package/dist/core/version.js +27 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/packages/cli/package.json.js +63 -0
- package/dist/packages/cli/package.json.js.map +1 -0
- package/dist/utils/error.d.ts +8 -0
- package/dist/utils/error.js +18 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/listr.d.ts +5 -0
- package/dist/utils/listr.js +12 -0
- package/dist/utils/listr.js.map +1 -0
- package/dist/utils/output.d.ts +3 -0
- package/dist/utils/output.js +34 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/package.d.ts +10 -0
- package/dist/utils/package.js +20 -0
- package/dist/utils/package.js.map +1 -0
- package/dist/utils/sentry.d.ts +10 -0
- package/dist/utils/sentry.js +62 -0
- package/dist/utils/sentry.js.map +1 -0
- package/dist/utils/telemetry.d.ts +14 -0
- package/dist/utils/telemetry.js +42 -0
- package/dist/utils/telemetry.js.map +1 -0
- package/package.json +84 -0
- package/src/cli.ts +186 -0
- package/src/commands/init.ts +68 -0
- package/src/commands/sync.ts +58 -0
- package/src/core/auth.ts +98 -0
- package/src/core/customType.ts +64 -0
- package/src/core/framework.ts +180 -0
- package/src/core/project.ts +148 -0
- package/src/core/repository.ts +51 -0
- package/src/core/slices.ts +67 -0
- package/src/core/version.ts +50 -0
- package/src/index.ts +1 -0
- package/src/utils/error.ts +40 -0
- package/src/utils/listr.ts +13 -0
- package/src/utils/output.ts +45 -0
- package/src/utils/package.ts +29 -0
- package/src/utils/sentry.ts +104 -0
- package/src/utils/telemetry.ts +70 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import { y as yargsParser, t as trimNewlines, r as redent, c as camelcaseKeys } from "./dependencies.js";
|
|
3
|
+
import { buildOptions } from "./options.js";
|
|
4
|
+
import { buildParserOptions } from "./parser.js";
|
|
5
|
+
import { checkUnknownFlags, validate, checkMissingRequiredFlags } from "./validate.js";
|
|
6
|
+
const buildResult = ({ pkg: packageJson, ...options }, parserOptions) => {
|
|
7
|
+
const argv = yargsParser(options.argv, parserOptions);
|
|
8
|
+
let help = "";
|
|
9
|
+
if (options.help) {
|
|
10
|
+
help = trimNewlines((options.help || "").replace(/\t+\n*$/, ""));
|
|
11
|
+
if (help.includes("\n")) {
|
|
12
|
+
help = redent(help, options.helpIndent);
|
|
13
|
+
}
|
|
14
|
+
help = `
|
|
15
|
+
${help}`;
|
|
16
|
+
}
|
|
17
|
+
if (options.description !== false) {
|
|
18
|
+
let { description } = options;
|
|
19
|
+
if (description) {
|
|
20
|
+
description = help ? redent(`
|
|
21
|
+
${description}
|
|
22
|
+
`, options.helpIndent) : `
|
|
23
|
+
${description}`;
|
|
24
|
+
help = `${description}${help}`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
help += "\n";
|
|
28
|
+
const showHelp = (code) => {
|
|
29
|
+
console.log(help);
|
|
30
|
+
process.exit(typeof code === "number" ? code : 2);
|
|
31
|
+
};
|
|
32
|
+
const showVersion = () => {
|
|
33
|
+
console.log(options.version);
|
|
34
|
+
process.exit(0);
|
|
35
|
+
};
|
|
36
|
+
if (argv._.length === 0 && options.argv.length === 1) {
|
|
37
|
+
if (argv.version === true && options.autoVersion) {
|
|
38
|
+
showVersion();
|
|
39
|
+
} else if (argv.help === true && options.autoHelp) {
|
|
40
|
+
showHelp(0);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const input = argv._;
|
|
44
|
+
delete argv._;
|
|
45
|
+
if (!options.allowUnknownFlags) {
|
|
46
|
+
checkUnknownFlags(input);
|
|
47
|
+
}
|
|
48
|
+
const flags = camelcaseKeys(argv, { exclude: ["--", /^\w$/] });
|
|
49
|
+
const unnormalizedFlags = { ...flags };
|
|
50
|
+
validate(flags, options);
|
|
51
|
+
for (const flagValue of Object.values(options.flags)) {
|
|
52
|
+
if (Array.isArray(flagValue.aliases)) {
|
|
53
|
+
for (const alias of flagValue.aliases) {
|
|
54
|
+
delete flags[alias];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
delete flags[flagValue.shortFlag];
|
|
58
|
+
}
|
|
59
|
+
checkMissingRequiredFlags(options.flags, flags, input);
|
|
60
|
+
return {
|
|
61
|
+
input,
|
|
62
|
+
flags,
|
|
63
|
+
unnormalizedFlags,
|
|
64
|
+
pkg: packageJson,
|
|
65
|
+
help,
|
|
66
|
+
showHelp,
|
|
67
|
+
showVersion
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
const meow = (helpText, options = {}) => {
|
|
71
|
+
const parsedOptions = buildOptions(helpText, options);
|
|
72
|
+
const parserOptions = buildParserOptions(parsedOptions);
|
|
73
|
+
const result = buildResult(parsedOptions, parserOptions);
|
|
74
|
+
process.title = result.pkg.bin ? Object.keys(result.pkg.bin).at(0) : result.pkg.name;
|
|
75
|
+
return result;
|
|
76
|
+
};
|
|
77
|
+
export {
|
|
78
|
+
meow as default
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../node_modules/meow/build/index.js"],"sourcesContent":["import process from 'node:process';\nimport { y as yargsParser, t as trimNewlines, r as redent, c as camelcaseKeys } from './dependencies.js';\nimport { buildOptions } from './options.js';\nimport { buildParserOptions } from './parser.js';\nimport { checkUnknownFlags, validate, checkMissingRequiredFlags } from './validate.js';\n\nconst buildResult = ({pkg: packageJson, ...options}, parserOptions) => {\n\tconst argv = yargsParser(options.argv, parserOptions);\n\tlet help = '';\n\n\tif (options.help) {\n\t\thelp = trimNewlines((options.help || '').replace(/\\t+\\n*$/, ''));\n\n\t\tif (help.includes('\\n')) {\n\t\t\thelp = redent(help, options.helpIndent);\n\t\t}\n\n\t\thelp = `\\n${help}`;\n\t}\n\n\tif (options.description !== false) {\n\t\tlet {description} = options;\n\n\t\tif (description) {\n\t\t\tdescription = help ? redent(`\\n${description}\\n`, options.helpIndent) : `\\n${description}`;\n\t\t\thelp = `${description}${help}`;\n\t\t}\n\t}\n\n\thelp += '\\n';\n\n\tconst showHelp = code => {\n\t\tconsole.log(help);\n\t\tprocess.exit(typeof code === 'number' ? code : 2); // Default to code 2 for incorrect usage (#47)\n\t};\n\n\tconst showVersion = () => {\n\t\tconsole.log(options.version);\n\t\tprocess.exit(0);\n\t};\n\n\tif (argv._.length === 0 && options.argv.length === 1) {\n\t\tif (argv.version === true && options.autoVersion) {\n\t\t\tshowVersion();\n\t\t} else if (argv.help === true && options.autoHelp) {\n\t\t\tshowHelp(0);\n\t\t}\n\t}\n\n\tconst input = argv._;\n\tdelete argv._;\n\n\tif (!options.allowUnknownFlags) {\n\t\tcheckUnknownFlags(input);\n\t}\n\n\tconst flags = camelcaseKeys(argv, {exclude: ['--', /^\\w$/]});\n\tconst unnormalizedFlags = {...flags};\n\n\tvalidate(flags, options);\n\n\tfor (const flagValue of Object.values(options.flags)) {\n\t\tif (Array.isArray(flagValue.aliases)) {\n\t\t\tfor (const alias of flagValue.aliases) {\n\t\t\t\tdelete flags[alias];\n\t\t\t}\n\t\t}\n\n\t\tdelete flags[flagValue.shortFlag];\n\t}\n\n\tcheckMissingRequiredFlags(options.flags, flags, input);\n\n\treturn {\n\t\tinput,\n\t\tflags,\n\t\tunnormalizedFlags,\n\t\tpkg: packageJson,\n\t\thelp,\n\t\tshowHelp,\n\t\tshowVersion,\n\t};\n};\n\nconst meow = (helpText, options = {}) => {\n\tconst parsedOptions = buildOptions(helpText, options);\n\tconst parserOptions = buildParserOptions(parsedOptions);\n\tconst result = buildResult(parsedOptions, parserOptions);\n\n\tprocess.title = result.pkg.bin ? Object.keys(result.pkg.bin).at(0) : result.pkg.name;\n\n\treturn result;\n};\n\nexport { meow as default };\n"],"names":[],"mappings":";;;;;AAMA,MAAM,cAAc,CAAC,EAAC,KAAK,aAAa,GAAG,QAAO,GAAG,kBAAkB;AACtE,QAAM,OAAO,YAAY,QAAQ,MAAM,aAAa;AACpD,MAAI,OAAO;AAEX,MAAI,QAAQ,MAAM;AACjB,WAAO,cAAc,QAAQ,QAAQ,IAAI,QAAQ,WAAW,EAAE,CAAC;AAE/D,QAAI,KAAK,SAAS,IAAI,GAAG;AACxB,aAAO,OAAO,MAAM,QAAQ,UAAU;AAAA,IACvC;AAEA,WAAO;AAAA,EAAK,IAAI;AAAA,EACjB;AAEA,MAAI,QAAQ,gBAAgB,OAAO;AAClC,QAAI,EAAC,YAAW,IAAI;AAEpB,QAAI,aAAa;AAChB,oBAAc,OAAO,OAAO;AAAA,EAAK,WAAW;AAAA,GAAM,QAAQ,UAAU,IAAI;AAAA,EAAK,WAAW;AACxF,aAAO,GAAG,WAAW,GAAG,IAAI;AAAA,IAC7B;AAAA,EACD;AAEA,UAAQ;AAER,QAAM,WAAW,UAAQ;AACxB,YAAQ,IAAI,IAAI;AAChB,YAAQ,KAAK,OAAO,SAAS,WAAW,OAAO,CAAC;AAAA,EACjD;AAEA,QAAM,cAAc,MAAM;AACzB,YAAQ,IAAI,QAAQ,OAAO;AAC3B,YAAQ,KAAK,CAAC;AAAA,EACf;AAEA,MAAI,KAAK,EAAE,WAAW,KAAK,QAAQ,KAAK,WAAW,GAAG;AACrD,QAAI,KAAK,YAAY,QAAQ,QAAQ,aAAa;AACjD,kBAAW;AAAA,IACZ,WAAW,KAAK,SAAS,QAAQ,QAAQ,UAAU;AAClD,eAAS,CAAC;AAAA,IACX;AAAA,EACD;AAEA,QAAM,QAAQ,KAAK;AACnB,SAAO,KAAK;AAEZ,MAAI,CAAC,QAAQ,mBAAmB;AAC/B,sBAAkB,KAAK;AAAA,EACxB;AAEA,QAAM,QAAQ,cAAc,MAAM,EAAC,SAAS,CAAC,MAAM,MAAM,EAAC,CAAC;AAC3D,QAAM,oBAAoB,EAAC,GAAG,MAAK;AAEnC,WAAS,OAAO,OAAO;AAEvB,aAAW,aAAa,OAAO,OAAO,QAAQ,KAAK,GAAG;AACrD,QAAI,MAAM,QAAQ,UAAU,OAAO,GAAG;AACrC,iBAAW,SAAS,UAAU,SAAS;AACtC,eAAO,MAAM,KAAK;AAAA,MACnB;AAAA,IACD;AAEA,WAAO,MAAM,UAAU,SAAS;AAAA,EACjC;AAEA,4BAA0B,QAAQ,OAAO,OAAO,KAAK;AAErD,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA;AAEK,MAAC,OAAO,CAAC,UAAU,UAAU,OAAO;AACxC,QAAM,gBAAgB,aAAa,UAAU,OAAO;AACpD,QAAM,gBAAgB,mBAAmB,aAAa;AACtD,QAAM,SAAS,YAAY,eAAe,aAAa;AAEvD,UAAQ,QAAQ,OAAO,IAAI,MAAM,OAAO,KAAK,OAAO,IAAI,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,IAAI;AAEhF,SAAO;AACR;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { a as readPackageUpSync, n as normalizePackageData } from "./dependencies.js";
|
|
5
|
+
import { joinFlagKeys, decamelizeFlagKey } from "./utils.js";
|
|
6
|
+
const validateOptions = (options) => {
|
|
7
|
+
const invalidOptionFilters = {
|
|
8
|
+
flags: {
|
|
9
|
+
keyContainsDashes: {
|
|
10
|
+
filter: ([flagKey]) => flagKey.includes("-") && flagKey !== "--",
|
|
11
|
+
message: (flagKeys) => `Flag keys may not contain '-'. Invalid flags: ${joinFlagKeys(flagKeys, "")}`
|
|
12
|
+
},
|
|
13
|
+
aliasIsSet: {
|
|
14
|
+
filter: ([, flag]) => Object.hasOwn(flag, "alias"),
|
|
15
|
+
message: (flagKeys) => `The option \`alias\` has been renamed to \`shortFlag\`. The following flags need to be updated: ${joinFlagKeys(flagKeys)}`
|
|
16
|
+
},
|
|
17
|
+
choicesNotAnArray: {
|
|
18
|
+
filter: ([, flag]) => Object.hasOwn(flag, "choices") && !Array.isArray(flag.choices),
|
|
19
|
+
message: (flagKeys) => `The option \`choices\` must be an array. Invalid flags: ${joinFlagKeys(flagKeys)}`
|
|
20
|
+
},
|
|
21
|
+
choicesNotMatchFlagType: {
|
|
22
|
+
filter: ([, flag]) => flag.type && Array.isArray(flag.choices) && flag.choices.some((choice) => typeof choice !== flag.type),
|
|
23
|
+
message(flagKeys) {
|
|
24
|
+
const flagKeysAndTypes = flagKeys.map((flagKey) => `(\`${decamelizeFlagKey(flagKey)}\`, type: '${options.flags[flagKey].type}')`);
|
|
25
|
+
return `Each value of the option \`choices\` must be of the same type as its flag. Invalid flags: ${flagKeysAndTypes.join(", ")}`;
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
defaultNotInChoices: {
|
|
29
|
+
filter: ([, flag]) => flag.default && Array.isArray(flag.choices) && ![flag.default].flat().every((value) => flag.choices.includes(value)),
|
|
30
|
+
message: (flagKeys) => `Each value of the option \`default\` must exist within the option \`choices\`. Invalid flags: ${joinFlagKeys(flagKeys)}`
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const errorMessages = [];
|
|
35
|
+
for (const [optionKey, filters] of Object.entries(invalidOptionFilters)) {
|
|
36
|
+
const optionEntries = Object.entries(options[optionKey]);
|
|
37
|
+
for (const { filter, message } of Object.values(filters)) {
|
|
38
|
+
const invalidOptions = optionEntries.filter((option) => filter(option));
|
|
39
|
+
const invalidOptionKeys = invalidOptions.map(([key]) => key);
|
|
40
|
+
if (invalidOptions.length > 0) {
|
|
41
|
+
errorMessages.push(message(invalidOptionKeys));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (errorMessages.length > 0) {
|
|
46
|
+
throw new Error(errorMessages.join("\n"));
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const buildOptions = (helpText, options) => {
|
|
50
|
+
if (typeof helpText !== "string") {
|
|
51
|
+
options = helpText;
|
|
52
|
+
helpText = "";
|
|
53
|
+
}
|
|
54
|
+
if (!options.importMeta?.url) {
|
|
55
|
+
throw new TypeError("The `importMeta` option is required. Its value must be `import.meta`.");
|
|
56
|
+
}
|
|
57
|
+
const foundPackage = options.pkg ?? readPackageUpSync({
|
|
58
|
+
cwd: path.dirname(fileURLToPath(options.importMeta.url)),
|
|
59
|
+
normalize: false
|
|
60
|
+
})?.packageJson;
|
|
61
|
+
const pkg = foundPackage ?? {};
|
|
62
|
+
normalizePackageData(pkg);
|
|
63
|
+
const parsedOptions = {
|
|
64
|
+
argv: process.argv.slice(2),
|
|
65
|
+
flags: {},
|
|
66
|
+
inferType: false,
|
|
67
|
+
input: "string",
|
|
68
|
+
description: pkg.description ?? false,
|
|
69
|
+
help: helpText,
|
|
70
|
+
version: pkg.version || "No version found",
|
|
71
|
+
autoHelp: true,
|
|
72
|
+
autoVersion: true,
|
|
73
|
+
booleanDefault: false,
|
|
74
|
+
allowUnknownFlags: true,
|
|
75
|
+
allowParentFlags: true,
|
|
76
|
+
helpIndent: 2,
|
|
77
|
+
...options,
|
|
78
|
+
pkg
|
|
79
|
+
};
|
|
80
|
+
validateOptions(parsedOptions);
|
|
81
|
+
return parsedOptions;
|
|
82
|
+
};
|
|
83
|
+
export {
|
|
84
|
+
buildOptions
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sources":["../../../../../../node_modules/meow/build/options.js"],"sourcesContent":["import process from 'node:process';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { a as readPackageUpSync, n as normalizePackageData } from './dependencies.js';\nimport { joinFlagKeys, decamelizeFlagKey } from './utils.js';\n\nconst validateOptions = options => {\n\tconst invalidOptionFilters = {\n\t\tflags: {\n\t\t\tkeyContainsDashes: {\n\t\t\t\tfilter: ([flagKey]) => flagKey.includes('-') && flagKey !== '--',\n\t\t\t\tmessage: flagKeys => `Flag keys may not contain '-'. Invalid flags: ${joinFlagKeys(flagKeys, '')}`,\n\t\t\t},\n\t\t\taliasIsSet: {\n\t\t\t\tfilter: ([, flag]) => Object.hasOwn(flag, 'alias'),\n\t\t\t\tmessage: flagKeys => `The option \\`alias\\` has been renamed to \\`shortFlag\\`. The following flags need to be updated: ${joinFlagKeys(flagKeys)}`,\n\t\t\t},\n\t\t\tchoicesNotAnArray: {\n\t\t\t\tfilter: ([, flag]) => Object.hasOwn(flag, 'choices') && !Array.isArray(flag.choices),\n\t\t\t\tmessage: flagKeys => `The option \\`choices\\` must be an array. Invalid flags: ${joinFlagKeys(flagKeys)}`,\n\t\t\t},\n\t\t\tchoicesNotMatchFlagType: {\n\t\t\t\tfilter: ([, flag]) => flag.type && Array.isArray(flag.choices) && flag.choices.some(choice => typeof choice !== flag.type),\n\t\t\t\tmessage(flagKeys) {\n\t\t\t\t\tconst flagKeysAndTypes = flagKeys.map(flagKey => `(\\`${decamelizeFlagKey(flagKey)}\\`, type: '${options.flags[flagKey].type}')`);\n\t\t\t\t\treturn `Each value of the option \\`choices\\` must be of the same type as its flag. Invalid flags: ${flagKeysAndTypes.join(', ')}`;\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefaultNotInChoices: {\n\t\t\t\tfilter: ([, flag]) => flag.default && Array.isArray(flag.choices) && ![flag.default].flat().every(value => flag.choices.includes(value)),\n\t\t\t\tmessage: flagKeys => `Each value of the option \\`default\\` must exist within the option \\`choices\\`. Invalid flags: ${joinFlagKeys(flagKeys)}`,\n\t\t\t},\n\t\t},\n\t};\n\n\tconst errorMessages = [];\n\n\tfor (const [optionKey, filters] of Object.entries(invalidOptionFilters)) {\n\t\tconst optionEntries = Object.entries(options[optionKey]);\n\n\t\tfor (const {filter, message} of Object.values(filters)) {\n\t\t\tconst invalidOptions = optionEntries.filter(option => filter(option));\n\t\t\tconst invalidOptionKeys = invalidOptions.map(([key]) => key);\n\n\t\t\tif (invalidOptions.length > 0) {\n\t\t\t\terrorMessages.push(message(invalidOptionKeys));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (errorMessages.length > 0) {\n\t\tthrow new Error(errorMessages.join('\\n'));\n\t}\n};\n\nconst buildOptions = (helpText, options) => {\n\tif (typeof helpText !== 'string') {\n\t\toptions = helpText;\n\t\thelpText = '';\n\t}\n\n\tif (!options.importMeta?.url) {\n\t\tthrow new TypeError('The `importMeta` option is required. Its value must be `import.meta`.');\n\t}\n\n\tconst foundPackage = options.pkg ?? readPackageUpSync({\n\t\tcwd: path.dirname(fileURLToPath(options.importMeta.url)),\n\t\tnormalize: false,\n\t})?.packageJson;\n\n\tconst pkg = foundPackage ?? {};\n\tnormalizePackageData(pkg);\n\n\tconst parsedOptions = {\n\t\targv: process.argv.slice(2),\n\t\tflags: {},\n\t\tinferType: false,\n\t\tinput: 'string',\n\t\tdescription: pkg.description ?? false,\n\t\thelp: helpText,\n\t\tversion: pkg.version || 'No version found',\n\t\tautoHelp: true,\n\t\tautoVersion: true,\n\t\tbooleanDefault: false,\n\t\tallowUnknownFlags: true,\n\t\tallowParentFlags: true,\n\t\thelpIndent: 2,\n\t\t...options,\n\t\tpkg,\n\t};\n\n\tvalidateOptions(parsedOptions);\n\n\treturn parsedOptions;\n};\n\nexport { buildOptions };\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { d as decamelizeKeys, b as constructParserOptions } from "./dependencies.js";
|
|
2
|
+
const buildParserFlags = ({ flags, booleanDefault }) => {
|
|
3
|
+
const parserFlags = {};
|
|
4
|
+
for (const [flagKey, flagValue] of Object.entries(flags)) {
|
|
5
|
+
const flag = { ...flagValue };
|
|
6
|
+
if (flag.shortFlag) {
|
|
7
|
+
flag.alias = flag.shortFlag;
|
|
8
|
+
delete flag.shortFlag;
|
|
9
|
+
}
|
|
10
|
+
if (booleanDefault !== void 0 && flag.type === "boolean" && !Object.hasOwn(flag, "default")) {
|
|
11
|
+
flag.default = flag.isMultiple ? [booleanDefault] : booleanDefault;
|
|
12
|
+
}
|
|
13
|
+
if (flag.isMultiple) {
|
|
14
|
+
flag.type = flag.type ? `${flag.type}-array` : "array";
|
|
15
|
+
flag.default ??= [];
|
|
16
|
+
delete flag.isMultiple;
|
|
17
|
+
}
|
|
18
|
+
if (Array.isArray(flag.aliases)) {
|
|
19
|
+
if (flag.alias) {
|
|
20
|
+
flag.aliases.push(flag.alias);
|
|
21
|
+
}
|
|
22
|
+
flag.alias = flag.aliases;
|
|
23
|
+
delete flag.aliases;
|
|
24
|
+
}
|
|
25
|
+
parserFlags[flagKey] = flag;
|
|
26
|
+
}
|
|
27
|
+
return parserFlags;
|
|
28
|
+
};
|
|
29
|
+
const buildParserOptions = (options) => {
|
|
30
|
+
let parserOptions = buildParserFlags(options);
|
|
31
|
+
parserOptions.arguments = options.input;
|
|
32
|
+
parserOptions = decamelizeKeys(parserOptions, { separator: "-", exclude: ["stopEarly", "--"] });
|
|
33
|
+
if (options.inferType) {
|
|
34
|
+
delete parserOptions.arguments;
|
|
35
|
+
}
|
|
36
|
+
if (!options.allowUnknownFlags) {
|
|
37
|
+
if (options.autoHelp && !parserOptions.help) {
|
|
38
|
+
parserOptions.help = { type: "boolean" };
|
|
39
|
+
}
|
|
40
|
+
if (options.autoVersion && !parserOptions.version) {
|
|
41
|
+
parserOptions.version = { type: "boolean" };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
parserOptions = constructParserOptions(parserOptions);
|
|
45
|
+
parserOptions.configuration = {
|
|
46
|
+
...parserOptions.configuration,
|
|
47
|
+
"greedy-arrays": false,
|
|
48
|
+
"parse-numbers": options.inferType
|
|
49
|
+
};
|
|
50
|
+
if (parserOptions["--"]) {
|
|
51
|
+
parserOptions.configuration["populate--"] = true;
|
|
52
|
+
}
|
|
53
|
+
if (!options.allowUnknownFlags) {
|
|
54
|
+
parserOptions.configuration["unknown-options-as-args"] = true;
|
|
55
|
+
}
|
|
56
|
+
return parserOptions;
|
|
57
|
+
};
|
|
58
|
+
export {
|
|
59
|
+
buildParserOptions
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sources":["../../../../../../node_modules/meow/build/parser.js"],"sourcesContent":["import { d as decamelizeKeys, b as constructParserOptions } from './dependencies.js';\n\nconst buildParserFlags = ({flags, booleanDefault}) => {\n\tconst parserFlags = {};\n\n\tfor (const [flagKey, flagValue] of Object.entries(flags)) {\n\t\tconst flag = {...flagValue};\n\n\t\t// `minimist-options` expects `flag.alias`\n\t\tif (flag.shortFlag) {\n\t\t\tflag.alias = flag.shortFlag;\n\t\t\tdelete flag.shortFlag;\n\t\t}\n\n\t\tif (booleanDefault !== undefined && flag.type === 'boolean' && !Object.hasOwn(flag, 'default')) {\n\t\t\tflag.default = flag.isMultiple ? [booleanDefault] : booleanDefault;\n\t\t}\n\n\t\tif (flag.isMultiple) {\n\t\t\tflag.type = flag.type ? `${flag.type}-array` : 'array';\n\t\t\tflag.default ??= [];\n\t\t\tdelete flag.isMultiple;\n\t\t}\n\n\t\tif (Array.isArray(flag.aliases)) {\n\t\t\tif (flag.alias) {\n\t\t\t\tflag.aliases.push(flag.alias);\n\t\t\t}\n\n\t\t\tflag.alias = flag.aliases;\n\t\t\tdelete flag.aliases;\n\t\t}\n\n\t\tparserFlags[flagKey] = flag;\n\t}\n\n\treturn parserFlags;\n};\n\nconst buildParserOptions = options => {\n\tlet parserOptions = buildParserFlags(options);\n\tparserOptions.arguments = options.input;\n\n\tparserOptions = decamelizeKeys(parserOptions, {separator: '-', exclude: ['stopEarly', '--']});\n\n\tif (options.inferType) {\n\t\tdelete parserOptions.arguments;\n\t}\n\n\t// Add --help and --version to known flags if autoHelp or autoVersion are set\n\tif (!options.allowUnknownFlags) {\n\t\tif (options.autoHelp && !parserOptions.help) {\n\t\t\tparserOptions.help = {type: 'boolean'};\n\t\t}\n\n\t\tif (options.autoVersion && !parserOptions.version) {\n\t\t\tparserOptions.version = {type: 'boolean'};\n\t\t}\n\t}\n\n\tparserOptions = constructParserOptions(parserOptions);\n\n\tparserOptions.configuration = {\n\t\t...parserOptions.configuration,\n\t\t'greedy-arrays': false,\n\t\t'parse-numbers': options.inferType,\n\t};\n\n\tif (parserOptions['--']) {\n\t\tparserOptions.configuration['populate--'] = true;\n\t}\n\n\tif (!options.allowUnknownFlags) {\n\t\t// Collect unknown options in `argv._` to be checked later.\n\t\tparserOptions.configuration['unknown-options-as-args'] = true;\n\t}\n\n\treturn parserOptions;\n};\n\nexport { buildParserOptions };\n"],"names":[],"mappings":";AAEA,MAAM,mBAAmB,CAAC,EAAC,OAAO,eAAc,MAAM;AACrD,QAAM,cAAc,CAAA;AAEpB,aAAW,CAAC,SAAS,SAAS,KAAK,OAAO,QAAQ,KAAK,GAAG;AACzD,UAAM,OAAO,EAAC,GAAG,UAAS;AAG1B,QAAI,KAAK,WAAW;AACnB,WAAK,QAAQ,KAAK;AAClB,aAAO,KAAK;AAAA,IACb;AAEA,QAAI,mBAAmB,UAAa,KAAK,SAAS,aAAa,CAAC,OAAO,OAAO,MAAM,SAAS,GAAG;AAC/F,WAAK,UAAU,KAAK,aAAa,CAAC,cAAc,IAAI;AAAA,IACrD;AAEA,QAAI,KAAK,YAAY;AACpB,WAAK,OAAO,KAAK,OAAO,GAAG,KAAK,IAAI,WAAW;AAC/C,WAAK,YAAY,CAAA;AACjB,aAAO,KAAK;AAAA,IACb;AAEA,QAAI,MAAM,QAAQ,KAAK,OAAO,GAAG;AAChC,UAAI,KAAK,OAAO;AACf,aAAK,QAAQ,KAAK,KAAK,KAAK;AAAA,MAC7B;AAEA,WAAK,QAAQ,KAAK;AAClB,aAAO,KAAK;AAAA,IACb;AAEA,gBAAY,OAAO,IAAI;AAAA,EACxB;AAEA,SAAO;AACR;AAEK,MAAC,qBAAqB,aAAW;AACrC,MAAI,gBAAgB,iBAAiB,OAAO;AAC5C,gBAAc,YAAY,QAAQ;AAElC,kBAAgB,eAAe,eAAe,EAAC,WAAW,KAAK,SAAS,CAAC,aAAa,IAAI,EAAC,CAAC;AAE5F,MAAI,QAAQ,WAAW;AACtB,WAAO,cAAc;AAAA,EACtB;AAGA,MAAI,CAAC,QAAQ,mBAAmB;AAC/B,QAAI,QAAQ,YAAY,CAAC,cAAc,MAAM;AAC5C,oBAAc,OAAO,EAAC,MAAM,UAAS;AAAA,IACtC;AAEA,QAAI,QAAQ,eAAe,CAAC,cAAc,SAAS;AAClD,oBAAc,UAAU,EAAC,MAAM,UAAS;AAAA,IACzC;AAAA,EACD;AAEA,kBAAgB,uBAAuB,aAAa;AAEpD,gBAAc,gBAAgB;AAAA,IAC7B,GAAG,cAAc;AAAA,IACjB,iBAAiB;AAAA,IACjB,iBAAiB,QAAQ;AAAA,EAC3B;AAEC,MAAI,cAAc,IAAI,GAAG;AACxB,kBAAc,cAAc,YAAY,IAAI;AAAA,EAC7C;AAEA,MAAI,CAAC,QAAQ,mBAAmB;AAE/B,kBAAc,cAAc,yBAAyB,IAAI;AAAA,EAC1D;AAEA,SAAO;AACR;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { e as decamelize } from "./dependencies.js";
|
|
2
|
+
const decamelizeFlagKey = (flagKey) => `--${decamelize(flagKey, { separator: "-" })}`;
|
|
3
|
+
const joinFlagKeys = (flagKeys, prefix = "--") => `\`${prefix}${flagKeys.join(`\`, \`${prefix}`)}\``;
|
|
4
|
+
export {
|
|
5
|
+
decamelizeFlagKey,
|
|
6
|
+
joinFlagKeys
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../node_modules/meow/build/utils.js"],"sourcesContent":["import { e as decamelize } from './dependencies.js';\n\nconst decamelizeFlagKey = flagKey => `--${decamelize(flagKey, {separator: '-'})}`;\n\nconst joinFlagKeys = (flagKeys, prefix = '--') => `\\`${prefix}${flagKeys.join(`\\`, \\`${prefix}`)}\\``;\n\nexport { decamelizeFlagKey, joinFlagKeys };\n"],"names":[],"mappings":";AAEK,MAAC,oBAAoB,aAAW,KAAK,WAAW,SAAS,EAAC,WAAW,IAAG,CAAC,CAAC;AAE1E,MAAC,eAAe,CAAC,UAAU,SAAS,SAAS,KAAK,MAAM,GAAG,SAAS,KAAK,SAAS,MAAM,EAAE,CAAC;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import { decamelizeFlagKey } from "./utils.js";
|
|
3
|
+
const validateFlags = (flags, options) => {
|
|
4
|
+
for (const [flagKey, flagValue] of Object.entries(options.flags)) {
|
|
5
|
+
if (flagKey !== "--" && !flagValue.isMultiple && Array.isArray(flags[flagKey])) {
|
|
6
|
+
throw new Error(`The flag --${flagKey} can only be set once.`);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
const validateChoicesByFlag = (flagKey, flagValue, receivedInput) => {
|
|
11
|
+
const { choices, isRequired } = flagValue;
|
|
12
|
+
if (!choices) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const valueMustBeOneOf = `Value must be one of: [\`${choices.join("`, `")}\`]`;
|
|
16
|
+
if (!receivedInput) {
|
|
17
|
+
if (isRequired) {
|
|
18
|
+
return `Flag \`${decamelizeFlagKey(flagKey)}\` has no value. ${valueMustBeOneOf}`;
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (Array.isArray(receivedInput)) {
|
|
23
|
+
const unknownValues = receivedInput.filter((index) => !choices.includes(index));
|
|
24
|
+
if (unknownValues.length > 0) {
|
|
25
|
+
const valuesText = unknownValues.length > 1 ? "values" : "value";
|
|
26
|
+
return `Unknown ${valuesText} for flag \`${decamelizeFlagKey(flagKey)}\`: \`${unknownValues.join("`, `")}\`. ${valueMustBeOneOf}`;
|
|
27
|
+
}
|
|
28
|
+
} else if (!choices.includes(receivedInput)) {
|
|
29
|
+
return `Unknown value for flag \`${decamelizeFlagKey(flagKey)}\`: \`${receivedInput}\`. ${valueMustBeOneOf}`;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const validateChoices = (flags, receivedFlags) => {
|
|
33
|
+
const errors = [];
|
|
34
|
+
for (const [flagKey, flagValue] of Object.entries(flags)) {
|
|
35
|
+
const receivedInput = receivedFlags[flagKey];
|
|
36
|
+
const errorMessage = validateChoicesByFlag(flagKey, flagValue, receivedInput);
|
|
37
|
+
if (errorMessage) {
|
|
38
|
+
errors.push(errorMessage);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (errors.length > 0) {
|
|
42
|
+
throw new Error(`${errors.join("\n")}`);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const validate = (flags, options) => {
|
|
46
|
+
validateFlags(flags, options);
|
|
47
|
+
validateChoices(options.flags, flags);
|
|
48
|
+
};
|
|
49
|
+
const reportUnknownFlags = (unknownFlags) => {
|
|
50
|
+
console.error([
|
|
51
|
+
`Unknown flag${unknownFlags.length > 1 ? "s" : ""}`,
|
|
52
|
+
...unknownFlags
|
|
53
|
+
].join("\n"));
|
|
54
|
+
};
|
|
55
|
+
const checkUnknownFlags = (input) => {
|
|
56
|
+
const unknownFlags = input.filter((item) => typeof item === "string" && item.startsWith("-"));
|
|
57
|
+
if (unknownFlags.length > 0) {
|
|
58
|
+
reportUnknownFlags(unknownFlags);
|
|
59
|
+
process.exit(2);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const isFlagMissing = (flagName, definedFlags, receivedFlags, input) => {
|
|
63
|
+
const flag = definedFlags[flagName];
|
|
64
|
+
let isFlagRequired = true;
|
|
65
|
+
if (typeof flag.isRequired === "function") {
|
|
66
|
+
isFlagRequired = flag.isRequired(receivedFlags, input);
|
|
67
|
+
if (typeof isFlagRequired !== "boolean") {
|
|
68
|
+
throw new TypeError(`Return value for isRequired callback should be of type boolean, but ${typeof isFlagRequired} was returned.`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (receivedFlags[flagName] === void 0) {
|
|
72
|
+
return isFlagRequired;
|
|
73
|
+
}
|
|
74
|
+
return flag.isMultiple && receivedFlags[flagName].length === 0 && isFlagRequired;
|
|
75
|
+
};
|
|
76
|
+
const reportMissingRequiredFlags = (missingRequiredFlags) => {
|
|
77
|
+
console.error(`Missing required flag${missingRequiredFlags.length > 1 ? "s" : ""}`);
|
|
78
|
+
for (const flag of missingRequiredFlags) {
|
|
79
|
+
console.error(` ${decamelizeFlagKey(flag.key)}${flag.shortFlag ? `, -${flag.shortFlag}` : ""}`);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const checkMissingRequiredFlags = (flags, receivedFlags, input) => {
|
|
83
|
+
const missingRequiredFlags = [];
|
|
84
|
+
if (flags === void 0) {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
for (const flagName of Object.keys(flags)) {
|
|
88
|
+
if (flags[flagName].isRequired && isFlagMissing(flagName, flags, receivedFlags, input)) {
|
|
89
|
+
missingRequiredFlags.push({ key: flagName, ...flags[flagName] });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (missingRequiredFlags.length > 0) {
|
|
93
|
+
reportMissingRequiredFlags(missingRequiredFlags);
|
|
94
|
+
process.exit(2);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
export {
|
|
98
|
+
checkMissingRequiredFlags,
|
|
99
|
+
checkUnknownFlags,
|
|
100
|
+
validate
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sources":["../../../../../../node_modules/meow/build/validate.js"],"sourcesContent":["import process from 'node:process';\nimport { decamelizeFlagKey } from './utils.js';\n\nconst validateFlags = (flags, options) => {\n\tfor (const [flagKey, flagValue] of Object.entries(options.flags)) {\n\t\tif (flagKey !== '--' && !flagValue.isMultiple && Array.isArray(flags[flagKey])) {\n\t\t\tthrow new Error(`The flag --${flagKey} can only be set once.`);\n\t\t}\n\t}\n};\n\nconst validateChoicesByFlag = (flagKey, flagValue, receivedInput) => {\n\tconst {choices, isRequired} = flagValue;\n\n\tif (!choices) {\n\t\treturn;\n\t}\n\n\tconst valueMustBeOneOf = `Value must be one of: [\\`${choices.join('`, `')}\\`]`;\n\n\tif (!receivedInput) {\n\t\tif (isRequired) {\n\t\t\treturn `Flag \\`${decamelizeFlagKey(flagKey)}\\` has no value. ${valueMustBeOneOf}`;\n\t\t}\n\n\t\treturn;\n\t}\n\n\tif (Array.isArray(receivedInput)) {\n\t\tconst unknownValues = receivedInput.filter(index => !choices.includes(index));\n\n\t\tif (unknownValues.length > 0) {\n\t\t\tconst valuesText = unknownValues.length > 1 ? 'values' : 'value';\n\n\t\t\treturn `Unknown ${valuesText} for flag \\`${decamelizeFlagKey(flagKey)}\\`: \\`${unknownValues.join('`, `')}\\`. ${valueMustBeOneOf}`;\n\t\t}\n\t} else if (!choices.includes(receivedInput)) {\n\t\treturn `Unknown value for flag \\`${decamelizeFlagKey(flagKey)}\\`: \\`${receivedInput}\\`. ${valueMustBeOneOf}`;\n\t}\n};\n\nconst validateChoices = (flags, receivedFlags) => {\n\tconst errors = [];\n\n\tfor (const [flagKey, flagValue] of Object.entries(flags)) {\n\t\tconst receivedInput = receivedFlags[flagKey];\n\t\tconst errorMessage = validateChoicesByFlag(flagKey, flagValue, receivedInput);\n\n\t\tif (errorMessage) {\n\t\t\terrors.push(errorMessage);\n\t\t}\n\t}\n\n\tif (errors.length > 0) {\n\t\tthrow new Error(`${errors.join('\\n')}`);\n\t}\n};\n\nconst validate = (flags, options) => {\n\tvalidateFlags(flags, options);\n\tvalidateChoices(options.flags, flags);\n};\n\nconst reportUnknownFlags = unknownFlags => {\n\tconsole.error([\n\t\t`Unknown flag${unknownFlags.length > 1 ? 's' : ''}`,\n\t\t...unknownFlags,\n\t].join('\\n'));\n};\n\nconst checkUnknownFlags = input => {\n\tconst unknownFlags = input.filter(item => typeof item === 'string' && item.startsWith('-'));\n\tif (unknownFlags.length > 0) {\n\t\treportUnknownFlags(unknownFlags);\n\t\tprocess.exit(2);\n\t}\n};\n\nconst isFlagMissing = (flagName, definedFlags, receivedFlags, input) => {\n\tconst flag = definedFlags[flagName];\n\tlet isFlagRequired = true;\n\n\tif (typeof flag.isRequired === 'function') {\n\t\tisFlagRequired = flag.isRequired(receivedFlags, input);\n\t\tif (typeof isFlagRequired !== 'boolean') {\n\t\t\tthrow new TypeError(`Return value for isRequired callback should be of type boolean, but ${typeof isFlagRequired} was returned.`);\n\t\t}\n\t}\n\n\tif (receivedFlags[flagName] === undefined) {\n\t\treturn isFlagRequired;\n\t}\n\n\treturn flag.isMultiple && receivedFlags[flagName].length === 0 && isFlagRequired;\n};\n\nconst reportMissingRequiredFlags = missingRequiredFlags => {\n\tconsole.error(`Missing required flag${missingRequiredFlags.length > 1 ? 's' : ''}`);\n\tfor (const flag of missingRequiredFlags) {\n\t\tconsole.error(`\\t${decamelizeFlagKey(flag.key)}${flag.shortFlag ? `, -${flag.shortFlag}` : ''}`);\n\t}\n};\n\nconst checkMissingRequiredFlags = (flags, receivedFlags, input) => {\n\tconst missingRequiredFlags = [];\n\tif (flags === undefined) {\n\t\treturn [];\n\t}\n\n\tfor (const flagName of Object.keys(flags)) {\n\t\tif (flags[flagName].isRequired && isFlagMissing(flagName, flags, receivedFlags, input)) {\n\t\t\tmissingRequiredFlags.push({key: flagName, ...flags[flagName]});\n\t\t}\n\t}\n\n\tif (missingRequiredFlags.length > 0) {\n\t\treportMissingRequiredFlags(missingRequiredFlags);\n\t\tprocess.exit(2);\n\t}\n};\n\nexport { checkMissingRequiredFlags, checkUnknownFlags, validate };\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
export declare const CLIArgs: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
3
|
+
commandType: z.ZodLiteral<"init">;
|
|
4
|
+
help: z.ZodOptional<z.ZodBoolean>;
|
|
5
|
+
version: z.ZodOptional<z.ZodBoolean>;
|
|
6
|
+
repository: z.ZodString;
|
|
7
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
8
|
+
commandType: z.ZodLiteral<"sync">;
|
|
9
|
+
help: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
version: z.ZodOptional<z.ZodBoolean>;
|
|
11
|
+
}, z.core.$strip>], "commandType">;
|
|
12
|
+
export declare function run(): Promise<void>;
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { createPrismicManager } from "@prismicio/manager";
|
|
2
|
+
import meow from './_node_modules/meow/build/index.js';
|
|
3
|
+
import * as z from "zod";
|
|
4
|
+
import { name, version } from "./packages/cli/package.json.js";
|
|
5
|
+
import { init } from "./commands/init.js";
|
|
6
|
+
import { sync } from "./commands/sync.js";
|
|
7
|
+
import { FRAMEWORK_PLUGINS } from "./core/framework.js";
|
|
8
|
+
import { handleSilentError } from "./utils/error.js";
|
|
9
|
+
import { displayHeader, displayError } from "./utils/output.js";
|
|
10
|
+
import { setupSentry, trackSentryError } from "./utils/sentry.js";
|
|
11
|
+
import { initTelemetry, trackErrorTelemetry } from "./utils/telemetry.js";
|
|
12
|
+
const cli = meow(`
|
|
13
|
+
DOCUMENTATION
|
|
14
|
+
https://prismic.io/docs
|
|
15
|
+
|
|
16
|
+
VERSION
|
|
17
|
+
${name}@${version}
|
|
18
|
+
|
|
19
|
+
USAGE
|
|
20
|
+
$ npx prismic@latest init --repository <repository-id>
|
|
21
|
+
$ npx prismic@latest sync
|
|
22
|
+
|
|
23
|
+
OPTIONS
|
|
24
|
+
--repository, -r Specify a Prismic repository to use when initializing a project
|
|
25
|
+
|
|
26
|
+
--help, -h Display CLI help
|
|
27
|
+
--version, -v Display CLI version
|
|
28
|
+
`, {
|
|
29
|
+
importMeta: import.meta,
|
|
30
|
+
flags: {
|
|
31
|
+
repository: {
|
|
32
|
+
type: "string",
|
|
33
|
+
shortFlag: "r"
|
|
34
|
+
},
|
|
35
|
+
help: {
|
|
36
|
+
type: "boolean",
|
|
37
|
+
shortFlag: "h",
|
|
38
|
+
default: false
|
|
39
|
+
},
|
|
40
|
+
version: {
|
|
41
|
+
type: "boolean",
|
|
42
|
+
shortFlag: "v",
|
|
43
|
+
default: false
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
description: false,
|
|
47
|
+
autoHelp: false,
|
|
48
|
+
autoVersion: false,
|
|
49
|
+
allowUnknownFlags: false
|
|
50
|
+
});
|
|
51
|
+
const CLIArgs = z.discriminatedUnion("commandType", [
|
|
52
|
+
z.object({
|
|
53
|
+
commandType: z.literal("init"),
|
|
54
|
+
help: z.boolean().optional(),
|
|
55
|
+
version: z.boolean().optional(),
|
|
56
|
+
repository: z.string().min(1, "Repository name is required to initialize a project")
|
|
57
|
+
}),
|
|
58
|
+
z.object({
|
|
59
|
+
commandType: z.literal("sync"),
|
|
60
|
+
help: z.boolean().optional(),
|
|
61
|
+
version: z.boolean().optional()
|
|
62
|
+
})
|
|
63
|
+
]);
|
|
64
|
+
async function run() {
|
|
65
|
+
displayHeader();
|
|
66
|
+
setupSentry();
|
|
67
|
+
if (cli.flags.help) {
|
|
68
|
+
cli.showHelp(0);
|
|
69
|
+
process.exit(0);
|
|
70
|
+
}
|
|
71
|
+
if (cli.flags.version) {
|
|
72
|
+
console.info(`${name}@${version}`);
|
|
73
|
+
process.exit(0);
|
|
74
|
+
}
|
|
75
|
+
const cliArgs = CLIArgs.safeParse({
|
|
76
|
+
...cli.flags,
|
|
77
|
+
commandType: cli.input[0]
|
|
78
|
+
});
|
|
79
|
+
if (!cliArgs.success) {
|
|
80
|
+
const error = new Error(cliArgs.error.message);
|
|
81
|
+
displayError(error);
|
|
82
|
+
await trackSentryError(error);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
if (cli.input.length > 1) {
|
|
86
|
+
const error = new Error("Too many arguments. Expected 'init' or 'sync'.");
|
|
87
|
+
displayError(error);
|
|
88
|
+
await trackSentryError(error);
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
let manager;
|
|
92
|
+
try {
|
|
93
|
+
manager = createPrismicManager({
|
|
94
|
+
cwd: process.cwd(),
|
|
95
|
+
nativePlugins: FRAMEWORK_PLUGINS
|
|
96
|
+
});
|
|
97
|
+
} catch (error) {
|
|
98
|
+
displayError(error);
|
|
99
|
+
await trackSentryError(error);
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
const commandType = cliArgs.data.commandType;
|
|
103
|
+
const repositoryName = commandType === "init" ? cliArgs.data.repository : void 0;
|
|
104
|
+
try {
|
|
105
|
+
await initTelemetry({
|
|
106
|
+
manager,
|
|
107
|
+
commandType,
|
|
108
|
+
repositoryName
|
|
109
|
+
});
|
|
110
|
+
} catch (telemetryError) {
|
|
111
|
+
await trackSentryError(telemetryError);
|
|
112
|
+
handleSilentError(telemetryError, "Telemetry initialization error");
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
if (commandType === "init") {
|
|
116
|
+
await init({
|
|
117
|
+
manager,
|
|
118
|
+
repositoryName: cliArgs.data.repository
|
|
119
|
+
});
|
|
120
|
+
process.exit(0);
|
|
121
|
+
}
|
|
122
|
+
if (commandType === "sync") {
|
|
123
|
+
await sync({ manager });
|
|
124
|
+
process.exit(0);
|
|
125
|
+
}
|
|
126
|
+
throw new Error("Unknown command type.");
|
|
127
|
+
} catch (error) {
|
|
128
|
+
displayError(error);
|
|
129
|
+
await trackSentryError(error);
|
|
130
|
+
try {
|
|
131
|
+
await trackErrorTelemetry({
|
|
132
|
+
manager,
|
|
133
|
+
error,
|
|
134
|
+
commandType
|
|
135
|
+
});
|
|
136
|
+
} catch (telemetryError) {
|
|
137
|
+
handleSilentError(telemetryError, "Telemetry tracking error");
|
|
138
|
+
}
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
void run();
|
|
143
|
+
export {
|
|
144
|
+
CLIArgs,
|
|
145
|
+
run
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sources":["../../src/cli.ts"],"sourcesContent":["import { createPrismicManager } from \"@prismicio/manager\";\nimport meow from \"meow\";\nimport * as z from \"zod\";\n\nimport { name as pkgName, version as pkgVersion } from \"../package.json\";\n\nimport { init } from \"./commands/init\";\nimport { sync } from \"./commands/sync\";\nimport { FRAMEWORK_PLUGINS } from \"./core/framework\";\nimport { handleSilentError } from \"./utils/error\";\nimport { displayError, displayHeader } from \"./utils/output\";\nimport { setupSentry, trackSentryError } from \"./utils/sentry\";\nimport { initTelemetry, trackErrorTelemetry } from \"./utils/telemetry\";\n\nconst cli = meow(\n\t`\nDOCUMENTATION\n https://prismic.io/docs\n\nVERSION\n ${pkgName}@${pkgVersion}\n\nUSAGE\n $ npx prismic@latest init --repository <repository-id>\n $ npx prismic@latest sync\n\nOPTIONS\n --repository, -r Specify a Prismic repository to use when initializing a project\n\n --help, -h Display CLI help\n --version, -v Display CLI version\n`,\n\t{\n\t\timportMeta: import.meta,\n\t\tflags: {\n\t\t\trepository: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tshortFlag: \"r\",\n\t\t\t},\n\t\t\thelp: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t\tshortFlag: \"h\",\n\t\t\t\tdefault: false,\n\t\t\t},\n\t\t\tversion: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t\tshortFlag: \"v\",\n\t\t\t\tdefault: false,\n\t\t\t},\n\t\t},\n\t\tdescription: false,\n\t\tautoHelp: false,\n\t\tautoVersion: false,\n\t\tallowUnknownFlags: false,\n\t},\n);\n\nexport const CLIArgs = z.discriminatedUnion(\"commandType\", [\n\tz.object({\n\t\tcommandType: z.literal(\"init\"),\n\t\thelp: z.boolean().optional(),\n\t\tversion: z.boolean().optional(),\n\t\trepository: z\n\t\t\t.string()\n\t\t\t.min(1, \"Repository name is required to initialize a project\"),\n\t}),\n\tz.object({\n\t\tcommandType: z.literal(\"sync\"),\n\t\thelp: z.boolean().optional(),\n\t\tversion: z.boolean().optional(),\n\t}),\n]);\n\nexport async function run(): Promise<void> {\n\t// Display header immediately so user sees something is happening\n\tdisplayHeader();\n\n\t// Setup Sentry as early as possible to track ALL errors\n\tsetupSentry();\n\n\t// Handle help flag (exit early, no telemetry needed)\n\tif (cli.flags.help) {\n\t\tcli.showHelp(0);\n\t\tprocess.exit(0);\n\t}\n\n\t// Handle version flag (exit early, no telemetry needed)\n\tif (cli.flags.version) {\n\t\tconsole.info(`${pkgName}@${pkgVersion}`);\n\t\tprocess.exit(0);\n\t}\n\n\t// Validate CLI arguments first (before any operations that might fail)\n\tconst cliArgs = CLIArgs.safeParse({\n\t\t...cli.flags,\n\t\tcommandType: cli.input[0],\n\t});\n\n\t// Invalid arguments - track with Sentry even though it's a user error\n\tif (!cliArgs.success) {\n\t\tconst error = new Error(cliArgs.error.message);\n\t\tdisplayError(error);\n\t\tawait trackSentryError(error);\n\t\tprocess.exit(1);\n\t}\n\n\t// Too many arguments - track with Sentry\n\tif (cli.input.length > 1) {\n\t\tconst error = new Error(\"Too many arguments. Expected 'init' or 'sync'.\");\n\t\tdisplayError(error);\n\t\tawait trackSentryError(error);\n\t\tprocess.exit(1);\n\t}\n\n\t// Create manager - wrap in try-catch to track failures\n\tlet manager;\n\ttry {\n\t\tmanager = createPrismicManager({\n\t\t\tcwd: process.cwd(),\n\t\t\tnativePlugins: FRAMEWORK_PLUGINS,\n\t\t});\n\t} catch (error) {\n\t\t// Manager creation failed - track with Sentry (telemetry not available yet)\n\t\tdisplayError(error);\n\t\tawait trackSentryError(error);\n\t\tprocess.exit(1);\n\t}\n\n\tconst commandType = cliArgs.data.commandType;\n\tconst repositoryName =\n\t\tcommandType === \"init\" ? cliArgs.data.repository : undefined;\n\n\t// Initialize telemetry as early as possible (after manager creation)\n\t// Track initialization failures with Sentry\n\ttry {\n\t\tawait initTelemetry({\n\t\t\tmanager,\n\t\t\tcommandType,\n\t\t\trepositoryName,\n\t\t});\n\t} catch (telemetryError) {\n\t\t// Telemetry initialization failed - track with Sentry but continue execution\n\t\t// This prevents telemetry issues from breaking the CLI\n\t\tawait trackSentryError(telemetryError);\n\t\thandleSilentError(telemetryError, \"Telemetry initialization error\");\n\t}\n\n\t// Execute command - all errors here will be tracked\n\ttry {\n\t\tif (commandType === \"init\") {\n\t\t\tawait init({\n\t\t\t\tmanager,\n\t\t\t\trepositoryName: cliArgs.data.repository,\n\t\t\t});\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (commandType === \"sync\") {\n\t\t\tawait sync({ manager });\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tthrow new Error(\"Unknown command type.\");\n\t} catch (error) {\n\t\tdisplayError(error);\n\n\t\t// Always track with Sentry first (most reliable)\n\t\tawait trackSentryError(error);\n\n\t\t// Try to track with telemetry if it was initialized\n\t\t// If telemetry wasn't initialized or tracking fails, Sentry already has it\n\t\ttry {\n\t\t\tawait trackErrorTelemetry({\n\t\t\t\tmanager,\n\t\t\t\terror,\n\t\t\t\tcommandType,\n\t\t\t});\n\t\t} catch (telemetryError) {\n\t\t\thandleSilentError(telemetryError, \"Telemetry tracking error\");\n\t\t}\n\n\t\tprocess.exit(1);\n\t}\n}\n\nvoid run();\n"],"names":["pkgName","pkgVersion"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { version } from "../packages/cli/package.json.js";
|
|
2
|
+
import { login } from "../core/auth.js";
|
|
3
|
+
import { saveCustomTypes } from "../core/customType.js";
|
|
4
|
+
import { initFramework } from "../core/framework.js";
|
|
5
|
+
import { detectProjectState, detectProjectContext, createPrismicConfig } from "../core/project.js";
|
|
6
|
+
import { validateRepository } from "../core/repository.js";
|
|
7
|
+
import { saveSlices } from "../core/slices.js";
|
|
8
|
+
import { checkCLIVersion } from "../core/version.js";
|
|
9
|
+
import { displaySuccess } from "../utils/output.js";
|
|
10
|
+
async function init(args) {
|
|
11
|
+
const { manager, repositoryName } = args;
|
|
12
|
+
await login(manager);
|
|
13
|
+
await detectProjectState({ manager, commandType: "init" });
|
|
14
|
+
await validateRepository({ manager, repository: repositoryName });
|
|
15
|
+
const projectContext = await detectProjectContext(manager);
|
|
16
|
+
await checkCLIVersion({ manager, currentVersion: version });
|
|
17
|
+
await createPrismicConfig({ manager, projectContext, repositoryName });
|
|
18
|
+
await manager.plugins.initPlugins();
|
|
19
|
+
await initFramework({ manager, projectContext });
|
|
20
|
+
await saveSlices({ manager });
|
|
21
|
+
await saveCustomTypes({ manager });
|
|
22
|
+
await manager.telemetry.track({
|
|
23
|
+
event: "prismic-cli:end",
|
|
24
|
+
commandType: "init",
|
|
25
|
+
repository: repositoryName,
|
|
26
|
+
fullCommand: process.argv.join(" "),
|
|
27
|
+
success: true
|
|
28
|
+
});
|
|
29
|
+
displaySuccess("Project initialized successfully!", "You're all set to start building with Prismic.");
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
init
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sources":["../../../src/commands/init.ts"],"sourcesContent":["import type { PrismicManager } from \"@prismicio/manager\";\n\nimport { version as pkgVersion } from \"../../package.json\";\nimport { login } from \"../core/auth\";\nimport { saveCustomTypes } from \"../core/customType\";\nimport { initFramework } from \"../core/framework\";\nimport {\n\tcreatePrismicConfig,\n\tdetectProjectContext,\n\tdetectProjectState,\n} from \"../core/project\";\nimport { validateRepository } from \"../core/repository\";\nimport { saveSlices } from \"../core/slices\";\nimport { checkCLIVersion } from \"../core/version\";\nimport { displaySuccess } from \"../utils/output\";\n\ntype InitArgs = {\n\tmanager: PrismicManager;\n\trepositoryName: string;\n};\n\nexport async function init(args: InitArgs): Promise<void> {\n\tconst { manager, repositoryName } = args;\n\n\t// Authentication - Also updates Sentry context\n\tawait login(manager);\n\n\t// Ensure the project is not already initialized\n\tawait detectProjectState({ manager, commandType: \"init\" });\n\n\t// Ensure the repository exists and the user has write access\n\tawait validateRepository({ manager, repository: repositoryName });\n\n\t// Get project framework and package manager - Also updates Sentry context\n\tconst projectContext = await detectProjectContext(manager);\n\n\t// Check CLI version - Voluntarily late so Sentry context is updated\n\tawait checkCLIVersion({ manager, currentVersion: pkgVersion });\n\n\t// Create Prismic configuration file\n\tawait createPrismicConfig({ manager, projectContext, repositoryName });\n\n\t// Initialize the plugin system\n\tawait manager.plugins.initPlugins();\n\n\t// Initialize the framework specific dependencies and files\n\tawait initFramework({ manager, projectContext });\n\n\t// Save Prismic slices locally\n\tawait saveSlices({ manager });\n\n\t// Save Prismic custom types locally\n\tawait saveCustomTypes({ manager });\n\n\t// Track the end of the init command\n\tawait manager.telemetry.track({\n\t\tevent: \"prismic-cli:end\",\n\t\tcommandType: \"init\",\n\t\trepository: repositoryName,\n\t\tfullCommand: process.argv.join(\" \"),\n\t\tsuccess: true,\n\t});\n\n\tdisplaySuccess(\n\t\t\"Project initialized successfully!\",\n\t\t\"You're all set to start building with Prismic.\",\n\t);\n}\n"],"names":["pkgVersion"],"mappings":";;;;;;;;;AAqBA,eAAsB,KAAK,MAAc;AACxC,QAAM,EAAE,SAAS,eAAA,IAAmB;AAGpC,QAAM,MAAM,OAAO;AAGnB,QAAM,mBAAmB,EAAE,SAAS,aAAa,QAAQ;AAGzD,QAAM,mBAAmB,EAAE,SAAS,YAAY,gBAAgB;AAGhE,QAAM,iBAAiB,MAAM,qBAAqB,OAAO;AAGzD,QAAM,gBAAgB,EAAE,SAAS,gBAAgBA,SAAY;AAG7D,QAAM,oBAAoB,EAAE,SAAS,gBAAgB,gBAAgB;AAGrE,QAAM,QAAQ,QAAQ,YAAA;AAGtB,QAAM,cAAc,EAAE,SAAS,gBAAgB;AAG/C,QAAM,WAAW,EAAE,SAAS;AAG5B,QAAM,gBAAgB,EAAE,SAAS;AAGjC,QAAM,QAAQ,UAAU,MAAM;AAAA,IAC7B,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,aAAa,QAAQ,KAAK,KAAK,GAAG;AAAA,IAClC,SAAS;AAAA,EAAA,CACT;AAED,iBACC,qCACA,gDAAgD;AAElD;"}
|