@appsemble/cli 0.20.27 → 0.20.29
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/README.md +4 -4
- package/index.js +0 -0
- package/package.json +5 -5
- package/__fixtures__/getBlockConfigFromTypeScript/comments/index.ts +0 -40
- package/__fixtures__/getBlockConfigFromTypeScript/comments/tsconfig.json +0 -7
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateActions/index.ts +0 -34
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateActions/tsconfig.json +0 -7
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateEventEmitters/index.ts +0 -34
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateEventEmitters/tsconfig.json +0 -7
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateEventListeners/index.ts +0 -34
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateEventListeners/tsconfig.json +0 -7
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateParameters/index.ts +0 -34
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateParameters/tsconfig.json +0 -7
- package/__fixtures__/getBlockConfigFromTypeScript/fontawesomeParameters/index.ts +0 -11
- package/__fixtures__/getBlockConfigFromTypeScript/fontawesomeParameters/tsconfig.json +0 -7
- package/__fixtures__/getBlockConfigFromTypeScript/tsError/index.ts +0 -4
- package/__fixtures__/getBlockConfigFromTypeScript/tsError/tsconfig.json +0 -8
- package/__fixtures__/getBlockConfigFromTypeScript/valid/index.ts +0 -28
- package/__fixtures__/getBlockConfigFromTypeScript/valid/tsconfig.json +0 -7
- package/__fixtures__/makePayload/with-icon/icon.svg +0 -2
- package/assets/appsemblerc.schema.json +0 -150
- package/changed/added/.gitkeep +0 -0
- package/changed/changed/.gitkeep +0 -0
- package/changed/deprecated/.gitkeep +0 -0
- package/changed/fixed/.gitkeep +0 -0
- package/changed/removed/.gitkeep +0 -0
- package/changed/security/.gitkeep +0 -0
- package/commands/app/create.js.map +0 -1
- package/commands/app/create.ts +0 -104
- package/commands/app/extract-messages.js.map +0 -1
- package/commands/app/extract-messages.ts +0 -56
- package/commands/app/index.js.map +0 -1
- package/commands/app/index.ts +0 -18
- package/commands/app/update.js.map +0 -1
- package/commands/app/update.ts +0 -111
- package/commands/asset/create.js.map +0 -1
- package/commands/asset/create.ts +0 -84
- package/commands/asset/index.js.map +0 -1
- package/commands/asset/index.ts +0 -12
- package/commands/block/build.js.map +0 -1
- package/commands/block/build.ts +0 -32
- package/commands/block/extract-messages.js.map +0 -1
- package/commands/block/extract-messages.ts +0 -41
- package/commands/block/index.js.map +0 -1
- package/commands/block/index.ts +0 -18
- package/commands/block/publish.js.map +0 -1
- package/commands/block/publish.ts +0 -58
- package/commands/cleanupResources.js.map +0 -1
- package/commands/cleanupResources.ts +0 -45
- package/commands/config/get.js.map +0 -1
- package/commands/config/get.ts +0 -27
- package/commands/config/index.js.map +0 -1
- package/commands/config/index.ts +0 -16
- package/commands/config/set.js.map +0 -1
- package/commands/config/set.ts +0 -45
- package/commands/login.js.map +0 -1
- package/commands/login.ts +0 -5
- package/commands/logout.js.map +0 -1
- package/commands/logout.ts +0 -5
- package/commands/migrate.js.map +0 -1
- package/commands/migrate.ts +0 -50
- package/commands/organization/create.js.map +0 -1
- package/commands/organization/create.ts +0 -65
- package/commands/organization/index.js.map +0 -1
- package/commands/organization/index.ts +0 -16
- package/commands/organization/update.js.map +0 -1
- package/commands/organization/update.ts +0 -65
- package/commands/resource/create.js.map +0 -1
- package/commands/resource/create.ts +0 -78
- package/commands/resource/index.js.map +0 -1
- package/commands/resource/index.ts +0 -16
- package/commands/resource/update.js.map +0 -1
- package/commands/resource/update.ts +0 -77
- package/commands/runCronJobs.js.map +0 -1
- package/commands/runCronJobs.ts +0 -45
- package/commands/start.js.map +0 -1
- package/commands/start.ts +0 -140
- package/commands/team/create.js.map +0 -1
- package/commands/team/create.ts +0 -60
- package/commands/team/delete.js.map +0 -1
- package/commands/team/delete.ts +0 -54
- package/commands/team/index.js.map +0 -1
- package/commands/team/index.ts +0 -20
- package/commands/team/member/delete.js.map +0 -1
- package/commands/team/member/delete.ts +0 -61
- package/commands/team/member/index.js.map +0 -1
- package/commands/team/member/index.ts +0 -18
- package/commands/team/member/invite.js.map +0 -1
- package/commands/team/member/invite.ts +0 -61
- package/commands/team/member/update.js.map +0 -1
- package/commands/team/member/update.ts +0 -70
- package/commands/team/update.js.map +0 -1
- package/commands/team/update.ts +0 -60
- package/index.js.map +0 -1
- package/index.ts +0 -74
- package/jest.config.js +0 -3
- package/jest.setup.js.map +0 -1
- package/jest.setup.ts +0 -4
- package/lib/__snapshots__/getBlockConfigFromTypeScript.test.ts.snap +0 -4241
- package/lib/app.js.map +0 -1
- package/lib/app.ts +0 -795
- package/lib/asset.js.map +0 -1
- package/lib/asset.ts +0 -43
- package/lib/authentication.js.map +0 -1
- package/lib/authentication.ts +0 -194
- package/lib/block.js.map +0 -1
- package/lib/block.test.js.map +0 -1
- package/lib/block.test.ts +0 -103
- package/lib/block.ts +0 -384
- package/lib/coercers.js.map +0 -1
- package/lib/coercers.test.js.map +0 -1
- package/lib/coercers.test.ts +0 -27
- package/lib/coercers.ts +0 -58
- package/lib/getBlockConfigFromTypeScript.js.map +0 -1
- package/lib/getBlockConfigFromTypeScript.test.js.map +0 -1
- package/lib/getBlockConfigFromTypeScript.test.ts +0 -282
- package/lib/getBlockConfigFromTypeScript.ts +0 -356
- package/lib/initAxios.js.map +0 -1
- package/lib/initAxios.ts +0 -16
- package/lib/loadWebpackConfig.js.map +0 -1
- package/lib/loadWebpackConfig.ts +0 -52
- package/lib/organization.js.map +0 -1
- package/lib/organization.ts +0 -105
- package/lib/output.js.map +0 -1
- package/lib/output.ts +0 -19
- package/lib/processCss.js.map +0 -1
- package/lib/processCss.ts +0 -24
- package/lib/resource.js.map +0 -1
- package/lib/resource.ts +0 -128
- package/lib/serverImport.js.map +0 -1
- package/lib/serverImport.ts +0 -42
- package/lib/team.js.map +0 -1
- package/lib/team.ts +0 -152
- package/tsconfig.json +0 -9
- package/types.js.map +0 -1
- package/types.ts +0 -110
package/lib/block.ts
DELETED
|
@@ -1,384 +0,0 @@
|
|
|
1
|
-
import { createReadStream, existsSync } from 'node:fs';
|
|
2
|
-
import { mkdir, readdir, readFile, rm } from 'node:fs/promises';
|
|
3
|
-
import { basename, join, relative, resolve as resolvePath } from 'node:path';
|
|
4
|
-
import { inspect } from 'node:util';
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
AppsembleError,
|
|
8
|
-
getWorkspaces,
|
|
9
|
-
logger,
|
|
10
|
-
opendirSafe,
|
|
11
|
-
readData,
|
|
12
|
-
writeData,
|
|
13
|
-
} from '@appsemble/node-utils';
|
|
14
|
-
import { BlockConfig } from '@appsemble/types';
|
|
15
|
-
import { compareStrings } from '@appsemble/utils';
|
|
16
|
-
import axios from 'axios';
|
|
17
|
-
import chalk from 'chalk';
|
|
18
|
-
import { cosmiconfig } from 'cosmiconfig';
|
|
19
|
-
import FormData from 'form-data';
|
|
20
|
-
import { PackageJson } from 'type-fest';
|
|
21
|
-
import webpack, { Stats } from 'webpack';
|
|
22
|
-
|
|
23
|
-
import { getBlockConfigFromTypeScript } from './getBlockConfigFromTypeScript.js';
|
|
24
|
-
import { loadWebpackConfig } from './loadWebpackConfig.js';
|
|
25
|
-
import { processCss } from './processCss.js';
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Builds a block using Webpack.
|
|
29
|
-
*
|
|
30
|
-
* @param config The config of the block to build.
|
|
31
|
-
* @returns The Webpack stats object.
|
|
32
|
-
*/
|
|
33
|
-
export async function buildBlock(config: BlockConfig): Promise<Stats> {
|
|
34
|
-
const conf = await loadWebpackConfig(config, 'production', join(config.dir, config.output));
|
|
35
|
-
|
|
36
|
-
if (existsSync(conf.output.path)) {
|
|
37
|
-
logger.warn(`Removing ${conf.output.path}`);
|
|
38
|
-
await rm(conf.output.path, { force: true, recursive: true });
|
|
39
|
-
}
|
|
40
|
-
logger.info(`Building ${config.name}@${config.version} 🔨`);
|
|
41
|
-
|
|
42
|
-
const compiler = webpack(conf);
|
|
43
|
-
return new Promise((resolve, reject) => {
|
|
44
|
-
compiler.run((err, stats) => {
|
|
45
|
-
if (err) {
|
|
46
|
-
reject(err);
|
|
47
|
-
} else if (stats.hasErrors()) {
|
|
48
|
-
reject(new AppsembleError(stats.toString({ colors: true })));
|
|
49
|
-
} else {
|
|
50
|
-
logger.verbose(stats.toString({ colors: true }));
|
|
51
|
-
resolve(stats);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Get the block configuration from a block directory.
|
|
59
|
-
*
|
|
60
|
-
* @param dir The directory in which to search for the configuration file.
|
|
61
|
-
* @returns The block configuration.
|
|
62
|
-
*/
|
|
63
|
-
export async function getBlockConfig(dir: string): Promise<BlockConfig> {
|
|
64
|
-
const explorer = cosmiconfig('appsemble', { stopDir: dir });
|
|
65
|
-
const found = await explorer.search(dir);
|
|
66
|
-
if (!found) {
|
|
67
|
-
throw new AppsembleError(`No Appsemble configuration file found searching ${dir}`);
|
|
68
|
-
}
|
|
69
|
-
const { config, filepath } = found;
|
|
70
|
-
logger.info(`Found configuration file: ${filepath}`);
|
|
71
|
-
const [pkg] = await readData<PackageJson>(join(dir, 'package.json'));
|
|
72
|
-
if (!pkg.private) {
|
|
73
|
-
logger.warn(
|
|
74
|
-
`It is ${chalk.underline.yellow('highly recommended')} to set “${chalk.green(
|
|
75
|
-
'"private"',
|
|
76
|
-
)}: ${chalk.cyan('true')}” in package.json`,
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
let longDescription: string;
|
|
80
|
-
if (existsSync(join(dir, 'README.md'))) {
|
|
81
|
-
longDescription = await readFile(join(dir, 'README.md'), 'utf8');
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const result = {
|
|
85
|
-
description: pkg.description,
|
|
86
|
-
longDescription,
|
|
87
|
-
name: pkg.name,
|
|
88
|
-
version: pkg.version,
|
|
89
|
-
webpack: undefined,
|
|
90
|
-
...config,
|
|
91
|
-
dir,
|
|
92
|
-
};
|
|
93
|
-
logger.verbose(`Resolved block configuration: ${inspect(result, { colors: true })}`);
|
|
94
|
-
return result;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Discover Appsemble blocks based on workspaces in a monorepo.
|
|
99
|
-
*
|
|
100
|
-
* Both Lerna and Yarn workspaces are supported.
|
|
101
|
-
*
|
|
102
|
-
* @param root The project root in which to find workspaces.
|
|
103
|
-
* @returns Discovered Appsemble blocks.
|
|
104
|
-
*/
|
|
105
|
-
export async function discoverBlocks(root: string): Promise<BlockConfig[]> {
|
|
106
|
-
const dirs = await getWorkspaces(root);
|
|
107
|
-
const manifests = await Promise.all(
|
|
108
|
-
dirs
|
|
109
|
-
.concat(root)
|
|
110
|
-
.map((path) => getBlockConfig(path))
|
|
111
|
-
// Ignore non-block workspaces.
|
|
112
|
-
.map((p) => p.catch(() => null)),
|
|
113
|
-
);
|
|
114
|
-
return manifests.filter(Boolean);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Configure the payload for a new block version upload.
|
|
119
|
-
*
|
|
120
|
-
* @param config The block configuration
|
|
121
|
-
* @returns The payload that should be sent to the version endpoint.
|
|
122
|
-
*/
|
|
123
|
-
export async function makePayload(config: BlockConfig): Promise<FormData> {
|
|
124
|
-
const { dir, output } = config;
|
|
125
|
-
const distPath = resolvePath(dir, output);
|
|
126
|
-
const form = new FormData();
|
|
127
|
-
const { description, layout, longDescription, name, version, visibility } = config;
|
|
128
|
-
const { actions, events, messages, parameters } = getBlockConfigFromTypeScript(config);
|
|
129
|
-
const files = await readdir(dir);
|
|
130
|
-
const icon = files.find((entry) => entry.match(/^icon\.(png|svg)$/));
|
|
131
|
-
|
|
132
|
-
function append(field: string, value: any): void {
|
|
133
|
-
if (value) {
|
|
134
|
-
const serialized = typeof value === 'string' ? value : JSON.stringify(value);
|
|
135
|
-
logger.verbose(`Using ${field}: ${inspect(value, { colors: true, depth: 20 })}`);
|
|
136
|
-
form.append(field, serialized);
|
|
137
|
-
} else {
|
|
138
|
-
logger.silly(`Skipping parameter ${field}`);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
append('actions', actions);
|
|
143
|
-
append('description', description);
|
|
144
|
-
append('longDescription', longDescription);
|
|
145
|
-
append('events', events);
|
|
146
|
-
append('layout', layout);
|
|
147
|
-
if (visibility) {
|
|
148
|
-
append('visibility', visibility);
|
|
149
|
-
}
|
|
150
|
-
append('name', name);
|
|
151
|
-
append('parameters', parameters);
|
|
152
|
-
append('version', version);
|
|
153
|
-
|
|
154
|
-
if (icon) {
|
|
155
|
-
const iconPath = join(dir, icon);
|
|
156
|
-
logger.info(`Using icon: ${iconPath}`);
|
|
157
|
-
form.append('icon', createReadStream(iconPath));
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (messages) {
|
|
161
|
-
if (!files.includes('i18n')) {
|
|
162
|
-
throw new AppsembleError(
|
|
163
|
-
'This block has messages defined, but the message files could not be found. Try running extract-messages',
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
const messageKeys = Object.keys(messages).sort(compareStrings);
|
|
168
|
-
const messagesResult: Record<string, Record<string, string>> = {};
|
|
169
|
-
const messagesPath = join(dir, 'i18n');
|
|
170
|
-
|
|
171
|
-
const translations = (await readdir(messagesPath)).map((language) => language.toLowerCase());
|
|
172
|
-
if (!translations.includes('en.json')) {
|
|
173
|
-
throw new AppsembleError('Could not find ‘en.json’. Try running extract-messages');
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
const duplicates = translations.filter(
|
|
177
|
-
(language, index) => translations.indexOf(language) !== index,
|
|
178
|
-
);
|
|
179
|
-
|
|
180
|
-
if (duplicates.length) {
|
|
181
|
-
throw new AppsembleError(`Found duplicate language codes: ‘${duplicates.join('’, ')}`);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
for (const languageFile of translations.filter((t) => t.endsWith('.json'))) {
|
|
185
|
-
const language = basename(languageFile, '.json');
|
|
186
|
-
const languagePath = join(messagesPath, languageFile);
|
|
187
|
-
const [m] = await readData<Record<string, string>>(languagePath);
|
|
188
|
-
const languageKeys = Object.keys(m).sort(compareStrings);
|
|
189
|
-
|
|
190
|
-
if (
|
|
191
|
-
languageKeys.length !== messageKeys.length ||
|
|
192
|
-
languageKeys.some((key) => !messageKeys.includes(key))
|
|
193
|
-
) {
|
|
194
|
-
throw new AppsembleError(
|
|
195
|
-
`‘${languagePath}’ contains mismatching message keys. Try running extract-messages`,
|
|
196
|
-
);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
logger.info(`Including ${language} translations from ‘${languagePath}’`);
|
|
200
|
-
messagesResult[language] = m;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
form.append('messages', JSON.stringify(messagesResult));
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
if (files.includes('examples')) {
|
|
207
|
-
await opendirSafe(
|
|
208
|
-
join(dir, 'examples'),
|
|
209
|
-
async (file, stat) => {
|
|
210
|
-
if (!stat.isFile() || !file.endsWith('.yaml')) {
|
|
211
|
-
throw new AppsembleError(`Expected ${file} to be a YAML file`);
|
|
212
|
-
}
|
|
213
|
-
logger.info(`Adding example file ${file}`);
|
|
214
|
-
form.append('examples', await readFile(file, 'utf8'));
|
|
215
|
-
},
|
|
216
|
-
{ allowMissing: true },
|
|
217
|
-
);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
await opendirSafe(
|
|
221
|
-
distPath,
|
|
222
|
-
(fullpath, stat) => {
|
|
223
|
-
if (!stat.isFile()) {
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
const relativePath = relative(distPath, fullpath);
|
|
227
|
-
const realPath = relative(process.cwd(), fullpath);
|
|
228
|
-
logger.info(`Adding file: “${realPath}” as “${relativePath}”`);
|
|
229
|
-
form.append('files', createReadStream(fullpath), {
|
|
230
|
-
filename: encodeURIComponent(relativePath),
|
|
231
|
-
});
|
|
232
|
-
},
|
|
233
|
-
{ recursive: true },
|
|
234
|
-
);
|
|
235
|
-
|
|
236
|
-
return form;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Publish a new block version.
|
|
241
|
-
*
|
|
242
|
-
* @param config The block configuration
|
|
243
|
-
* @param ignoreConflict Prevent the command from crashing when a conflict has been detected.
|
|
244
|
-
*/
|
|
245
|
-
export async function publishBlock(config: BlockConfig, ignoreConflict: boolean): Promise<void> {
|
|
246
|
-
logger.info(`Publishing ${config.name}@${config.version}…`);
|
|
247
|
-
const form = await makePayload(config);
|
|
248
|
-
|
|
249
|
-
try {
|
|
250
|
-
await axios.post('/api/blocks', form);
|
|
251
|
-
logger.info(`Successfully published ${config.name}@${config.version} 🎉`);
|
|
252
|
-
} catch (err: unknown) {
|
|
253
|
-
if (ignoreConflict && axios.isAxiosError(err) && err.response.status === 409) {
|
|
254
|
-
logger.warn(`${config.name}@${config.version} was already published.`);
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
throw err;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Uploads an app block theme
|
|
263
|
-
*
|
|
264
|
-
* @param filePath The path of the index.css file
|
|
265
|
-
* @param organization The ID of the organization the block belongs to.
|
|
266
|
-
* @param appId The ID of the app to upload the theme for.
|
|
267
|
-
* @param block The name of the block.
|
|
268
|
-
* @param remote The HTTP origin to upload the theme to.
|
|
269
|
-
* @param force Force update the theme if the app is locked.
|
|
270
|
-
*/
|
|
271
|
-
export async function uploadAppBlockTheme(
|
|
272
|
-
filePath: string,
|
|
273
|
-
organization: string,
|
|
274
|
-
appId: number,
|
|
275
|
-
block: string,
|
|
276
|
-
remote: string,
|
|
277
|
-
force: boolean,
|
|
278
|
-
): Promise<void> {
|
|
279
|
-
logger.info(`Upload ${organization}/${block} stylesheet for app ${appId}`);
|
|
280
|
-
|
|
281
|
-
const style = await processCss(filePath);
|
|
282
|
-
|
|
283
|
-
await axios.post(
|
|
284
|
-
`/api/apps/${appId}/style/block/${organization}/${block}`,
|
|
285
|
-
{ force, style },
|
|
286
|
-
{ baseURL: remote },
|
|
287
|
-
);
|
|
288
|
-
|
|
289
|
-
logger.info(`Upload of ${organization}/${block} stylesheet successful! 🎉`);
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Traverses the directory at a given path for app block themes and uploads them.
|
|
294
|
-
*
|
|
295
|
-
* @param path The path of the app.
|
|
296
|
-
* @param appId The ID of the app.
|
|
297
|
-
* @param remote The HTTP origin to upload the themes to.
|
|
298
|
-
* @param force Force update the theme if the app is locked.
|
|
299
|
-
*/
|
|
300
|
-
export async function traverseBlockThemes(
|
|
301
|
-
path: string,
|
|
302
|
-
appId: number,
|
|
303
|
-
remote: string,
|
|
304
|
-
force: boolean,
|
|
305
|
-
): Promise<void> {
|
|
306
|
-
logger.verbose(`Searching themes in ${path}`);
|
|
307
|
-
await opendirSafe(
|
|
308
|
-
join(path, 'theme'),
|
|
309
|
-
async (orgDir, orgStats) => {
|
|
310
|
-
const organizationId = orgStats.name.toLowerCase();
|
|
311
|
-
if (organizationId === 'core' || organizationId === 'shared') {
|
|
312
|
-
return;
|
|
313
|
-
}
|
|
314
|
-
if (!organizationId.startsWith('@')) {
|
|
315
|
-
logger.warn('Block theme directories should be named “@organizationId/blockId”');
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
if (!orgStats.isDirectory()) {
|
|
319
|
-
logger.warn(`Expected ${orgDir} to be a directory`);
|
|
320
|
-
return;
|
|
321
|
-
}
|
|
322
|
-
await opendirSafe(orgDir, async (blockThemeDir, blockThemeStats) => {
|
|
323
|
-
if (!blockThemeStats.isDirectory()) {
|
|
324
|
-
logger.warn(`Expected ${orgDir} to be a directory`);
|
|
325
|
-
return;
|
|
326
|
-
}
|
|
327
|
-
await uploadAppBlockTheme(
|
|
328
|
-
join(blockThemeDir, 'index.css'),
|
|
329
|
-
organizationId,
|
|
330
|
-
appId,
|
|
331
|
-
blockThemeStats.name.toLowerCase(),
|
|
332
|
-
remote,
|
|
333
|
-
force,
|
|
334
|
-
);
|
|
335
|
-
});
|
|
336
|
-
},
|
|
337
|
-
{ allowMissing: true },
|
|
338
|
-
);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
export async function processBlockMessages(
|
|
342
|
-
config: BlockConfig,
|
|
343
|
-
languages: string[],
|
|
344
|
-
): Promise<void> {
|
|
345
|
-
const path = join(config.dir, 'i18n');
|
|
346
|
-
await mkdir(path, { recursive: true });
|
|
347
|
-
const dir = await readdir(path);
|
|
348
|
-
const { messages } = getBlockConfigFromTypeScript(config);
|
|
349
|
-
|
|
350
|
-
if (!messages) {
|
|
351
|
-
logger.warn(`Block ${config.name} has no messages.`);
|
|
352
|
-
return;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
const keys = Object.keys(messages).sort(compareStrings);
|
|
356
|
-
const base = Object.fromEntries(keys.map((key) => [key, '']));
|
|
357
|
-
|
|
358
|
-
const existingLanguages = dir
|
|
359
|
-
.filter((filename) => filename.endsWith('.json'))
|
|
360
|
-
.map((filename) => basename(filename, '.json'));
|
|
361
|
-
for (const language of new Set([...languages, ...existingLanguages])) {
|
|
362
|
-
const existingMessages = { ...base };
|
|
363
|
-
const name = `${language}.json`;
|
|
364
|
-
const langPath = join(path, name);
|
|
365
|
-
|
|
366
|
-
if (dir.includes(name)) {
|
|
367
|
-
const [m] = await readData<Record<string, string>>(langPath);
|
|
368
|
-
Object.assign(existingMessages, m);
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
const extraKeys = Object.keys(existingMessages).filter((key) => !keys.includes(key));
|
|
372
|
-
if (extraKeys.length) {
|
|
373
|
-
logger.info(`Found ${extraKeys.length} keys too many. Removing: ${extraKeys.join(', ')}`);
|
|
374
|
-
for (const key of extraKeys) {
|
|
375
|
-
delete existingMessages[key];
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
await writeData(langPath, existingMessages);
|
|
380
|
-
logger.info(`Wrote to file ‘${langPath}’`);
|
|
381
|
-
}
|
|
382
|
-
logger.info(`Finished extracting messages for ${config.name}.`);
|
|
383
|
-
logger.info('');
|
|
384
|
-
}
|
package/lib/coercers.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coercers.js","sourceRoot":"","sources":["coercers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAc,MAAM,SAAS,CAAC;AAEvD,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC7B,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACpC,sBAAsB;YACtB,GAAG,GAAG,UAAU,GAAG,EAAE,CAAC;SACvB;aAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC9C,4BAA4B;YAC5B,GAAG,GAAG,UAAU,GAAG,EAAE,CAAC;SACvB;aAAM;YACL,sBAAsB;YACtB,GAAG,GAAG,WAAW,GAAG,EAAE,CAAC;SACxB;KACF;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,uDAAuD;AACvD;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,OAAO;KACR;IAED,kDAAkD;IAClD,6CAA6C;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,KAAK,CAAC;KACd;IAED,IAAI,KAAK,KAAK,GAAG,EAAE;QACjB,OAAO,OAAO,CAAC,KAAK,CAAC;KACtB;IAED,OAAO,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
package/lib/coercers.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coercers.test.js","sourceRoot":"","sources":["coercers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,KAAK,GAAuB;QAChC,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;QACjD,CAAC,yBAAyB,EAAE,uBAAuB,CAAC;QACpD,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;QACnD,CAAC,2BAA2B,EAAE,wBAAwB,CAAC;QACvD,CAAC,4BAA4B,EAAE,6BAA6B,CAAC;QAC7D,CAAC,gCAAgC,EAAE,wBAAwB,CAAC;QAC5D,CAAC,mCAAmC,EAAE,wBAAwB,CAAC;QAC/D,CAAC,4BAA4B,EAAE,wBAAwB,CAAC;QACxD,CAAC,eAAe,EAAE,wBAAwB,CAAC;QAC3C,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;QAC3C,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;QAC3C,CAAC,eAAe,EAAE,uBAAuB,CAAC;QAC1C,CAAC,WAAW,EAAE,mBAAmB,CAAC;QAClC,CAAC,WAAW,EAAE,mBAAmB,CAAC;QAClC,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;QAC5C,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;KAC7C,CAAC;IAEF,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/lib/coercers.test.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { coerceRemote } from './coercers.js';
|
|
2
|
-
|
|
3
|
-
describe('coerceRemote', () => {
|
|
4
|
-
const tests: [string, string][] = [
|
|
5
|
-
['http://appsemble.app', 'http://appsemble.app/'],
|
|
6
|
-
['http://appsemble.app:80', 'http://appsemble.app/'],
|
|
7
|
-
['https://appsemble.app', 'https://appsemble.app/'],
|
|
8
|
-
['https://appsemble.app:443', 'https://appsemble.app/'],
|
|
9
|
-
['https://appsemble.app:1337', 'https://appsemble.app:1337/'],
|
|
10
|
-
['https://appsemble.app/pathname', 'https://appsemble.app/'],
|
|
11
|
-
['https://appsemble.app?query=param', 'https://appsemble.app/'],
|
|
12
|
-
['https://appsemble.app#hash', 'https://appsemble.app/'],
|
|
13
|
-
['appsemble.app', 'https://appsemble.app/'],
|
|
14
|
-
['https://localhost', 'https://localhost/'],
|
|
15
|
-
['https://127.0.0.1', 'https://127.0.0.1/'],
|
|
16
|
-
['foo.localhost', 'http://foo.localhost/'],
|
|
17
|
-
['localhost', 'http://localhost/'],
|
|
18
|
-
['127.0.0.1', 'http://127.0.0.1/'],
|
|
19
|
-
['localhost:1337', 'http://localhost:1337/'],
|
|
20
|
-
['127.0.0.1:1337', 'http://127.0.0.1:1337/'],
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
it.each(tests)('should convert %s to %s', (input, expected) => {
|
|
24
|
-
const output = coerceRemote(input);
|
|
25
|
-
expect(output).toBe(expected);
|
|
26
|
-
});
|
|
27
|
-
});
|
package/lib/coercers.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { createReadStream, ReadStream } from 'node:fs';
|
|
2
|
-
|
|
3
|
-
import normalizePath from 'normalize-path';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Convert a remote to a valid URL.
|
|
7
|
-
*
|
|
8
|
-
* Ip addresses and localhost use the http://` protocol by default. Others use the `https://`
|
|
9
|
-
* protocol by default. The path, search parameters, and hash are stripped.
|
|
10
|
-
*
|
|
11
|
-
* @param value The raw remote as specified by the CLI user.
|
|
12
|
-
* @returns The normalized URL.
|
|
13
|
-
*/
|
|
14
|
-
export function coerceRemote(value: string): string {
|
|
15
|
-
let url = value;
|
|
16
|
-
if (!/^https?:\/\//.test(url)) {
|
|
17
|
-
if (/^(\d+\.?){4}(\/|$|:)/.test(url)) {
|
|
18
|
-
// It’s an IP address.
|
|
19
|
-
url = `http://${url}`;
|
|
20
|
-
} else if (/(\.|^)localhost(\/|$|:)/.test(url)) {
|
|
21
|
-
// It’s a localhost address.
|
|
22
|
-
url = `http://${url}`;
|
|
23
|
-
} else {
|
|
24
|
-
// It's a live remote.
|
|
25
|
-
url = `https://${url}`;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
const remote = new URL(url);
|
|
29
|
-
remote.hash = '';
|
|
30
|
-
remote.search = '';
|
|
31
|
-
remote.pathname = '';
|
|
32
|
-
return String(remote);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// eslint-disable-next-line jsdoc/require-returns-check
|
|
36
|
-
/**
|
|
37
|
-
* Get a stream based on the filepath.
|
|
38
|
-
*
|
|
39
|
-
* @param value The filepath of the file to read.
|
|
40
|
-
* @returns A stream of the file.
|
|
41
|
-
*/
|
|
42
|
-
export function coerceFile(value: string): NodeJS.ReadStream | ReadStream {
|
|
43
|
-
if (value == null) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Prevent trying to read the file multiple times.
|
|
48
|
-
// https://github.com/yargs/yargs/issues/1802
|
|
49
|
-
if (typeof value === 'object') {
|
|
50
|
-
return value;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (value === '-') {
|
|
54
|
-
return process.stdin;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return createReadStream(normalizePath(value));
|
|
58
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getBlockConfigFromTypeScript.js","sourceRoot":"","sources":["getBlockConfigFromTypeScript.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getBlockConfigFromTypeScript.test.js","sourceRoot":"","sources":["getBlockConfigFromTypeScript.test.ts"],"names":[],"mappings":"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"}
|