@contentful/app-scripts 2.1.0 → 2.1.2
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/lib/analytics.js +3 -1
- package/lib/bin.js +9 -10
- package/lib/generate-function/build-generate-function-settings.d.ts +3 -3
- package/lib/generate-function/build-generate-function-settings.js +47 -98
- package/lib/generate-function/clone.js +1 -5
- package/lib/generate-function/index.d.ts +2 -2
- package/lib/generate-function/index.js +2 -2
- package/lib/types.d.ts +1 -13
- package/lib/upload/create-app-bundle.d.ts +1 -0
- package/lib/upload/create-app-bundle.js +25 -9
- package/package.json +3 -3
package/lib/analytics.js
CHANGED
|
@@ -19,7 +19,9 @@ function track({ command, ci }) {
|
|
|
19
19
|
const client = new analytics_node_1.Analytics({
|
|
20
20
|
writeKey: SEGMENT_WRITE_KEY,
|
|
21
21
|
});
|
|
22
|
-
client.on('error', (err) => {
|
|
22
|
+
client.on('error', (err) => {
|
|
23
|
+
/* noop */
|
|
24
|
+
});
|
|
23
25
|
client.track({
|
|
24
26
|
event: 'app-cli-app-scripts',
|
|
25
27
|
properties: {
|
package/lib/bin.js
CHANGED
|
@@ -22,7 +22,7 @@ async function runCommand(command, options) {
|
|
|
22
22
|
.description('Upload your build folder and create an AppBundle')
|
|
23
23
|
.option('--bundle-dir [directory]', 'The directory of your build folder')
|
|
24
24
|
.option('--organization-id [orgId]', 'The id of your organization')
|
|
25
|
-
.option('--definition-id [defId]',
|
|
25
|
+
.option('--definition-id [defId]', "The id of your app's definition")
|
|
26
26
|
.option('--token [accessToken]', 'Your content management access token')
|
|
27
27
|
.option('--comment [comment]', 'Optional comment for the created bundle')
|
|
28
28
|
.option('--skip-activation', 'A Boolean flag to skip automatic activation')
|
|
@@ -35,7 +35,7 @@ async function runCommand(command, options) {
|
|
|
35
35
|
.description('Mark an AppBundle as "active" for a given AppDefinition')
|
|
36
36
|
.option('--bundle-id [bundleId]', 'The id of your bundle')
|
|
37
37
|
.option('--organization-id [orgId]', 'The id of your organization')
|
|
38
|
-
.option('--definition-id [defId]',
|
|
38
|
+
.option('--definition-id [defId]', "The id of your app's definition")
|
|
39
39
|
.option('--token [accessToken]', 'Your content management access token')
|
|
40
40
|
.option('--host [host]', 'Contentful subdomain to use, e.g. "api.contentful.com"')
|
|
41
41
|
.action(async (options) => {
|
|
@@ -44,7 +44,7 @@ async function runCommand(command, options) {
|
|
|
44
44
|
commander_1.program
|
|
45
45
|
.command('open-settings')
|
|
46
46
|
.description('Opens the app editor for a given AppDefinition')
|
|
47
|
-
.option('--definition-id [defId]',
|
|
47
|
+
.option('--definition-id [defId]', "The id of your app's definition")
|
|
48
48
|
.option('--host [host]', 'Contentful subdomain to use, e.g. "api.contentful.com"')
|
|
49
49
|
.action(async (options) => {
|
|
50
50
|
await runCommand(index_1.open, options);
|
|
@@ -53,7 +53,7 @@ async function runCommand(command, options) {
|
|
|
53
53
|
.command('bundle-cleanup')
|
|
54
54
|
.description('Removes old, non-active bundles, only keeps the 50 most recent ones')
|
|
55
55
|
.option('--organization-id [orgId]', 'The id of your organization')
|
|
56
|
-
.option('--definition-id [defId]',
|
|
56
|
+
.option('--definition-id [defId]', "The id of your app's definition")
|
|
57
57
|
.option('--token [accessToken]', 'Your content management access token')
|
|
58
58
|
.option('--keep [keepAmount]', 'The amount of bundles that should remain')
|
|
59
59
|
.option('--host [host]', 'Contentful subdomain to use, e.g. "api.contentful.com"')
|
|
@@ -69,7 +69,7 @@ async function runCommand(command, options) {
|
|
|
69
69
|
commander_1.program
|
|
70
70
|
.command('install')
|
|
71
71
|
.description('Opens a picker to select the space and environment for installing the app associated with a given AppDefinition')
|
|
72
|
-
.option('--definition-id [defId]',
|
|
72
|
+
.option('--definition-id [defId]', "The id of your app's definition")
|
|
73
73
|
.option('--host [host]', 'Contentful subdomain to use, e.g. "api.contentful.com"')
|
|
74
74
|
.action(async (options) => {
|
|
75
75
|
await runCommand(index_1.install, options);
|
|
@@ -86,10 +86,9 @@ async function runCommand(command, options) {
|
|
|
86
86
|
commander_1.program
|
|
87
87
|
.command('generate-function')
|
|
88
88
|
.description('Generate a new Contentful Function')
|
|
89
|
-
.option('--name <name>', 'Name of the function')
|
|
90
|
-
.option('--
|
|
91
|
-
.option('--
|
|
92
|
-
.option('--language <language>', 'Select a language for the function')
|
|
89
|
+
.option('-n, --name <name>', 'Name of the function')
|
|
90
|
+
.option('-e, --example <example>', 'Name of the reference example')
|
|
91
|
+
.option('-l, --language <language>', 'Select a language for the function')
|
|
93
92
|
.action(async (options) => {
|
|
94
93
|
await runCommand(index_1.generateFunction, options);
|
|
95
94
|
});
|
|
@@ -98,7 +97,7 @@ async function runCommand(command, options) {
|
|
|
98
97
|
.description('Upsert Action(s) for an App')
|
|
99
98
|
.option('-m, --manifest-file <path>', 'Contentful app manifest file path')
|
|
100
99
|
.option('--organization-id [orgId]', 'The id of your organization')
|
|
101
|
-
.option('--definition-id [defId]',
|
|
100
|
+
.option('--definition-id [defId]', "The id of your app's definition")
|
|
102
101
|
.option('--token [accessToken]', 'Your content management access token')
|
|
103
102
|
.option('--host [host]', 'Contentful subdomain to use, e.g. "api.contentful.com"')
|
|
104
103
|
.action(async (options) => {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { GenerateFunctionSettings
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
1
|
+
import { GenerateFunctionSettings } from '../types';
|
|
2
|
+
export declare function buildGenerateFunctionSettingsInteractive(): Promise<GenerateFunctionSettings>;
|
|
3
|
+
export declare function buildGenerateFunctionSettingsCLI(options: GenerateFunctionSettings): Promise<GenerateFunctionSettings>;
|
|
@@ -3,8 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
exports.
|
|
6
|
+
exports.buildGenerateFunctionSettingsInteractive = buildGenerateFunctionSettingsInteractive;
|
|
7
|
+
exports.buildGenerateFunctionSettingsCLI = buildGenerateFunctionSettingsCLI;
|
|
8
8
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
10
10
|
const get_github_folder_names_1 = require("./get-github-folder-names");
|
|
@@ -12,131 +12,80 @@ const constants_1 = require("./constants");
|
|
|
12
12
|
const ora_1 = __importDefault(require("ora"));
|
|
13
13
|
const chalk_1 = __importDefault(require("chalk"));
|
|
14
14
|
const logger_1 = require("./logger");
|
|
15
|
-
async function
|
|
15
|
+
async function buildGenerateFunctionSettingsInteractive() {
|
|
16
16
|
const baseSettings = await inquirer_1.default.prompt([
|
|
17
17
|
{
|
|
18
18
|
name: 'name',
|
|
19
19
|
message: `Function name (${path_1.default.basename(process.cwd())}):`,
|
|
20
20
|
},
|
|
21
|
+
]);
|
|
22
|
+
if (constants_1.BANNED_FUNCTION_NAMES.includes(baseSettings.name)) {
|
|
23
|
+
throw new Error(`Invalid function name: ${baseSettings.name}`);
|
|
24
|
+
}
|
|
25
|
+
const filteredSources = await (0, get_github_folder_names_1.getGithubFolderNames)();
|
|
26
|
+
const sourceSpecificSettings = await inquirer_1.default.prompt([
|
|
21
27
|
{
|
|
22
|
-
name: '
|
|
23
|
-
message: '
|
|
28
|
+
name: 'example',
|
|
29
|
+
message: 'Select an example:',
|
|
30
|
+
type: 'list',
|
|
31
|
+
choices: filteredSources,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'language',
|
|
35
|
+
message: 'Select a language',
|
|
24
36
|
type: 'list',
|
|
25
37
|
choices: [
|
|
26
|
-
{ name: '
|
|
27
|
-
{ name: '
|
|
38
|
+
{ name: 'TypeScript', value: 'typescript' },
|
|
39
|
+
{ name: 'JavaScript', value: 'javascript' },
|
|
28
40
|
],
|
|
29
|
-
default: '
|
|
41
|
+
default: 'typescript',
|
|
30
42
|
}
|
|
31
43
|
]);
|
|
32
|
-
|
|
33
|
-
throw new Error(`Invalid function name: ${baseSettings.name}`);
|
|
34
|
-
}
|
|
35
|
-
let sourceSpecificSettings;
|
|
36
|
-
if (baseSettings.sourceType === 'template') {
|
|
37
|
-
sourceSpecificSettings = await inquirer_1.default.prompt([
|
|
38
|
-
{
|
|
39
|
-
name: 'language',
|
|
40
|
-
message: 'Pick a template',
|
|
41
|
-
type: 'list',
|
|
42
|
-
choices: [
|
|
43
|
-
{ name: 'TypeScript', value: 'typescript' },
|
|
44
|
-
{ name: 'JavaScript', value: 'javascript' },
|
|
45
|
-
],
|
|
46
|
-
default: 'typescript',
|
|
47
|
-
}
|
|
48
|
-
]);
|
|
49
|
-
sourceSpecificSettings.sourceName = sourceSpecificSettings.language.toLowerCase();
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
const availableExamples = await (0, get_github_folder_names_1.getGithubFolderNames)();
|
|
53
|
-
const filteredExamples = availableExamples.filter((template) => constants_1.ACCEPTED_EXAMPLE_FOLDERS.includes(template));
|
|
54
|
-
sourceSpecificSettings = await inquirer_1.default.prompt([
|
|
55
|
-
{
|
|
56
|
-
name: 'sourceName',
|
|
57
|
-
message: 'Select an example:',
|
|
58
|
-
type: 'list',
|
|
59
|
-
choices: filteredExamples,
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
name: 'language',
|
|
63
|
-
message: 'Pick a template',
|
|
64
|
-
type: 'list',
|
|
65
|
-
choices: [
|
|
66
|
-
{ name: 'TypeScript', value: 'typescript' },
|
|
67
|
-
{ name: 'JavaScript', value: 'javascript' },
|
|
68
|
-
],
|
|
69
|
-
default: 'typescript',
|
|
70
|
-
}
|
|
71
|
-
]);
|
|
72
|
-
}
|
|
73
|
-
baseSettings.sourceName = sourceSpecificSettings.sourceName;
|
|
44
|
+
baseSettings.example = sourceSpecificSettings.example;
|
|
74
45
|
baseSettings.language = sourceSpecificSettings.language;
|
|
75
46
|
return baseSettings;
|
|
76
47
|
}
|
|
77
48
|
function validateArguments(options) {
|
|
78
|
-
const
|
|
79
|
-
|
|
49
|
+
const requiredParams = ['name', 'example', 'language'];
|
|
50
|
+
if (!requiredParams.every((key) => key in options)) {
|
|
51
|
+
throw new Error('You must specify a function name, an example, and a language');
|
|
52
|
+
}
|
|
80
53
|
if (constants_1.BANNED_FUNCTION_NAMES.includes(options.name)) {
|
|
81
54
|
throw new Error(`Invalid function name: ${options.name}`);
|
|
82
55
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
56
|
+
// Convert options to lowercase and trim whitespace
|
|
57
|
+
for (const key in options) {
|
|
58
|
+
const optionKey = key;
|
|
59
|
+
const value = options[optionKey].toLowerCase().trim();
|
|
60
|
+
if (optionKey === 'language') {
|
|
61
|
+
// Assert that the value is of type Language
|
|
62
|
+
options[optionKey] = value;
|
|
86
63
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (!exampleRequired.every((key) => key in options)) {
|
|
90
|
-
throw new Error('You must specify a function name, an example, and a language');
|
|
64
|
+
else {
|
|
65
|
+
options[optionKey] = value;
|
|
91
66
|
}
|
|
92
67
|
}
|
|
93
|
-
else {
|
|
94
|
-
throw new Error('You must specify either --template or --example');
|
|
95
|
-
}
|
|
96
68
|
}
|
|
97
|
-
async function
|
|
69
|
+
async function buildGenerateFunctionSettingsCLI(options) {
|
|
98
70
|
const validateSpinner = (0, ora_1.default)('Validating your input\n').start();
|
|
99
71
|
const settings = {};
|
|
100
72
|
try {
|
|
101
73
|
validateArguments(options);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
74
|
+
// Check if the source exists
|
|
75
|
+
const filteredSources = await (0, get_github_folder_names_1.getGithubFolderNames)();
|
|
76
|
+
if (!filteredSources.includes(options.example)) {
|
|
77
|
+
throw new Error(`Invalid example name: ${options.example}. Please choose from: ${filteredSources.join(', ')}`);
|
|
105
78
|
}
|
|
106
|
-
if
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (!constants_1.ACCEPTED_EXAMPLE_FOLDERS.includes(options.example)) {
|
|
111
|
-
throw new Error(`Invalid example name: ${options.example}`);
|
|
112
|
-
}
|
|
113
|
-
if (!constants_1.ACCEPTED_LANGUAGES.includes(options.language)) {
|
|
114
|
-
(0, logger_1.warn)(`Invalid language: ${options.language}. Defaulting to TypeScript.`);
|
|
115
|
-
settings.language = 'typescript';
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
settings.language = options.language;
|
|
119
|
-
}
|
|
120
|
-
settings.sourceType = 'example';
|
|
121
|
-
settings.sourceName = options.example;
|
|
122
|
-
settings.name = options.name;
|
|
79
|
+
// Check if the language is valid
|
|
80
|
+
if (!constants_1.ACCEPTED_LANGUAGES.includes(options.language)) {
|
|
81
|
+
(0, logger_1.warn)(`Invalid language: ${options.language}. Defaulting to TypeScript.`);
|
|
82
|
+
settings.language = 'typescript';
|
|
123
83
|
}
|
|
124
|
-
else
|
|
125
|
-
|
|
126
|
-
console.warn(`Ignoring language option: ${options.language}. Defaulting to ${options.template}.`);
|
|
127
|
-
}
|
|
128
|
-
if (!constants_1.ACCEPTED_LANGUAGES.includes(options.template)) {
|
|
129
|
-
console.warn(`Invalid language: ${options.template}. Defaulting to TypeScript.`);
|
|
130
|
-
settings.language = 'typescript';
|
|
131
|
-
settings.sourceName = 'typescript';
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
settings.language = options.template;
|
|
135
|
-
settings.sourceName = options.template;
|
|
136
|
-
}
|
|
137
|
-
settings.sourceType = 'template';
|
|
138
|
-
settings.name = options.name;
|
|
84
|
+
else {
|
|
85
|
+
settings.language = options.language;
|
|
139
86
|
}
|
|
87
|
+
settings.example = options.example;
|
|
88
|
+
settings.name = options.name;
|
|
140
89
|
return settings;
|
|
141
90
|
}
|
|
142
91
|
catch (err) {
|
|
@@ -45,11 +45,7 @@ async function cloneFunction(localPath, settings) {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
function getCloneURL(settings) {
|
|
48
|
-
|
|
49
|
-
if (settings.sourceType === 'example') {
|
|
50
|
-
cloneURL = `${constants_1.REPO_URL}/${settings.sourceName}/${settings.language}`;
|
|
51
|
-
}
|
|
52
|
-
return cloneURL;
|
|
48
|
+
return `${constants_1.REPO_URL}/${settings.example}/${settings.language}`; // this is the default for template
|
|
53
49
|
}
|
|
54
50
|
async function touchupAppManifest(localPath, settings, renameFunctionFile) {
|
|
55
51
|
const appManifest = JSON.parse(node_fs_1.default.readFileSync(`${localPath}/${constants_1.CONTENTFUL_APP_MANIFEST}`, 'utf-8'));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GenerateFunctionSettings } from "../types";
|
|
2
2
|
export declare const generateFunction: {
|
|
3
3
|
interactive: () => Promise<void>;
|
|
4
|
-
nonInteractive: (options:
|
|
4
|
+
nonInteractive: (options: GenerateFunctionSettings) => Promise<void>;
|
|
5
5
|
};
|
|
@@ -4,11 +4,11 @@ exports.generateFunction = void 0;
|
|
|
4
4
|
const build_generate_function_settings_1 = require("./build-generate-function-settings");
|
|
5
5
|
const create_function_1 = require("./create-function");
|
|
6
6
|
const interactive = async () => {
|
|
7
|
-
const generateFunctionSettings = await (0, build_generate_function_settings_1.
|
|
7
|
+
const generateFunctionSettings = await (0, build_generate_function_settings_1.buildGenerateFunctionSettingsInteractive)();
|
|
8
8
|
return (0, create_function_1.create)(generateFunctionSettings);
|
|
9
9
|
};
|
|
10
10
|
const nonInteractive = async (options) => {
|
|
11
|
-
const generateFunctionSettings = await (0, build_generate_function_settings_1.
|
|
11
|
+
const generateFunctionSettings = await (0, build_generate_function_settings_1.buildGenerateFunctionSettingsCLI)(options);
|
|
12
12
|
return (0, create_function_1.create)(generateFunctionSettings);
|
|
13
13
|
};
|
|
14
14
|
exports.generateFunction = {
|
package/lib/types.d.ts
CHANGED
|
@@ -71,21 +71,9 @@ export interface BuildFunctionsOptions {
|
|
|
71
71
|
esbuildConfig?: string;
|
|
72
72
|
watch?: boolean;
|
|
73
73
|
}
|
|
74
|
-
export type SourceType = 'template' | 'example';
|
|
75
74
|
export type Language = 'javascript' | 'typescript';
|
|
76
|
-
export type AcceptedFunctionExamples = 'appevent-handler';
|
|
77
|
-
export type SourceName = Language | AcceptedFunctionExamples;
|
|
78
75
|
export interface GenerateFunctionSettings {
|
|
79
76
|
name: string;
|
|
80
|
-
|
|
81
|
-
sourceName: SourceName;
|
|
77
|
+
example: string;
|
|
82
78
|
language: Language;
|
|
83
79
|
}
|
|
84
|
-
export type GenerateFunctionOptions = {
|
|
85
|
-
name: string;
|
|
86
|
-
} & ({
|
|
87
|
-
example: AcceptedFunctionExamples;
|
|
88
|
-
language: Language;
|
|
89
|
-
} | {
|
|
90
|
-
template: Language;
|
|
91
|
-
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { UploadSettings } from '../types';
|
|
2
2
|
export declare function createAppBundleFromUpload(settings: UploadSettings, appUploadId: string): Promise<import("contentful-management").AppBundle | null>;
|
|
3
|
+
export declare function processCreateAppBundleError(err: any): any;
|
|
3
4
|
export declare function createAppBundleFromSettings(settings: UploadSettings): Promise<void | import("contentful-management").AppBundle>;
|
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createAppBundleFromUpload = createAppBundleFromUpload;
|
|
7
|
+
exports.processCreateAppBundleError = processCreateAppBundleError;
|
|
7
8
|
exports.createAppBundleFromSettings = createAppBundleFromSettings;
|
|
8
9
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
10
|
const ora_1 = __importDefault(require("ora"));
|
|
@@ -31,21 +32,36 @@ async function createAppBundleFromUpload(settings, appUploadId) {
|
|
|
31
32
|
});
|
|
32
33
|
}
|
|
33
34
|
catch (err) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
(0, utils_1.showCreationError)('app upload', processCreateAppBundleError(err));
|
|
36
|
+
}
|
|
37
|
+
bundleSpinner.stop();
|
|
38
|
+
return appBundle;
|
|
39
|
+
}
|
|
40
|
+
function processCreateAppBundleError(err) {
|
|
41
|
+
try {
|
|
42
|
+
const message = JSON.parse(err.message);
|
|
43
|
+
const reasons = message.details?.reasons;
|
|
44
|
+
if (message.status !== 403 || !reasons) {
|
|
45
|
+
return err.message;
|
|
46
|
+
}
|
|
47
|
+
if (message['status'] == 403 && message.details?.reasons) {
|
|
48
|
+
if (reasons.includes('Not entitled to App Functions.')) {
|
|
49
|
+
return 'Your app seems to be using App Functions, which your organization is not entitled to. Remove your app function, or upgrade your account to proceed with your app upload.';
|
|
50
|
+
}
|
|
51
|
+
else if (reasons.includes('App Functions beta not enabled.')) {
|
|
52
|
+
return 'Your app seems to be using App Functions, which your organization has not enabled in the Preview Center. In the Contentful web app, go to the Account Menu → Preview Center → App Functions to enable and proceed with your app upload.';
|
|
38
53
|
}
|
|
39
54
|
else {
|
|
40
|
-
|
|
55
|
+
return reasons;
|
|
41
56
|
}
|
|
42
57
|
}
|
|
43
|
-
|
|
44
|
-
|
|
58
|
+
else {
|
|
59
|
+
return reasons;
|
|
45
60
|
}
|
|
46
61
|
}
|
|
47
|
-
|
|
48
|
-
|
|
62
|
+
catch (e) {
|
|
63
|
+
return err.message;
|
|
64
|
+
}
|
|
49
65
|
}
|
|
50
66
|
async function createAppBundleFromSettings(settings) {
|
|
51
67
|
let appUpload = null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentful/app-scripts",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "A collection of scripts for building Contentful Apps",
|
|
5
5
|
"author": "Contentful GmbH",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"contentful-app-scripts": "lib/bin.js"
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
|
-
"prettier": "prettier **/*.
|
|
28
|
+
"prettier": "prettier **/*.ts --write --ignore-path .gitignore",
|
|
29
29
|
"lint": "eslint ./src",
|
|
30
30
|
"lint:fix": "npm run lint -- --fix",
|
|
31
31
|
"test": "ts-mocha \"./{,!(node_modules)/**/}*.test.ts\"",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"tiged": "^2.12.7",
|
|
68
68
|
"zod": "^3.24.1"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "b88a46b43fc31d1da7cf625f32a5beb03badf99e",
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@types/adm-zip": "0.5.7",
|
|
73
73
|
"@types/analytics-node": "3.1.14",
|