@rock-js/tools 0.12.10 → 0.12.11
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/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/edit-template.d.ts +11 -0
- package/dist/src/lib/edit-template.d.ts.map +1 -0
- package/dist/src/lib/edit-template.js +56 -0
- package/dist/src/lib/edit-template.js.map +1 -0
- package/dist/src/lib/fs.d.ts +12 -0
- package/dist/src/lib/fs.d.ts.map +1 -0
- package/dist/src/lib/fs.js +53 -0
- package/dist/src/lib/fs.js.map +1 -0
- package/dist/src/lib/git.d.ts +5 -0
- package/dist/src/lib/git.d.ts.map +1 -0
- package/dist/src/lib/git.js +59 -0
- package/dist/src/lib/git.js.map +1 -0
- package/dist/src/lib/package-json.d.ts +3 -0
- package/dist/src/lib/package-json.d.ts.map +1 -0
- package/dist/src/lib/package-json.js +65 -0
- package/dist/src/lib/package-json.js.map +1 -0
- package/dist/src/lib/project-name.d.ts +9 -0
- package/dist/src/lib/project-name.d.ts.map +1 -0
- package/dist/src/lib/project-name.js +88 -0
- package/dist/src/lib/project-name.js.map +1 -0
- package/package.json +2 -2
package/dist/src/index.d.ts
CHANGED
|
@@ -10,6 +10,11 @@ export * from './lib/project.js';
|
|
|
10
10
|
export * from './lib/types.js';
|
|
11
11
|
export * from './lib/build-cache/common.js';
|
|
12
12
|
export * from './lib/build-cache/localBuildCache.js';
|
|
13
|
+
export * from './lib/fs.js';
|
|
14
|
+
export * from './lib/package-json.js';
|
|
15
|
+
export * from './lib/project-name.js';
|
|
16
|
+
export * from './lib/edit-template.js';
|
|
17
|
+
export * from './lib/git.js';
|
|
13
18
|
export { getBinaryPath } from './lib/build-cache/getBinaryPath.js';
|
|
14
19
|
export { findDevServerPort } from './lib/dev-server/findDevServerPort.js';
|
|
15
20
|
export { isDevServerRunning } from './lib/dev-server/isDevServerRunning.js';
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -10,6 +10,11 @@ export * from './lib/project.js';
|
|
|
10
10
|
export * from './lib/types.js';
|
|
11
11
|
export * from './lib/build-cache/common.js';
|
|
12
12
|
export * from './lib/build-cache/localBuildCache.js';
|
|
13
|
+
export * from './lib/fs.js';
|
|
14
|
+
export * from './lib/package-json.js';
|
|
15
|
+
export * from './lib/project-name.js';
|
|
16
|
+
export * from './lib/edit-template.js';
|
|
17
|
+
export * from './lib/git.js';
|
|
13
18
|
export { getBinaryPath } from './lib/build-cache/getBinaryPath.js';
|
|
14
19
|
export { findDevServerPort } from './lib/dev-server/findDevServerPort.js';
|
|
15
20
|
export { isDevServerRunning } from './lib/dev-server/isDevServerRunning.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rename common files that cannot be put into template literaly, e.g. .gitignore.
|
|
3
|
+
*/
|
|
4
|
+
export declare function renameCommonFiles(projectPath: string): void;
|
|
5
|
+
/**
|
|
6
|
+
* Replace placeholder with project nae in whole template:
|
|
7
|
+
* - Rename paths containing placeholder
|
|
8
|
+
* - Replace placeholder in text files
|
|
9
|
+
*/
|
|
10
|
+
export declare function replacePlaceholder(projectPath: string, normalizedName: string): void;
|
|
11
|
+
//# sourceMappingURL=edit-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-template.d.ts","sourceRoot":"","sources":["../../../src/lib/edit-template.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,QAcpD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,QA4BvB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { renameFile, walkDirectory } from './fs.js';
|
|
4
|
+
/**
|
|
5
|
+
* Placeholder name used in template, that should be replaced with normalized project name.
|
|
6
|
+
*/
|
|
7
|
+
const PLACEHOLDER_NAME = 'HelloWorld';
|
|
8
|
+
/**
|
|
9
|
+
* Rename common files that cannot be put into template literaly, e.g. .gitignore.
|
|
10
|
+
*/
|
|
11
|
+
export function renameCommonFiles(projectPath) {
|
|
12
|
+
const sourceGitIgnorePath = path.join(projectPath, 'gitignore');
|
|
13
|
+
if (fs.existsSync(sourceGitIgnorePath)) {
|
|
14
|
+
fs.renameSync(sourceGitIgnorePath, path.join(projectPath, '.gitignore'));
|
|
15
|
+
}
|
|
16
|
+
// Harmony platform has a separate gitignore file.
|
|
17
|
+
const harmonyGitIgnorePath = path.join(projectPath, 'harmony', 'gitignore');
|
|
18
|
+
if (fs.existsSync(harmonyGitIgnorePath)) {
|
|
19
|
+
fs.renameSync(harmonyGitIgnorePath, path.join(projectPath, 'harmony', '.gitignore'));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Replace placeholder with project nae in whole template:
|
|
24
|
+
* - Rename paths containing placeholder
|
|
25
|
+
* - Replace placeholder in text files
|
|
26
|
+
*/
|
|
27
|
+
export function replacePlaceholder(projectPath, normalizedName) {
|
|
28
|
+
if (normalizedName === PLACEHOLDER_NAME) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
for (const filePath of walkDirectory(projectPath).reverse()) {
|
|
32
|
+
// Skip anything inside node_modules
|
|
33
|
+
if (filePath.split(path.sep).includes('node_modules')) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (!fs.statSync(filePath).isDirectory()) {
|
|
37
|
+
replacePlaceholderInTextFile(filePath, normalizedName);
|
|
38
|
+
}
|
|
39
|
+
if (path.basename(filePath).includes(PLACEHOLDER_NAME)) {
|
|
40
|
+
renameFile(filePath, PLACEHOLDER_NAME, normalizedName);
|
|
41
|
+
}
|
|
42
|
+
else if (path.basename(filePath).includes(PLACEHOLDER_NAME.toLowerCase())) {
|
|
43
|
+
renameFile(filePath, PLACEHOLDER_NAME.toLowerCase(), normalizedName.toLowerCase());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function replacePlaceholderInTextFile(filePath, normalizedName) {
|
|
48
|
+
const fileContent = fs.readFileSync(filePath, 'utf8');
|
|
49
|
+
const replacedFileContent = fileContent
|
|
50
|
+
.replaceAll(PLACEHOLDER_NAME, normalizedName)
|
|
51
|
+
.replaceAll(PLACEHOLDER_NAME.toLowerCase(), normalizedName.toLowerCase());
|
|
52
|
+
if (fileContent !== replacedFileContent) {
|
|
53
|
+
fs.writeFileSync(filePath, replacedFileContent, 'utf8');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=edit-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-template.js","sourceRoot":"","sources":["../../../src/lib/edit-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEpD;;GAEG;AACH,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAChE,IAAI,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACvC,EAAE,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,kDAAkD;IAClD,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5E,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACxC,EAAE,CAAC,UAAU,CACX,oBAAoB,EACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAChD,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,cAAsB;IAEtB,IAAI,cAAc,KAAK,gBAAgB,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,oCAAoC;QACpC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACtD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACzC,4BAA4B,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvD,UAAU,CAAC,QAAQ,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;QACzD,CAAC;aAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAChE,CAAC;YACD,UAAU,CACR,QAAQ,EACR,gBAAgB,CAAC,WAAW,EAAE,EAC9B,cAAc,CAAC,WAAW,EAAE,CAC7B,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CACnC,QAAgB,EAChB,cAAsB;IAEtB,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,mBAAmB,GAAG,WAAW;SACpC,UAAU,CAAC,gBAAgB,EAAE,cAAc,CAAC;SAC5C,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;IAE5E,IAAI,WAAW,KAAK,mBAAmB,EAAE,CAAC;QACxC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function isEmptyDirSync(path: string): boolean;
|
|
2
|
+
type CopyDirOptions = {
|
|
3
|
+
skipFiles?: string[];
|
|
4
|
+
};
|
|
5
|
+
export declare function copyDirSync(from: string, to: string, { skipFiles }?: CopyDirOptions): void;
|
|
6
|
+
export declare function removeDirSync(path: string): void;
|
|
7
|
+
export declare function removeDirs(paths: string[]): Promise<void[]>;
|
|
8
|
+
export declare function walkDirectory(currentPath: string): string[];
|
|
9
|
+
export declare function renameFile(filePath: string, oldName: string, newName: string): void;
|
|
10
|
+
export declare function getNameWithoutExtension(filePath: string): string;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/lib/fs.ts"],"names":[],"mappings":"AAMA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,WAG1C;AAED,KAAK,cAAc,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,EAAE,SAAc,EAAE,GAAE,cAAmB,QAmBxC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,QAIzC;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,mBAM/C;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAS3D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAO5E;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,UAEvD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import fsPromises from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import nodePath from 'node:path';
|
|
5
|
+
import { mergePackageJsons } from './package-json.js';
|
|
6
|
+
export function isEmptyDirSync(path) {
|
|
7
|
+
const files = fs.readdirSync(path);
|
|
8
|
+
return files.length === 0 || (files.length === 1 && files[0] === '.git');
|
|
9
|
+
}
|
|
10
|
+
export function copyDirSync(from, to, { skipFiles = [] } = {}) {
|
|
11
|
+
fs.mkdirSync(to, { recursive: true });
|
|
12
|
+
for (const file of fs.readdirSync(from)) {
|
|
13
|
+
const srcFile = nodePath.resolve(from, file);
|
|
14
|
+
const stat = fs.statSync(srcFile);
|
|
15
|
+
const distFile = nodePath.resolve(to, file);
|
|
16
|
+
if (stat.isDirectory()) {
|
|
17
|
+
copyDirSync(srcFile, distFile, { skipFiles });
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
if (nodePath.basename(srcFile) === 'package.json') {
|
|
21
|
+
mergePackageJsons(srcFile, distFile);
|
|
22
|
+
}
|
|
23
|
+
else if (!skipFiles?.includes(nodePath.basename(srcFile))) {
|
|
24
|
+
fs.copyFileSync(srcFile, distFile);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function removeDirSync(path) {
|
|
30
|
+
if (fs.existsSync(path)) {
|
|
31
|
+
fs.rmSync(path, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export async function removeDirs(paths) {
|
|
35
|
+
return await Promise.all(paths.map((dirPath) => fsPromises.rm(dirPath, { recursive: true, force: true })));
|
|
36
|
+
}
|
|
37
|
+
export function walkDirectory(currentPath) {
|
|
38
|
+
if (!fs.lstatSync(currentPath).isDirectory()) {
|
|
39
|
+
return [currentPath];
|
|
40
|
+
}
|
|
41
|
+
const childPaths = fs
|
|
42
|
+
.readdirSync(currentPath)
|
|
43
|
+
.flatMap((childName) => walkDirectory(path.join(currentPath, childName)));
|
|
44
|
+
return [currentPath, ...childPaths];
|
|
45
|
+
}
|
|
46
|
+
export function renameFile(filePath, oldName, newName) {
|
|
47
|
+
const newFileName = nodePath.join(nodePath.dirname(filePath), nodePath.basename(filePath).replaceAll(oldName, newName));
|
|
48
|
+
fs.renameSync(filePath, newFileName);
|
|
49
|
+
}
|
|
50
|
+
export function getNameWithoutExtension(filePath) {
|
|
51
|
+
return path.basename(filePath, path.extname(filePath));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/lib/fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function gitInitStep(path: string, version: string | null): Promise<void>;
|
|
2
|
+
export declare function hasGitClient(): Promise<boolean>;
|
|
3
|
+
export declare function isGitRepo(path: string): Promise<boolean>;
|
|
4
|
+
export declare function isGitDirty(dir: string): Promise<boolean>;
|
|
5
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/lib/git.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,iBAoBrE;AAeD,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAOrD;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU9D;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,oBAM3C"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import logger from './logger.js';
|
|
2
|
+
import { spinner } from './prompts.js';
|
|
3
|
+
import { spawn } from './spawn.js';
|
|
4
|
+
export async function gitInitStep(path, version) {
|
|
5
|
+
if (!(await hasGitClient())) {
|
|
6
|
+
logger.info('Git client not found, skipping git initialization');
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (await isGitRepo(path)) {
|
|
10
|
+
logger.debug('Git repo already initialized, skipping git initialization');
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const loader = spinner();
|
|
14
|
+
loader.start('Initializing git repo');
|
|
15
|
+
const message = `Initial commit\n\nGenerated by rock${version ? `@${version}` : ''}.`;
|
|
16
|
+
await initGitRepo(path, message);
|
|
17
|
+
loader.stop('Git repo initialized.');
|
|
18
|
+
}
|
|
19
|
+
async function initGitRepo(path, message) {
|
|
20
|
+
try {
|
|
21
|
+
await spawn('git', ['init'], { cwd: path });
|
|
22
|
+
await spawn('git', ['branch', '-M', 'main'], { cwd: path });
|
|
23
|
+
await spawn('git', ['add', '.'], { cwd: path });
|
|
24
|
+
await spawn('git', ['commit', '-m', message], {
|
|
25
|
+
cwd: path,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
logger.warn('Failed to initialize git repository', error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export async function hasGitClient() {
|
|
33
|
+
try {
|
|
34
|
+
await spawn('git', ['--version'], { stdio: 'ignore' });
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export async function isGitRepo(path) {
|
|
42
|
+
try {
|
|
43
|
+
await spawn('git', ['rev-parse', '--is-inside-work-tree'], {
|
|
44
|
+
stdio: 'ignore',
|
|
45
|
+
cwd: path,
|
|
46
|
+
});
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export async function isGitDirty(dir) {
|
|
54
|
+
const { output } = await spawn('git', ['status', '--porcelain'], {
|
|
55
|
+
cwd: dir,
|
|
56
|
+
});
|
|
57
|
+
return output.trim() !== '';
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/lib/git.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAsB;IACpE,IAAI,CAAC,CAAC,MAAM,YAAY,EAAE,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,sCACd,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAC5B,GAAG,CAAC;IACJ,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEjC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe;IACtD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;YAC5C,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE;YACzD,KAAK,EAAE,QAAQ;YACf,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE;QAC/D,GAAG,EAAE,GAAG;KACT,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../../src/lib/package-json.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAczD;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAoC1E"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
export function mergePackageJsons(from, to) {
|
|
4
|
+
const src = JSON.parse(fs.readFileSync(from, 'utf-8'));
|
|
5
|
+
if (!fs.existsSync(to)) {
|
|
6
|
+
fs.copyFileSync(from, to);
|
|
7
|
+
}
|
|
8
|
+
const dist = JSON.parse(fs.readFileSync(to, 'utf-8'));
|
|
9
|
+
// @todo consider adding a warning when src keys are different from dist keys
|
|
10
|
+
dist.scripts = { ...dist.scripts, ...src.scripts };
|
|
11
|
+
dist.dependencies = { ...dist.dependencies, ...src.dependencies };
|
|
12
|
+
dist.devDependencies = { ...dist.devDependencies, ...src.devDependencies };
|
|
13
|
+
dist.peerDependencies = { ...dist.peerDependencies, ...src.peerDependencies };
|
|
14
|
+
fs.writeFileSync(to, JSON.stringify(dist, null, 2));
|
|
15
|
+
}
|
|
16
|
+
export function rewritePackageJson(projectPath, packageName) {
|
|
17
|
+
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
18
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
22
|
+
// Override fields from template
|
|
23
|
+
packageJson.name = packageName;
|
|
24
|
+
packageJson.version = '1.0.0';
|
|
25
|
+
packageJson.private = true;
|
|
26
|
+
delete packageJson.publishConfig;
|
|
27
|
+
if (packageJson.dependencies) {
|
|
28
|
+
packageJson.dependencies = Object.fromEntries(Object.entries(packageJson.dependencies).sort());
|
|
29
|
+
}
|
|
30
|
+
if (packageJson.devDependencies) {
|
|
31
|
+
packageJson.devDependencies = Object.fromEntries(Object.entries(packageJson.devDependencies).sort());
|
|
32
|
+
}
|
|
33
|
+
if (packageJson.peerDependencies) {
|
|
34
|
+
packageJson.peerDependencies = Object.fromEntries(Object.entries(packageJson.peerDependencies).sort());
|
|
35
|
+
}
|
|
36
|
+
fs.writeFileSync(packageJsonPath, JSON.stringify(sortPackageJson(packageJson), null, 2));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Sort fields in package.json to make it cleaner.
|
|
40
|
+
* @param packageJson
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
+
function sortPackageJson(packageJson) {
|
|
45
|
+
const { name, version, private: privateValue, scripts, dependencies, devDependencies, peerDependencies, ...rest } = packageJson;
|
|
46
|
+
const result = {};
|
|
47
|
+
setField(result, 'name', name);
|
|
48
|
+
setField(result, 'version', version);
|
|
49
|
+
setField(result, 'private', privateValue);
|
|
50
|
+
setField(result, 'scripts', scripts);
|
|
51
|
+
setField(result, 'dependencies', dependencies);
|
|
52
|
+
setField(result, 'devDependencies', devDependencies);
|
|
53
|
+
setField(result, 'peerDependencies', peerDependencies);
|
|
54
|
+
for (const key in rest) {
|
|
55
|
+
result[key] = rest[key];
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
60
|
+
function setField(packageJson, key, value) {
|
|
61
|
+
if (value !== undefined) {
|
|
62
|
+
packageJson[key] = value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=package-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../../src/lib/package-json.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function validateProjectName(name: string): string | undefined;
|
|
2
|
+
/**
|
|
3
|
+
* Transform project name to PascalCase. The input name can be in either kebab-case or PascalCase.
|
|
4
|
+
*
|
|
5
|
+
* @param name - Project name
|
|
6
|
+
* @returns PascalCase project name
|
|
7
|
+
*/
|
|
8
|
+
export declare function normalizeProjectName(name: string): string;
|
|
9
|
+
//# sourceMappingURL=project-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-name.d.ts","sourceRoot":"","sources":["../../../src/lib/project-name.ts"],"names":[],"mappings":"AA8DA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,sBAe/C;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,UAQhD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Allow for alphanumeric, hyphen (kebab-case), and underscore (_).
|
|
3
|
+
* Has to start with a letter.
|
|
4
|
+
*/
|
|
5
|
+
const NAME_REGEX = /^[A-Z][0-9A-Z_-]*$/i;
|
|
6
|
+
// ref: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
|
|
7
|
+
const javaKeywords = [
|
|
8
|
+
'abstract',
|
|
9
|
+
'continue',
|
|
10
|
+
'for',
|
|
11
|
+
'new',
|
|
12
|
+
'switch',
|
|
13
|
+
'assert',
|
|
14
|
+
'default',
|
|
15
|
+
'goto',
|
|
16
|
+
'package',
|
|
17
|
+
'synchronized',
|
|
18
|
+
'boolean',
|
|
19
|
+
'do',
|
|
20
|
+
'if',
|
|
21
|
+
'private',
|
|
22
|
+
'this',
|
|
23
|
+
'break',
|
|
24
|
+
'double',
|
|
25
|
+
'implements',
|
|
26
|
+
'protected',
|
|
27
|
+
'throw',
|
|
28
|
+
'byte',
|
|
29
|
+
'else',
|
|
30
|
+
'import',
|
|
31
|
+
'public',
|
|
32
|
+
'throws',
|
|
33
|
+
'case',
|
|
34
|
+
'enum',
|
|
35
|
+
'instanceof',
|
|
36
|
+
'return',
|
|
37
|
+
'transient',
|
|
38
|
+
'catch',
|
|
39
|
+
'extends',
|
|
40
|
+
'int',
|
|
41
|
+
'short',
|
|
42
|
+
'try',
|
|
43
|
+
'char',
|
|
44
|
+
'final',
|
|
45
|
+
'interface',
|
|
46
|
+
'static',
|
|
47
|
+
'void',
|
|
48
|
+
'class',
|
|
49
|
+
'finally',
|
|
50
|
+
'long',
|
|
51
|
+
'strictfp',
|
|
52
|
+
'volatile',
|
|
53
|
+
'const',
|
|
54
|
+
'float',
|
|
55
|
+
'native',
|
|
56
|
+
'super',
|
|
57
|
+
'while',
|
|
58
|
+
];
|
|
59
|
+
const reservedNames = ['react', 'react-native', ...javaKeywords];
|
|
60
|
+
export function validateProjectName(name) {
|
|
61
|
+
if (name.length === 0) {
|
|
62
|
+
return 'Project name cannot be empty.';
|
|
63
|
+
}
|
|
64
|
+
if (!name.match(NAME_REGEX)) {
|
|
65
|
+
return `Invalid project name: "${name}". Please use a valid identifier name (alphanumeric, hyphen, underscore).`;
|
|
66
|
+
}
|
|
67
|
+
const lowerCaseName = name.toLowerCase();
|
|
68
|
+
if (reservedNames.includes(lowerCaseName)) {
|
|
69
|
+
return `Invalid project name: "${name}". Can't use reserved name. Please use another name.`;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Transform project name to PascalCase. The input name can be in either kebab-case or PascalCase.
|
|
75
|
+
*
|
|
76
|
+
* @param name - Project name
|
|
77
|
+
* @returns PascalCase project name
|
|
78
|
+
*/
|
|
79
|
+
export function normalizeProjectName(name) {
|
|
80
|
+
if (!name)
|
|
81
|
+
return '';
|
|
82
|
+
return name
|
|
83
|
+
.split('-')
|
|
84
|
+
.filter(Boolean)
|
|
85
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
86
|
+
.join('');
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=project-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-name.js","sourceRoot":"","sources":["../../../src/lib/project-name.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAEzC,gFAAgF;AAChF,MAAM,YAAY,GAAG;IACnB,UAAU;IACV,UAAU;IACV,KAAK;IACL,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,MAAM;IACN,SAAS;IACT,cAAc;IACd,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,YAAY;IACZ,QAAQ;IACR,WAAW;IACX,OAAO;IACP,SAAS;IACT,KAAK;IACL,OAAO;IACP,KAAK;IACL,MAAM;IACN,OAAO;IACP,WAAW;IACX,QAAQ;IACR,MAAM;IACN,OAAO;IACP,SAAS;IACT,MAAM;IACN,UAAU;IACV,UAAU;IACV,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;CACR,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC,CAAC;AAEjE,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,+BAA+B,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,0BAA0B,IAAI,2EAA2E,CAAC;IACnH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,OAAO,0BAA0B,IAAI,sDAAsD,CAAC;IAC9F,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rock-js/tools",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.11",
|
|
4
4
|
"description": "Internal core utilities for Rock",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"tslib": "^2.3.0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@rock-js/test-helpers": "^0.12.
|
|
33
|
+
"@rock-js/test-helpers": "^0.12.11",
|
|
34
34
|
"@types/adm-zip": "^0.5.7"
|
|
35
35
|
},
|
|
36
36
|
"publishConfig": {
|