@git.zone/tspublish 1.11.6 → 1.12.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/.smartconfig.json +23 -7
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.packagepreparer.d.ts +10 -0
- package/dist_ts/classes.packagepreparer.js +146 -0
- package/dist_ts/classes.publishmodule.d.ts +2 -1
- package/dist_ts/classes.publishmodule.js +30 -58
- package/dist_ts/classes.tspublish.d.ts +5 -3
- package/dist_ts/classes.tspublish.js +15 -2
- package/dist_ts/functions.packageplan.d.ts +4 -0
- package/dist_ts/functions.packageplan.js +190 -0
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/index.js +14 -2
- package/dist_ts/interfaces/tspublish.d.ts +56 -0
- package/dist_ts/plugins.d.ts +5 -2
- package/dist_ts/plugins.js +6 -3
- package/package.json +24 -23
- package/readme.md +146 -246
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.packagepreparer.ts +135 -0
- package/ts/classes.publishmodule.ts +27 -61
- package/ts/classes.tspublish.ts +16 -1
- package/ts/functions.packageplan.ts +182 -0
- package/ts/index.ts +11 -1
- package/ts/interfaces/tspublish.ts +55 -0
- package/ts/plugins.ts +5 -2
- /package/{license → license.md} +0 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
const packageNamePattern = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/;
|
|
3
|
+
const folderPattern = /^ts(?:_[a-z0-9_]+)?$/;
|
|
4
|
+
export const assertPackagePath = (value) => {
|
|
5
|
+
if (typeof value !== 'string' || !value || value.includes('\\')
|
|
6
|
+
|| value.split('/').some((part) => !part || part === '.' || part === '..')
|
|
7
|
+
|| /[\x00-\x1f\x7f*?]/.test(value) || plugins.path.isAbsolute(value)) {
|
|
8
|
+
throw new Error(`Invalid package-relative path: ${value}`);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const record = (value, label) => {
|
|
12
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
13
|
+
throw new Error(`Invalid ${label}.`);
|
|
14
|
+
return value;
|
|
15
|
+
};
|
|
16
|
+
const dependencyNames = (value, label) => {
|
|
17
|
+
if (!Array.isArray(value) || value.some((name) => typeof name !== 'string' || !packageNamePattern.test(name))
|
|
18
|
+
|| new Set(value).size !== value.length)
|
|
19
|
+
throw new Error(`Invalid ${label}.`);
|
|
20
|
+
return value;
|
|
21
|
+
};
|
|
22
|
+
const assertVersionReference = (value, name) => {
|
|
23
|
+
if (typeof value !== 'string' || !value.trim() || /^(?:file|link|workspace):/.test(value)) {
|
|
24
|
+
throw new Error(`Missing or unsupported published dependency version for ${name}.`);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
};
|
|
28
|
+
const stringRecord = (value, label) => {
|
|
29
|
+
const result = record(value, label);
|
|
30
|
+
if (Object.values(result).some((entry) => typeof entry !== 'string' || !entry.trim()))
|
|
31
|
+
throw new Error(`Invalid ${label}.`);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
const legacyEntry = (value, kind) => {
|
|
35
|
+
if (typeof value === 'string')
|
|
36
|
+
return kind === 'main' ? value : undefined;
|
|
37
|
+
if (value === null)
|
|
38
|
+
return undefined;
|
|
39
|
+
if (kind === 'types' && typeof value.types === 'string')
|
|
40
|
+
return value.types;
|
|
41
|
+
for (const condition of ['node', 'import', 'default']) {
|
|
42
|
+
if (value[condition] !== undefined) {
|
|
43
|
+
const result = legacyEntry(value[condition], kind);
|
|
44
|
+
if (result)
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return undefined;
|
|
49
|
+
};
|
|
50
|
+
export const orderPublishModules = (modules) => {
|
|
51
|
+
const names = new Map();
|
|
52
|
+
for (const [folder, config] of Object.entries(modules)) {
|
|
53
|
+
if (config.order !== undefined && !Number.isFinite(config.order))
|
|
54
|
+
throw new Error(`Invalid order for ${folder}.`);
|
|
55
|
+
if (config.name) {
|
|
56
|
+
if (!packageNamePattern.test(config.name) || names.has(config.name))
|
|
57
|
+
throw new Error(`Invalid or duplicate package name: ${config.name}`);
|
|
58
|
+
names.set(config.name, folder);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const pending = new Set(Object.keys(modules));
|
|
62
|
+
const ordered = {};
|
|
63
|
+
while (pending.size) {
|
|
64
|
+
const ready = [...pending].filter((folder) => [...(modules[folder].dependencies ?? []), ...(modules[folder].optionalDependencies ?? [])]
|
|
65
|
+
.every((name) => !names.has(name) || !pending.has(names.get(name)))).sort((a, b) => (modules[a].order ?? Number.MAX_SAFE_INTEGER) - (modules[b].order ?? Number.MAX_SAFE_INTEGER)
|
|
66
|
+
|| a.localeCompare(b, 'en'));
|
|
67
|
+
if (!ready.length)
|
|
68
|
+
throw new Error(`Cyclic publish dependencies: ${[...pending].join(', ')}`);
|
|
69
|
+
const folder = ready[0];
|
|
70
|
+
ordered[folder] = modules[folder];
|
|
71
|
+
pending.delete(folder);
|
|
72
|
+
}
|
|
73
|
+
return ordered;
|
|
74
|
+
};
|
|
75
|
+
const validateExport = (value, folders) => {
|
|
76
|
+
if (value === null)
|
|
77
|
+
return;
|
|
78
|
+
if (typeof value === 'string') {
|
|
79
|
+
if (!value.startsWith('./'))
|
|
80
|
+
throw new Error('Package export targets must be relative.');
|
|
81
|
+
assertPackagePath(value.slice(2));
|
|
82
|
+
if (!folders.some((folder) => value.startsWith(`./dist_${folder}/`))) {
|
|
83
|
+
throw new Error(`Export target is outside this package's compiled folders: ${value}`);
|
|
84
|
+
}
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
for (const child of Object.values(record(value, 'export conditions')))
|
|
88
|
+
validateExport(child, folders);
|
|
89
|
+
};
|
|
90
|
+
export const createPackagePlan = async (directory, discovered) => {
|
|
91
|
+
const root = record(JSON.parse(await plugins.fs.readFile(plugins.path.join(directory, 'package.json'), 'utf8')), 'root manifest');
|
|
92
|
+
if (typeof root.version !== 'string' || !/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(root.version)) {
|
|
93
|
+
throw new Error('The repository requires a concrete package version.');
|
|
94
|
+
}
|
|
95
|
+
const ordered = orderPublishModules(discovered);
|
|
96
|
+
const names = new Set(Object.values(ordered).map((config) => config.name).filter(Boolean));
|
|
97
|
+
const owners = new Set();
|
|
98
|
+
const rootDependencies = record(root.dependencies ?? {}, 'root dependencies');
|
|
99
|
+
const version = root.version;
|
|
100
|
+
let licenseFile = 'license.md';
|
|
101
|
+
try {
|
|
102
|
+
await plugins.fs.access(plugins.path.join(directory, licenseFile));
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error.code !== 'ENOENT')
|
|
106
|
+
throw error;
|
|
107
|
+
licenseFile = 'license';
|
|
108
|
+
await plugins.fs.access(plugins.path.join(directory, licenseFile));
|
|
109
|
+
}
|
|
110
|
+
const modules = [];
|
|
111
|
+
for (const [folder, config] of Object.entries(ordered)) {
|
|
112
|
+
if (!config.name)
|
|
113
|
+
continue; // tsbuild also consumes order-only descriptors.
|
|
114
|
+
const folders = [folder, ...(config.folders ?? [])];
|
|
115
|
+
if (folders.some((name) => !folderPattern.test(name) || owners.has(name)) || new Set(folders).size !== folders.length) {
|
|
116
|
+
throw new Error(`Invalid or multiply owned source folder for ${config.name}.`);
|
|
117
|
+
}
|
|
118
|
+
folders.forEach((name) => owners.add(name));
|
|
119
|
+
const resolveDependencies = (value, label) => Object.fromEntries(dependencyNames(value, label).map((name) => [name, names.has(name)
|
|
120
|
+
? version : assertVersionReference(rootDependencies[name], name)]));
|
|
121
|
+
const dependencies = resolveDependencies(config.dependencies ?? [], `${config.name} dependencies`);
|
|
122
|
+
const optionalDependencies = config.optionalDependencies
|
|
123
|
+
? resolveDependencies(config.optionalDependencies, `${config.name} optional dependencies`) : undefined;
|
|
124
|
+
for (const [name, range] of Object.entries(stringRecord(config.peerDependencies ?? {}, 'peer dependencies'))) {
|
|
125
|
+
if (!packageNamePattern.test(name))
|
|
126
|
+
throw new Error(`Invalid peer dependency: ${name}`);
|
|
127
|
+
assertVersionReference(range, name);
|
|
128
|
+
}
|
|
129
|
+
for (const [name, metadataValue] of Object.entries(record(config.peerDependenciesMeta ?? {}, 'peer metadata'))) {
|
|
130
|
+
const metadata = record(metadataValue, 'peer metadata');
|
|
131
|
+
if (!(name in (config.peerDependencies ?? {})) || Object.keys(record(metadata, 'peer metadata')).some((key) => key !== 'optional')
|
|
132
|
+
|| (metadata.optional !== undefined && typeof metadata.optional !== 'boolean'))
|
|
133
|
+
throw new Error(`Invalid peer metadata for ${name}.`);
|
|
134
|
+
}
|
|
135
|
+
const exports = record(config.exports ?? { '.': { types: `./dist_${folder}/index.d.ts`, import: `./dist_${folder}/index.js` } }, 'package exports');
|
|
136
|
+
for (const [key, target] of Object.entries(exports)) {
|
|
137
|
+
if (key !== '.' && !key.startsWith('./'))
|
|
138
|
+
throw new Error(`Invalid package export: ${key}`);
|
|
139
|
+
if (key !== '.')
|
|
140
|
+
assertPackagePath(key.slice(2));
|
|
141
|
+
validateExport(target, folders);
|
|
142
|
+
}
|
|
143
|
+
if (!exports['.'])
|
|
144
|
+
throw new Error(`${config.name} requires a root export.`);
|
|
145
|
+
const include = config.include ?? [];
|
|
146
|
+
if (!Array.isArray(include) || new Set(include).size !== include.length)
|
|
147
|
+
throw new Error('Invalid package include paths.');
|
|
148
|
+
include.forEach(assertPackagePath);
|
|
149
|
+
if (include.some((path) => ['package.json', 'readme.md', 'cli.js', 'node_modules', '.git'].includes(path.split('/')[0])
|
|
150
|
+
|| folderPattern.test(path.split('/')[0]) || /^dist_ts(?:_[a-z0-9_]+)?$/.test(path.split('/')[0])
|
|
151
|
+
|| folders.some((folder) => path === folder || path.startsWith(`${folder}/`) || path === `dist_${folder}` || path.startsWith(`dist_${folder}/`)))) {
|
|
152
|
+
throw new Error('Explicit includes cannot replace generated package files or source folders.');
|
|
153
|
+
}
|
|
154
|
+
const bin = config.bin ?? [];
|
|
155
|
+
if (!Array.isArray(bin) || bin.some((name) => typeof name !== 'string' || !/^[a-z0-9][a-z0-9._-]*$/.test(name)))
|
|
156
|
+
throw new Error('Invalid package binaries.');
|
|
157
|
+
const metadata = Object.fromEntries(['author', 'license', 'repository', 'homepage', 'bugs', 'keywords', 'funding'].filter((key) => root[key] !== undefined).map((key) => [key, root[key]]));
|
|
158
|
+
const description = config.description ?? root.description ?? '';
|
|
159
|
+
if (typeof description !== 'string')
|
|
160
|
+
throw new Error('Invalid package description.');
|
|
161
|
+
const engines = config.engines ?? root.engines;
|
|
162
|
+
if (engines !== undefined)
|
|
163
|
+
stringRecord(engines, 'package engines');
|
|
164
|
+
if (config.sideEffects !== undefined && typeof config.sideEffects !== 'boolean'
|
|
165
|
+
&& (!Array.isArray(config.sideEffects) || config.sideEffects.some((value) => typeof value !== 'string' || !value.trim()))) {
|
|
166
|
+
throw new Error('Invalid sideEffects metadata.');
|
|
167
|
+
}
|
|
168
|
+
const main = legacyEntry(exports['.'], 'main');
|
|
169
|
+
const types = legacyEntry(exports['.'], 'types');
|
|
170
|
+
const manifest = {
|
|
171
|
+
...metadata, name: config.name, version, type: 'module', description,
|
|
172
|
+
...(main ? { main } : {}), ...(types ? { types } : {}), exports, dependencies,
|
|
173
|
+
...(optionalDependencies ? { optionalDependencies } : {}),
|
|
174
|
+
...(config.peerDependencies ? { peerDependencies: config.peerDependencies } : {}),
|
|
175
|
+
...(config.peerDependenciesMeta ? { peerDependenciesMeta: config.peerDependenciesMeta } : {}),
|
|
176
|
+
...(engines !== undefined ? { engines: engines } : {}),
|
|
177
|
+
...(config.sideEffects !== undefined ? { sideEffects: config.sideEffects } : {}),
|
|
178
|
+
...(bin.length ? { bin: Object.fromEntries(bin.map((name) => [name, './cli.js'])) } : {}),
|
|
179
|
+
files: [...folders.flatMap((name) => [name, `dist_${name}`]), ...include, 'readme.md', licenseFile, ...(bin.length ? ['cli.js'] : [])],
|
|
180
|
+
};
|
|
181
|
+
if (config.registries !== undefined && (!Array.isArray(config.registries) || config.registries.some((registry) => typeof registry !== 'string' || !registry.trim() || registry !== registry.trim() || /[\x00-\x1f\x7f]/.test(registry)))) {
|
|
182
|
+
throw new Error(`Invalid registry declarations for ${config.name}.`);
|
|
183
|
+
}
|
|
184
|
+
modules.push({ folder, folders, name: config.name, version, order: modules.length, manifest, include, licenseFile, registries: config.registries ?? [] });
|
|
185
|
+
}
|
|
186
|
+
if (!modules.length)
|
|
187
|
+
throw new Error('No named tspublish modules were found.');
|
|
188
|
+
return { schemaVersion: 1, version, modules };
|
|
189
|
+
};
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLnBhY2thZ2VwbGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvZnVuY3Rpb25zLnBhY2thZ2VwbGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBR3hDLE1BQU0sa0JBQWtCLEdBQUcsb0RBQW9ELENBQUM7QUFDaEYsTUFBTSxhQUFhLEdBQUcsc0JBQXNCLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFhLEVBQVEsRUFBRTtJQUN2RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztXQUMxRCxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDO1dBQ3ZFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBYyxFQUFFLEtBQWEsRUFBMkIsRUFBRTtJQUN4RSxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ3RHLE9BQU8sS0FBZ0MsQ0FBQztBQUMxQyxDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQWMsRUFBRSxLQUFhLEVBQVksRUFBRTtJQUNsRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDeEcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxNQUFNO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDaEYsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBYyxFQUFFLElBQVksRUFBVSxFQUFFO0lBQ3RFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFGLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELElBQUksR0FBRyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFjLEVBQUUsS0FBYSxFQUEwQixFQUFFO0lBQzdFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDNUgsT0FBTyxNQUFnQyxDQUFDO0FBQzFDLENBQUMsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBdUIsRUFBRSxJQUFzQixFQUFzQixFQUFFO0lBQzFGLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDMUUsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3JDLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztJQUM1RSxLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3RELElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkQsSUFBSSxNQUFNO2dCQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FDakMsT0FBdUMsRUFDUCxFQUFFO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3hDLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdkQsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEgsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBbUMsRUFBRSxDQUFDO0lBQ25ELE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUMzQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUM7YUFDdkYsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUMsQ0FBQyxDQUN2RSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDO2VBQ3pHLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUF1QixFQUFFLE9BQWlCLEVBQVEsRUFBRTtJQUMxRSxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTztJQUMzQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUN6RixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRSxNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFDRCxPQUFPO0lBQ1QsQ0FBQztJQUNELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFBRSxjQUFjLENBQUMsS0FBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1SCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQ3BDLFNBQWlCLEVBQ2pCLFVBQTBDLEVBQ2pCLEVBQUU7SUFDM0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNsSSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksQ0FBQywwREFBMEQsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdkgsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDakMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUM5RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzdCLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQztJQUMvQixJQUFJLENBQUM7UUFBQyxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQUMsQ0FBQztJQUMzRSxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSyxLQUErQixDQUFDLElBQUksS0FBSyxRQUFRO1lBQUUsTUFBTSxLQUFLLENBQUM7UUFDcEUsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUN4QixNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBOEIsRUFBRSxDQUFDO0lBQzlDLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1lBQUUsU0FBUyxDQUFDLGdEQUFnRDtRQUM1RSxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RILE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQWMsRUFBRSxLQUFhLEVBQTBCLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUN2RyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDckUsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUM7UUFDbkcsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CO1lBQ3RELENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDekcsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0csSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4RixzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLElBQUksRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQzttQkFDN0gsQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxPQUFPLFFBQVEsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLElBQUksR0FBRyxDQUFDLENBQUM7UUFDMUksQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsTUFBTSxhQUFhLEVBQUUsTUFBTSxFQUFFLFVBQVUsTUFBTSxXQUFXLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixDQUFxQyxDQUFDO1FBQ3hMLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDcEQsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM1RixJQUFJLEdBQUcsS0FBSyxHQUFHO2dCQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsTUFBTTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUMzSCxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUNsSCxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUM5RixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxRQUFRLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BKLE1BQU0sSUFBSSxLQUFLLENBQUMsNkVBQTZFLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzlKLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1TCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ2pFLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUTtZQUFFLE1BQU0s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
|
package/dist_ts/index.d.ts
CHANGED
package/dist_ts/index.js
CHANGED
|
@@ -5,6 +5,18 @@ export * from './classes.tspublish.js';
|
|
|
5
5
|
export const runCli = async () => {
|
|
6
6
|
logStart('tspublish');
|
|
7
7
|
const tspublish = new TsPublish();
|
|
8
|
-
|
|
8
|
+
const args = process.argv.slice(2);
|
|
9
|
+
if (args[0] === 'plan' && args.length === 1) {
|
|
10
|
+
console.log(JSON.stringify(await tspublish.plan(paths.cwd), null, 2));
|
|
11
|
+
}
|
|
12
|
+
else if (args[0] === 'prepare' && args.length === 2) {
|
|
13
|
+
console.log(JSON.stringify(await tspublish.prepare(paths.cwd, args[1]), null, 2));
|
|
14
|
+
}
|
|
15
|
+
else if (args.length === 0) {
|
|
16
|
+
await tspublish.publish(paths.cwd);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
throw new Error('Usage: tspublish [plan | prepare <new-output-directory>]');
|
|
20
|
+
}
|
|
9
21
|
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV4QyxjQUFjLHdCQUF3QixDQUFDO0FBR3ZDLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxLQUFLLElBQUksRUFBRTtJQUMvQixRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO1NBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7U0FBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUM5RSxDQUFDO0FBQ0gsQ0FBQyxDQUFDIn0=
|
|
@@ -10,4 +10,60 @@ export interface ITsPublishJson {
|
|
|
10
10
|
* allows the sepcification of bin names that invoke cli scripts
|
|
11
11
|
*/
|
|
12
12
|
bin: string[];
|
|
13
|
+
description?: string;
|
|
14
|
+
/** Additional source folders owned by this package, for example subpath exports. */
|
|
15
|
+
folders?: string[];
|
|
16
|
+
exports?: Record<string, TTsPublishExport>;
|
|
17
|
+
peerDependencies?: Record<string, string>;
|
|
18
|
+
peerDependenciesMeta?: Record<string, {
|
|
19
|
+
optional?: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
optionalDependencies?: string[];
|
|
22
|
+
engines?: Record<string, string>;
|
|
23
|
+
sideEffects?: boolean | string[];
|
|
24
|
+
/** Explicit repository-relative asset files/directories to include unchanged. */
|
|
25
|
+
include?: string[];
|
|
26
|
+
}
|
|
27
|
+
export type TTsPublishExport = string | null | {
|
|
28
|
+
[condition: string]: TTsPublishExport;
|
|
29
|
+
};
|
|
30
|
+
export interface ITsPublishManifest {
|
|
31
|
+
name: string;
|
|
32
|
+
version: string;
|
|
33
|
+
type: 'module';
|
|
34
|
+
description: string;
|
|
35
|
+
main?: string;
|
|
36
|
+
types?: string;
|
|
37
|
+
exports: Record<string, TTsPublishExport>;
|
|
38
|
+
dependencies: Record<string, string>;
|
|
39
|
+
optionalDependencies?: Record<string, string>;
|
|
40
|
+
peerDependencies?: Record<string, string>;
|
|
41
|
+
peerDependenciesMeta?: Record<string, {
|
|
42
|
+
optional?: boolean;
|
|
43
|
+
}>;
|
|
44
|
+
engines?: Record<string, string>;
|
|
45
|
+
sideEffects?: boolean | string[];
|
|
46
|
+
bin?: Record<string, string>;
|
|
47
|
+
files: string[];
|
|
48
|
+
[key: string]: unknown;
|
|
49
|
+
}
|
|
50
|
+
export interface ITsPublishModulePlan {
|
|
51
|
+
folder: string;
|
|
52
|
+
folders: string[];
|
|
53
|
+
name: string;
|
|
54
|
+
version: string;
|
|
55
|
+
/** Position in the deterministic dependency order. */
|
|
56
|
+
order: number;
|
|
57
|
+
manifest: ITsPublishManifest;
|
|
58
|
+
include: string[];
|
|
59
|
+
licenseFile: string;
|
|
60
|
+
registries: string[];
|
|
61
|
+
}
|
|
62
|
+
export interface ITsPublishPlan {
|
|
63
|
+
schemaVersion: 1;
|
|
64
|
+
version: string;
|
|
65
|
+
modules: ITsPublishModulePlan[];
|
|
66
|
+
}
|
|
67
|
+
export interface ITsPublishPreparedModule extends ITsPublishModulePlan {
|
|
68
|
+
directory: string;
|
|
13
69
|
}
|
package/dist_ts/plugins.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import * as path from 'path';
|
|
2
|
-
|
|
1
|
+
import * as path from 'node:path';
|
|
2
|
+
import * as fs from 'node:fs/promises';
|
|
3
|
+
import { isBuiltin } from 'node:module';
|
|
4
|
+
import * as typescript from 'typescript';
|
|
5
|
+
export { path, fs, isBuiltin, typescript };
|
|
3
6
|
import * as consolecolor from '@push.rocks/consolecolor';
|
|
4
7
|
import * as smartconfig from '@push.rocks/smartconfig';
|
|
5
8
|
import * as smartfile from '@push.rocks/smartfile';
|
package/dist_ts/plugins.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// node native scope
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import * as fs from 'node:fs/promises';
|
|
4
|
+
import { isBuiltin } from 'node:module';
|
|
5
|
+
import * as typescript from 'typescript';
|
|
6
|
+
export { path, fs, isBuiltin, typescript };
|
|
4
7
|
// @push.rocks scope
|
|
5
8
|
import * as consolecolor from '@push.rocks/consolecolor';
|
|
6
9
|
import * as smartconfig from '@push.rocks/smartconfig';
|
|
@@ -16,4 +19,4 @@ import * as smartshell from '@push.rocks/smartshell';
|
|
|
16
19
|
// Create a pre-configured SmartFs instance for Node.js filesystem operations
|
|
17
20
|
const smartfs = new SmartFs(new SmartFsProviderNode());
|
|
18
21
|
export { consolecolor, smartconfig, smartfile, smartfs, smartcli, smartdelay, smartlog, smartnpm, smartpath, smartrequest, smartshell };
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFFM0Msb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxVQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELDZFQUE2RTtBQUM3RSxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/tspublish",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A tool to publish multiple, concise, and small packages from monorepos, specifically for TypeScript projects within a git environment.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -8,20 +8,15 @@
|
|
|
8
8
|
"type": "module",
|
|
9
9
|
"author": "Task Venture Capital GmbH",
|
|
10
10
|
"license": "MIT",
|
|
11
|
-
"scripts": {
|
|
12
|
-
"test": "(tstest test/ --verbose --testlog --timeout 30)",
|
|
13
|
-
"build": "(tsbuild --web)",
|
|
14
|
-
"buildDocs": "(tsdoc)"
|
|
15
|
-
},
|
|
16
11
|
"bin": {
|
|
17
12
|
"tspublish": "./cli.js"
|
|
18
13
|
},
|
|
19
14
|
"devDependencies": {
|
|
20
|
-
"@git.zone/tsbuild": "^4.4.
|
|
21
|
-
"@git.zone/tsbundle": "^2.
|
|
22
|
-
"@git.zone/tsrun": "^2.0.
|
|
23
|
-
"@git.zone/tstest": "^
|
|
24
|
-
"@types/node": "
|
|
15
|
+
"@git.zone/tsbuild": "^4.4.2",
|
|
16
|
+
"@git.zone/tsbundle": "^2.13.0",
|
|
17
|
+
"@git.zone/tsrun": "^2.0.6",
|
|
18
|
+
"@git.zone/tstest": "^4.0.0",
|
|
19
|
+
"@types/node": "26.4.0"
|
|
25
20
|
},
|
|
26
21
|
"repository": {
|
|
27
22
|
"type": "git",
|
|
@@ -44,20 +39,22 @@
|
|
|
44
39
|
"assets/**/*",
|
|
45
40
|
"cli.js",
|
|
46
41
|
".smartconfig.json",
|
|
42
|
+
"license.md",
|
|
47
43
|
"readme.md"
|
|
48
44
|
],
|
|
49
45
|
"dependencies": {
|
|
50
|
-
"@push.rocks/consolecolor": "^2.0.
|
|
51
|
-
"@push.rocks/smartcli": "^4.0.
|
|
52
|
-
"@push.rocks/smartconfig": "^6.
|
|
53
|
-
"@push.rocks/smartdelay": "^3.0
|
|
54
|
-
"@push.rocks/smartfile": "^13.1.
|
|
55
|
-
"@push.rocks/smartfs": "^1.5.
|
|
56
|
-
"@push.rocks/smartlog": "^3.2.
|
|
57
|
-
"@push.rocks/smartnpm": "^2.0
|
|
46
|
+
"@push.rocks/consolecolor": "^2.0.4",
|
|
47
|
+
"@push.rocks/smartcli": "^4.0.21",
|
|
48
|
+
"@push.rocks/smartconfig": "^6.1.1",
|
|
49
|
+
"@push.rocks/smartdelay": "^3.1.0",
|
|
50
|
+
"@push.rocks/smartfile": "^13.1.3",
|
|
51
|
+
"@push.rocks/smartfs": "^1.5.1",
|
|
52
|
+
"@push.rocks/smartlog": "^3.2.2",
|
|
53
|
+
"@push.rocks/smartnpm": "^2.1.0",
|
|
58
54
|
"@push.rocks/smartpath": "^6.0.0",
|
|
59
|
-
"@push.rocks/smartrequest": "^5.0.
|
|
60
|
-
"@push.rocks/smartshell": "^3.3.8"
|
|
55
|
+
"@push.rocks/smartrequest": "^5.0.3",
|
|
56
|
+
"@push.rocks/smartshell": "^3.3.8",
|
|
57
|
+
"typescript": "^6.0.3"
|
|
61
58
|
},
|
|
62
59
|
"keywords": [
|
|
63
60
|
"typescript",
|
|
@@ -71,5 +68,9 @@
|
|
|
71
68
|
"module-management",
|
|
72
69
|
"developer-tools"
|
|
73
70
|
],
|
|
74
|
-
"
|
|
75
|
-
|
|
71
|
+
"scripts": {
|
|
72
|
+
"test": "(tstest test/ --verbose --logfile --timeout 30)",
|
|
73
|
+
"build": "(tsbuild --web)",
|
|
74
|
+
"buildDocs": "(tsdoc)"
|
|
75
|
+
}
|
|
76
|
+
}
|