@cmmn/tools 2.2.2 → 3.0.0-alpha-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/.swcrc +20 -0
- package/dist/esm/bin.js +9 -0
- package/dist/esm/bin.js.map +1 -0
- package/dist/esm/bundlers/createBundler.js +9 -0
- package/dist/esm/bundlers/createBundler.js.map +1 -0
- package/dist/esm/bundlers/plugins/minify.js +34 -0
- package/dist/esm/bundlers/plugins/minify.js.map +1 -0
- package/dist/esm/bundlers/plugins/wasm.js +43 -0
- package/dist/esm/bundlers/plugins/wasm.js.map +1 -0
- package/dist/esm/bundlers/rolldown-bundler.js +153 -0
- package/dist/esm/bundlers/rolldown-bundler.js.map +1 -0
- package/dist/esm/bundlers/types.js +3 -0
- package/dist/esm/bundlers/types.js.map +1 -0
- package/dist/esm/bundlers/vite.builder.js +117 -0
- package/dist/esm/bundlers/vite.builder.js.map +1 -0
- package/dist/esm/bundlers/vite.bundler.js +56 -0
- package/dist/esm/bundlers/vite.bundler.js.map +1 -0
- package/dist/esm/commands/bundle.js +100 -0
- package/dist/esm/commands/bundle.js.map +1 -0
- package/dist/esm/commands/cert.js +26 -0
- package/dist/esm/commands/cert.js.map +1 -0
- package/dist/esm/commands/ci.js +14 -0
- package/dist/esm/commands/ci.js.map +1 -0
- package/dist/esm/commands/clean.js +18 -0
- package/dist/esm/commands/clean.js.map +1 -0
- package/dist/esm/commands/compile.js +60 -0
- package/dist/esm/commands/compile.js.map +1 -0
- package/dist/esm/commands/deploy.js +61 -0
- package/dist/esm/commands/deploy.js.map +1 -0
- package/dist/esm/commands/dev.js +36 -0
- package/dist/esm/commands/dev.js.map +1 -0
- package/dist/esm/commands/format.js +44 -0
- package/dist/esm/commands/format.js.map +1 -0
- package/dist/esm/commands/gen.js +36 -0
- package/dist/esm/commands/gen.js.map +1 -0
- package/dist/esm/commands/host.js +21 -0
- package/dist/esm/commands/host.js.map +1 -0
- package/dist/esm/commands/index.js +12 -0
- package/dist/esm/commands/index.js.map +1 -0
- package/dist/esm/commands/lint.js +45 -0
- package/dist/esm/commands/lint.js.map +1 -0
- package/dist/esm/commands/nginx.js +62 -0
- package/dist/esm/commands/nginx.js.map +1 -0
- package/dist/esm/commands/publish.js +37 -0
- package/dist/esm/commands/publish.js.map +1 -0
- package/dist/esm/commands/typings.js +66 -0
- package/dist/esm/commands/typings.js.map +1 -0
- package/dist/esm/commands/version.js +34 -0
- package/dist/esm/commands/version.js.map +1 -0
- package/dist/esm/dev-server/asset-collection.js +18 -0
- package/dist/esm/dev-server/asset-collection.js.map +1 -0
- package/dist/esm/dev-server/bundle.json.builder.js +47 -0
- package/dist/esm/dev-server/bundle.json.builder.js.map +1 -0
- package/dist/esm/dev-server/dependencyServer.js +96 -0
- package/dist/esm/dev-server/dependencyServer.js.map +1 -0
- package/dist/esm/dev-server/dev-server.js +49 -0
- package/dist/esm/dev-server/dev-server.js.map +1 -0
- package/dist/esm/dev-server/plugins/minify.js +34 -0
- package/dist/esm/dev-server/plugins/minify.js.map +1 -0
- package/dist/esm/dev-server/plugins/wasm.js +30 -0
- package/dist/esm/dev-server/plugins/wasm.js.map +1 -0
- package/dist/esm/dev-server/resolver.js +55 -0
- package/dist/esm/dev-server/resolver.js.map +1 -0
- package/dist/esm/dev-server/rolldown-dependency-builder.js +150 -0
- package/dist/esm/dev-server/rolldown-dependency-builder.js.map +1 -0
- package/dist/esm/dev-server/target-runnner.js +72 -0
- package/dist/esm/dev-server/target-runnner.js.map +1 -0
- package/dist/esm/dev-server/target-web-server.js +78 -0
- package/dist/esm/dev-server/target-web-server.js.map +1 -0
- package/dist/esm/dev-server/targetServer.js +29 -0
- package/dist/esm/dev-server/targetServer.js.map +1 -0
- package/dist/esm/dev-server/vite.builder.js +183 -0
- package/dist/esm/dev-server/vite.builder.js.map +1 -0
- package/dist/esm/dev-server/wasm-resolver.js +25 -0
- package/dist/esm/dev-server/wasm-resolver.js.map +1 -0
- package/dist/esm/helpers/fastify-compress.js +26 -0
- package/dist/esm/helpers/fastify-compress.js.map +1 -0
- package/dist/esm/helpers/flags.js +22 -0
- package/dist/esm/helpers/flags.js.map +1 -0
- package/dist/esm/helpers/getProjects.js +49 -0
- package/dist/esm/helpers/getProjects.js.map +1 -0
- package/dist/esm/helpers/getTSConfig.js +32 -0
- package/dist/esm/helpers/getTSConfig.js.map +1 -0
- package/dist/esm/helpers/target.js +230 -0
- package/dist/esm/helpers/target.js.map +1 -0
- package/dist/esm/helpers/terminal.js +117 -0
- package/dist/esm/helpers/terminal.js.map +1 -0
- package/dist/esm/helpers/ts-resolve-plugin.js +139 -0
- package/dist/esm/helpers/ts-resolve-plugin.js.map +1 -0
- package/dist/esm/helpers/watcher.js +35 -0
- package/dist/esm/helpers/watcher.js.map +1 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/model/bundle.js +75 -0
- package/dist/esm/model/bundle.js.map +1 -0
- package/dist/esm/model/flags.js +27 -0
- package/dist/esm/model/flags.js.map +1 -0
- package/dist/esm/model/monorepo.js +74 -0
- package/dist/esm/model/monorepo.js.map +1 -0
- package/dist/esm/model/pack.js +131 -0
- package/dist/esm/model/pack.js.map +1 -0
- package/dist/esm/model/resolver.js +100 -0
- package/dist/esm/model/resolver.js.map +1 -0
- package/dist/esm/model/target.js +111 -0
- package/dist/esm/model/target.js.map +1 -0
- package/dist/esm/servers/bundle-server.js +20 -0
- package/dist/esm/servers/bundle-server.js.map +1 -0
- package/dist/esm/servers/dev-server.js +70 -0
- package/dist/esm/servers/dev-server.js.map +1 -0
- package/dist/esm/servers/pack-server.js +20 -0
- package/dist/esm/servers/pack-server.js.map +1 -0
- package/dist/esm/servers/target-runnner.js +80 -0
- package/dist/esm/servers/target-runnner.js.map +1 -0
- package/dist/esm/servers/vite-dev-server.js +61 -0
- package/dist/esm/servers/vite-dev-server.js.map +1 -0
- package/dist/esm/specs/dependency-builder-specs.js +164 -0
- package/dist/esm/specs/dependency-builder-specs.js.map +1 -0
- package/dist/esm/specs/dev-server.specs.js +73 -0
- package/dist/esm/specs/dev-server.specs.js.map +1 -0
- package/dist/esm/specs/monorepo.specs.js +35 -0
- package/dist/esm/specs/monorepo.specs.js.map +1 -0
- package/dist/esm/specs/resolver.specs.js +57 -0
- package/dist/esm/specs/resolver.specs.js.map +1 -0
- package/dist/esm/specs/rolldown.specs.js +278 -0
- package/dist/esm/specs/rolldown.specs.js.map +1 -0
- package/dist/esm/specs/target-specs.js +108 -0
- package/dist/esm/specs/target-specs.js.map +1 -0
- package/dist/esm/specs/vite-bundler.specs.js +75 -0
- package/dist/esm/specs/vite-bundler.specs.js.map +1 -0
- package/dist/esm/test/test.js +30 -0
- package/dist/esm/test/test.js.map +1 -0
- package/dist/ts.buildinfo +1 -0
- package/dist/typings/bin.d.ts +2 -0
- package/dist/typings/bundlers/plugins/minify.d.ts +6 -0
- package/dist/typings/bundlers/plugins/wasm.d.ts +5 -0
- package/dist/typings/bundlers/rolldown-bundler.d.ts +18 -0
- package/dist/typings/bundlers/types.d.ts +4 -0
- package/dist/typings/bundlers/vite.builder.d.ts +12 -0
- package/dist/typings/bundlers/vite.bundler.d.ts +9 -0
- package/dist/typings/commands/bundle.d.ts +2 -0
- package/dist/typings/commands/cert.d.ts +1 -0
- package/dist/typings/commands/clean.d.ts +2 -0
- package/dist/typings/commands/compile.d.ts +2 -0
- package/dist/typings/commands/dev.d.ts +2 -0
- package/dist/typings/commands/format.d.ts +5 -0
- package/dist/typings/commands/gen.d.ts +1 -0
- package/dist/typings/commands/host.d.ts +1 -0
- package/dist/typings/commands/index.d.ts +10 -0
- package/dist/typings/commands/lint.d.ts +5 -0
- package/dist/typings/commands/nginx.d.ts +6 -0
- package/dist/typings/commands/publish.d.ts +2 -0
- package/dist/typings/commands/typings.d.ts +4 -0
- package/dist/typings/commands/version.d.ts +1 -0
- package/dist/typings/helpers/fastify-compress.d.ts +6 -0
- package/dist/typings/helpers/getTSConfig.d.ts +11 -0
- package/dist/typings/helpers/terminal.d.ts +22 -0
- package/dist/typings/helpers/watcher.d.ts +7 -0
- package/dist/typings/index.d.ts +4 -0
- package/dist/typings/model/bundle.d.ts +34 -0
- package/dist/typings/model/flags.d.ts +15 -0
- package/dist/typings/model/monorepo.d.ts +18 -0
- package/dist/typings/model/pack.d.ts +45 -0
- package/dist/typings/model/resolver.d.ts +38 -0
- package/dist/typings/model/target.d.ts +27 -0
- package/dist/typings/servers/bundle-server.d.ts +10 -0
- package/dist/typings/servers/dev-server.d.ts +16 -0
- package/dist/typings/servers/pack-server.d.ts +9 -0
- package/dist/typings/servers/target-runnner.d.ts +13 -0
- package/dist/typings/servers/vite-dev-server.d.ts +18 -0
- package/dist/typings/specs/dev-server.specs.d.ts +1 -0
- package/dist/typings/specs/monorepo.specs.d.ts +1 -0
- package/dist/typings/specs/resolver.specs.d.ts +1 -0
- package/dist/typings/specs/rolldown.specs.d.ts +1 -0
- package/dist/typings/specs/target-specs.d.ts +1 -0
- package/dist/typings/specs/vite-bundler.specs.d.ts +1 -0
- package/dist/typings/test/test.d.ts +16 -0
- package/{compile → helpers}/tsconfig.json +12 -9
- package/node/hooks-dev.js +72 -0
- package/node/register-dev.js +3 -0
- package/node/register.js +14 -0
- package/package.json +50 -40
- package/readme.md +2 -2
- package/tsconfig.json +14 -0
- package/LICENSE +0 -21
- package/bin.js +0 -21
- package/bundle/bundle.js +0 -46
- package/bundle/esbuild.config.js +0 -178
- package/bundle/getConfigs.js +0 -62
- package/compile/compile.js +0 -53
- package/compile/ts-resolve-plugin.js +0 -235
- package/compile/typings.d.ts +0 -19
- package/gen/component.ts.tpl +0 -16
- package/gen/gen.js +0 -27
- package/gen/style.less.tpl +0 -3
- package/gen/template.ts.tpl +0 -8
- package/helpers/getTSConfig.js +0 -19
- package/serve/readme.md +0 -8
- package/serve/serve.js +0 -109
- package/spawn/index.js +0 -81
- package/test/index.d.ts +0 -18
- package/test/index.js +0 -16
- package/test/jest.config.js +0 -32
- package/test/pathsToModuleNameMapper.js +0 -46
package/gen/gen.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import {fileURLToPath} from 'url';
|
|
4
|
-
import {execSync} from "child_process";
|
|
5
|
-
|
|
6
|
-
const currentDir = '__dirname' in global ? __dirname : path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
|
|
8
|
-
const templateTpl = fs.readFileSync(path.join(currentDir, './template.ts.tpl'), 'utf8');
|
|
9
|
-
const componentTpl = fs.readFileSync(path.join(currentDir, './component.ts.tpl'), 'utf8');
|
|
10
|
-
const styleTpl = fs.readFileSync(path.join(currentDir, './style.less.tpl'), 'utf8');
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export function gen(name, directory, nested = false) {
|
|
14
|
-
const Name = name.replace(/^./, c => c.toUpperCase());
|
|
15
|
-
name = Name.replace(/[A-Z]/g, (c, i) => (i ? '-' : '') + c.toLowerCase());
|
|
16
|
-
process.chdir(directory);
|
|
17
|
-
if (nested) {
|
|
18
|
-
fs.mkdirSync(name);
|
|
19
|
-
process.chdir(name);
|
|
20
|
-
}
|
|
21
|
-
fs.writeFileSync(name + '.component.ts', componentTpl.replace(/\$Name\$/g, Name).replace(/\$name\$/g, name), 'utf8');
|
|
22
|
-
fs.writeFileSync(name + '.template.ts', templateTpl.replace(/\$Name\$/g, Name).replace(/\$name\$/g, name), 'utf8');
|
|
23
|
-
fs.writeFileSync(name + '.style.less', styleTpl.replace(/\$Name\$/g, Name).replace(/\$name\$/g, name), 'utf8');
|
|
24
|
-
execSync(`git add ${name}.component.ts`);
|
|
25
|
-
execSync(`git add ${name}.template.ts`);
|
|
26
|
-
execSync(`git add ${name}.style.less`);
|
|
27
|
-
}
|
package/gen/style.less.tpl
DELETED
package/gen/template.ts.tpl
DELETED
package/helpers/getTSConfig.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
|
|
3
|
-
export function getTSConfig(directory = process.cwd()) {
|
|
4
|
-
const configPath = ts.findConfigFile(directory, ts.sys.fileExists, 'tsconfig.json');
|
|
5
|
-
const readConfigFileResult = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
6
|
-
if (readConfigFileResult.error) {
|
|
7
|
-
throw readConfigFileResult.error;
|
|
8
|
-
}
|
|
9
|
-
return readConfigFileResult.config;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function getTSCompilerOptions(directory = process.cwd()) {
|
|
13
|
-
const jsonConfig = getTSConfig(directory);
|
|
14
|
-
const convertResult = ts.convertCompilerOptionsFromJson(jsonConfig.compilerOptions, './');
|
|
15
|
-
if (convertResult.errors && convertResult.errors.length > 0) {
|
|
16
|
-
throw convertResult.errors;
|
|
17
|
-
}
|
|
18
|
-
return convertResult.options;
|
|
19
|
-
}
|
package/serve/readme.md
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# serve
|
|
2
|
-
### запускает сервер, который отдает статический контент
|
|
3
|
-
в бразуер загружаются es-модули как таковые, с import {...} from "some-external-module"
|
|
4
|
-
браузер видит, что ему нужно загрузить еще модули и смотрит в специальный json importmaps который лежит в head. Там маппинг вроде @gm/ -> /external/@gm/ что означает что все модули начинающиеся на @gm/ резолвятся через указанный path.
|
|
5
|
-
serve теперь тоже "умный". Он во-первых "маунтит" все модули из проекта в external, так что /external/@gm/domain-api зарезолвится в (root)/packages/api/dist/bundle/index.js например, и watch этот файл. Во-вторых, на все остальные запросы на /external он начинает резолвить файлы (эта фигня оч противно теперь работает в node) и отдавать js. При этом он их не watch, а просто отдает.
|
|
6
|
-
К чему это привело: все модули загружаются на сайт независимо, а поэтому их можно собирать независимо. Модули маленькие => собираются быстро. Изменения в одном модуле могут не обновлять другие (теоретически, если не изменился .d.ts, но я еще не поборол tsc в этом)
|
|
7
|
-
|
|
8
|
-
**chunk**: react собирается в отдельный чанк => модуль main.js маленький
|
package/serve/serve.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import {getConfigOptions} from "../bundle/getConfigs.js";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import fs from "fs";
|
|
4
|
-
import liveServer from "live-server";
|
|
5
|
-
import {resolve, moduleResolve} from 'import-meta-resolve';
|
|
6
|
-
import uri2path from "file-uri-to-path";
|
|
7
|
-
|
|
8
|
-
export async function serve(...options) {
|
|
9
|
-
const configs = await getConfigOptions({
|
|
10
|
-
project: options.includes('-b'),
|
|
11
|
-
});
|
|
12
|
-
configs.filter(x => x.port).forEach(async (x,i) => {
|
|
13
|
-
const absRoot = path.join(x.rootDir, x.outDir ?? 'dist/bundle');
|
|
14
|
-
const root = path.relative(process.cwd(), absRoot);
|
|
15
|
-
const server = await liveServer.start({
|
|
16
|
-
root: root,
|
|
17
|
-
file: 'index.html',
|
|
18
|
-
port: process.env.PORT ? (+process.env.PORT + i) : x.port,
|
|
19
|
-
open: false,
|
|
20
|
-
watch: configs.map(x => path.join(x.rootDir, x.outDir ?? 'dist/bundle')).join(','),
|
|
21
|
-
mount: x.mount && Object.entries(x.mount)
|
|
22
|
-
.map(([from, to]) => [from, path.resolve(x.rootDir, to)]),
|
|
23
|
-
// .concat(configs.map(x => [`/external/${x.package}`,
|
|
24
|
-
// path.join(x.rootDir, x.outDir ?? `dist/bundle/${x.name}.js`)])),
|
|
25
|
-
proxy: Object.entries(x.proxy ?? {}),
|
|
26
|
-
middleware: [resolveESModule(x.rootDir, configs)].filter(x => x)
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
function getModuleName(path) {
|
|
33
|
-
if (!path.startsWith('/node_modules/'))
|
|
34
|
-
return null;
|
|
35
|
-
return path.substring('/node_modules/'.length);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const mappingCache = {};
|
|
39
|
-
|
|
40
|
-
async function resolveModule(module, root){
|
|
41
|
-
const conditions = ['browser', 'main', 'module', 'import', 'node', 'default'];
|
|
42
|
-
for (let condition of conditions) {
|
|
43
|
-
try {
|
|
44
|
-
return moduleResolve(module, root, new Set([condition]), true);
|
|
45
|
-
}catch (e){
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
throw new Error(`Failed resolve ${module} from ${root}`);
|
|
49
|
-
}
|
|
50
|
-
// for resolve modules and files inside modules
|
|
51
|
-
async function getFileName(moduleName, root) {
|
|
52
|
-
// console.log(moduleName, root);
|
|
53
|
-
if (moduleName in mappingCache)
|
|
54
|
-
return mappingCache[moduleName];
|
|
55
|
-
let file;
|
|
56
|
-
if (moduleName.match('\.[cm]?js(.map)?$')) {
|
|
57
|
-
const module = moduleName.match(/^(@[^/]+\/)?[^/]+/)[0];
|
|
58
|
-
const main = await resolveModule(module, root);
|
|
59
|
-
const file = main.href.replace(new RegExp('node_modules/' + module + '.*$'), 'node_modules/' + moduleName);
|
|
60
|
-
return mappingCache[moduleName] = file;
|
|
61
|
-
} else {
|
|
62
|
-
console.log(moduleName, root);
|
|
63
|
-
const file = await resolveModule(moduleName, root);
|
|
64
|
-
return mappingCache[moduleName] = file.href;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
const resolveESModule = (rootDir, configs) => async function (req, res, next) {
|
|
68
|
-
const name = getModuleName(req.url);
|
|
69
|
-
if (!name) {
|
|
70
|
-
return next();
|
|
71
|
-
}
|
|
72
|
-
// if (configs.some(x => x.package === name))
|
|
73
|
-
// return next();
|
|
74
|
-
const root = 'file://' + process.cwd() + '/package.json';
|
|
75
|
-
try {
|
|
76
|
-
const uri = await getFileName(name, root);
|
|
77
|
-
const file = uri2path(uri);
|
|
78
|
-
const stat = fs.statSync(file);
|
|
79
|
-
const relative = path.relative(rootDir, file)
|
|
80
|
-
.replaceAll(path.sep, '/')
|
|
81
|
-
.replace(/^.*\/node_modules/, '/node_modules');
|
|
82
|
-
if (req.url !== relative){
|
|
83
|
-
mappingCache[getModuleName(relative)] = uri;
|
|
84
|
-
res.writeHead(302, {
|
|
85
|
-
Location: relative
|
|
86
|
-
});
|
|
87
|
-
res.end();
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
res.writeHead(200, {
|
|
91
|
-
'Content-Type': 'application/javascript',
|
|
92
|
-
'Content-Length': stat.size
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
var readStream = fs.createReadStream(file);
|
|
96
|
-
// We replaced all the event handlers with a simple call to readStream.pipe()
|
|
97
|
-
readStream.pipe(res);
|
|
98
|
-
await new Promise(resolve => readStream.on('end', resolve));
|
|
99
|
-
readStream.close();
|
|
100
|
-
} catch (e) {
|
|
101
|
-
console.error(e.message);
|
|
102
|
-
res.writeHead(404, {
|
|
103
|
-
'Content-Type': 'text',
|
|
104
|
-
});
|
|
105
|
-
res.write(e.message);
|
|
106
|
-
}
|
|
107
|
-
res.end();
|
|
108
|
-
return;
|
|
109
|
-
}
|
package/spawn/index.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import cp from "child_process";
|
|
2
|
-
import {platform} from "os";
|
|
3
|
-
|
|
4
|
-
export function spawn(...options){
|
|
5
|
-
const commands = [];
|
|
6
|
-
for (let i = 0; i < options.length; i++) {
|
|
7
|
-
if (options[i].startsWith('-')){
|
|
8
|
-
commands[commands.length - 1].push(options[i]);
|
|
9
|
-
}else{
|
|
10
|
-
commands.push([options[i]]);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
for (let command of commands) {
|
|
14
|
-
console.log('run: ', command.join(' '));
|
|
15
|
-
spawnCommand('npx cmmn '+command.join(' '), command[0]+'\t', {
|
|
16
|
-
color: 'red',
|
|
17
|
-
shell: true,
|
|
18
|
-
stdio: "pipe"
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @param command {string}
|
|
26
|
-
* @param prefix {string}
|
|
27
|
-
* @param options {cp.SpawnOptions}
|
|
28
|
-
*/
|
|
29
|
-
export const spawnCommand = (command, prefix, options) => {
|
|
30
|
-
if (!options?.stdio && (platform() === 'linux')) {
|
|
31
|
-
options = { ...(options ?? {}), stdio: 'inherit' };
|
|
32
|
-
}
|
|
33
|
-
const proc = cp.spawn(command, options);
|
|
34
|
-
if (options?.stdio !== 'inherit') {
|
|
35
|
-
if (prefix) {
|
|
36
|
-
proc.stdin.pipe(process.stdin);
|
|
37
|
-
pipe(proc.stdout, process.stdout, prefix);
|
|
38
|
-
pipe(proc.stderr, process.stderr, prefix);
|
|
39
|
-
} else {
|
|
40
|
-
proc.stdin.pipe(process.stdin);
|
|
41
|
-
proc.stdout.pipe(process.stdout);
|
|
42
|
-
proc.stderr.pipe(process.stderr);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return proc;
|
|
46
|
-
}
|
|
47
|
-
function pipe(stream, target, prefix){
|
|
48
|
-
let _offset = 0;
|
|
49
|
-
const _NEWLINE = '\n'.charCodeAt(0);
|
|
50
|
-
const _prefix = Buffer.from(prefix, 'utf-8');
|
|
51
|
-
const _buffer = Buffer.alloc(1024 * 128);
|
|
52
|
-
const addBytes = (bytes) => {
|
|
53
|
-
for (const byte of bytes) {
|
|
54
|
-
_buffer[_offset] = byte;
|
|
55
|
-
_offset += 1;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
const addBuffer = (buf) => {
|
|
59
|
-
buf.copy(_buffer, _offset);
|
|
60
|
-
_offset += buf.length;
|
|
61
|
-
}
|
|
62
|
-
const flush = () => {
|
|
63
|
-
if (_offset > 0) {
|
|
64
|
-
target.write(_buffer.slice(0, _offset));
|
|
65
|
-
_offset = 0;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
addBuffer(_prefix);
|
|
69
|
-
stream.on('readable', () => {
|
|
70
|
-
const data = stream.read();
|
|
71
|
-
if (data) {
|
|
72
|
-
for (const [ , byte ] of data.entries()) {
|
|
73
|
-
addBytes([byte]);
|
|
74
|
-
if (byte === _NEWLINE) {
|
|
75
|
-
flush();
|
|
76
|
-
addBuffer(_prefix);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
package/test/index.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export {suite, test, timeout,} from "@testdeck/jest";
|
|
2
|
-
export {expect} from "earl";
|
|
3
|
-
import * as sinonModule from "sinon";
|
|
4
|
-
|
|
5
|
-
export type AssertionExt = Assertion & {
|
|
6
|
-
toEqual: Assertion["eql"]
|
|
7
|
-
}
|
|
8
|
-
export const sinon = sinonModule;
|
|
9
|
-
|
|
10
|
-
declare module 'earl' {
|
|
11
|
-
interface Validators<T> {
|
|
12
|
-
// Note that `this: Validators<number>` ensures that
|
|
13
|
-
// the validator is only callable for numbers.
|
|
14
|
-
toBeInstanceOf<V>(this: Validators<T>, type: V): T extends V ? true : false;
|
|
15
|
-
toBe: Validators<T>["toEqual"];
|
|
16
|
-
toHaveProperty<TProp, TValue>(this: Validators<T>, prop: TProp, value: TValue): T extends Record<TProp, TValue> ? true: false;
|
|
17
|
-
}
|
|
18
|
-
}
|
package/test/index.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import * as test from "node:test";
|
|
2
|
-
Object.assign(globalThis, test);
|
|
3
|
-
export {suite, test, timeout,} from "@testdeck/jest";
|
|
4
|
-
import { expect as expectBase, registerValidator, isEqual, formatCompact} from "earl";
|
|
5
|
-
// import * as globals from "@jest/globals";
|
|
6
|
-
export * as sinon from "sinon";
|
|
7
|
-
registerValidator("toHaveProperty", (control, prop, value) => {
|
|
8
|
-
const actualInline = formatCompact(control.actual)
|
|
9
|
-
const actualValue = formatCompact(control.actual[prop])
|
|
10
|
-
control.assert({
|
|
11
|
-
success: control.actual[prop] === value,
|
|
12
|
-
reason: `The value ${actualInline}[${prop}] = ${actualValue} is not equal to ${value}, but is expected to be eqaul`,
|
|
13
|
-
negatedReason: `The value ${actualInline}[${prop}] = ${actualValue} is equal to ${value}, but is expected not to be eqaul`,
|
|
14
|
-
})
|
|
15
|
-
})
|
|
16
|
-
export const expect = expectBase;
|
package/test/jest.config.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import {getTSCompilerOptions} from "../helpers/getTSConfig.js";
|
|
2
|
-
import {pathsToModuleNameMapper} from "./pathsToModuleNameMapper.js";
|
|
3
|
-
|
|
4
|
-
const options = getTSCompilerOptions(process.cwd());
|
|
5
|
-
|
|
6
|
-
export default {
|
|
7
|
-
transform: {
|
|
8
|
-
'^.+\\.tsx?$': ['@swc/jest', {
|
|
9
|
-
jsc: {
|
|
10
|
-
parser: {
|
|
11
|
-
syntax: "typescript",
|
|
12
|
-
// tsx: true, // If you use react
|
|
13
|
-
dynamicImport: true,
|
|
14
|
-
decorators: true,
|
|
15
|
-
},
|
|
16
|
-
target: "es2021",
|
|
17
|
-
transform: {
|
|
18
|
-
decoratorMetadata: true,
|
|
19
|
-
},
|
|
20
|
-
paths: options.paths,
|
|
21
|
-
baseUrl: process.cwd()
|
|
22
|
-
},
|
|
23
|
-
}],
|
|
24
|
-
},
|
|
25
|
-
roots: [process.cwd()],
|
|
26
|
-
moduleNameMapper: pathsToModuleNameMapper(options.paths ?? {}, {
|
|
27
|
-
prefix: '<rootDir>'
|
|
28
|
-
}),
|
|
29
|
-
extensionsToTreatAsEsm: ['.ts', '.tsx', '.jsx?'],
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
// we don't need to escape all chars, so commented out is the real one
|
|
2
|
-
// const escapeRegex = (str: string) => str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
|
|
3
|
-
const escapeRegex = (str) => str.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&')
|
|
4
|
-
|
|
5
|
-
export const pathsToModuleNameMapper = (mapping, { prefix = '', useESM = false }= {}) => {
|
|
6
|
-
const jestMap = {}
|
|
7
|
-
for (const fromPath of Object.keys(mapping)) {
|
|
8
|
-
const toPaths = mapping[fromPath]
|
|
9
|
-
// check that we have only one target path
|
|
10
|
-
if (toPaths.length === 0) {
|
|
11
|
-
continue
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// split with '*'
|
|
15
|
-
const segments = fromPath.split(/\*/g)
|
|
16
|
-
if (segments.length === 1) {
|
|
17
|
-
const paths = toPaths.map((target) => {
|
|
18
|
-
const enrichedPrefix = prefix !== '' && !prefix.endsWith('/') ? `${prefix}/` : prefix
|
|
19
|
-
|
|
20
|
-
return `${enrichedPrefix}${target}`
|
|
21
|
-
})
|
|
22
|
-
const cjsPattern = `^${escapeRegex(fromPath)}$`
|
|
23
|
-
jestMap[cjsPattern] = paths.length === 1 ? paths[0] : paths
|
|
24
|
-
} else if (segments.length === 2) {
|
|
25
|
-
const paths = toPaths.map((target) => {
|
|
26
|
-
const enrichedTarget =
|
|
27
|
-
target.startsWith('./') && prefix !== '' ? target.substring(target.indexOf('/') + 1) : target
|
|
28
|
-
const enrichedPrefix = prefix !== '' && !prefix.endsWith('/') ? `${prefix}/` : prefix
|
|
29
|
-
|
|
30
|
-
return `${enrichedPrefix}${enrichedTarget.replace(/\*/g, '$1')}`
|
|
31
|
-
})
|
|
32
|
-
if (useESM) {
|
|
33
|
-
const esmPattern = `^${escapeRegex(segments[0])}(.*)${escapeRegex(segments[1])}\\.js$`
|
|
34
|
-
jestMap[esmPattern] = paths.length === 1 ? paths[0] : paths
|
|
35
|
-
}
|
|
36
|
-
const cjsPattern = `^${escapeRegex(segments[0])}(.*)${escapeRegex(segments[1])}$`
|
|
37
|
-
jestMap[cjsPattern] = paths.length === 1 ? paths[0] : paths
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (useESM) {
|
|
42
|
-
jestMap['^(\\.{1,2}/.*)\\.js$'] = '$1'
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return jestMap
|
|
46
|
-
}
|