simple-scaffold 1.6.0 → 1.7.0-develop.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/README.md +56 -8
- package/cmd.js +3 -3
- package/cmd.js.map +1 -1
- package/config.d.ts +8 -0
- package/config.js +153 -0
- package/config.js.map +1 -0
- package/file.d.ts +38 -0
- package/file.js +161 -0
- package/file.js.map +1 -0
- package/logger.d.ts +13 -0
- package/logger.js +52 -0
- package/logger.js.map +1 -0
- package/package.json +2 -2
- package/parser.d.ts +14 -0
- package/parser.js +83 -0
- package/parser.js.map +1 -0
- package/scaffold.d.ts +2 -2
- package/scaffold.js +26 -37
- package/scaffold.js.map +1 -1
- package/types.d.ts +19 -2
- package/utils.d.ts +2 -68
- package/utils.js +4 -386
- package/utils.js.map +1 -1
package/README.md
CHANGED
|
@@ -40,10 +40,12 @@ The fastest way to get started is to use `npx` to immediately start a scaffold p
|
|
|
40
40
|
Prepare any templates you want to use - for example, in the directory `templates/component`; and use
|
|
41
41
|
that in the CLI args. Here is a simple example file:
|
|
42
42
|
|
|
43
|
+
Simple Scaffold will maintain any file and directory structure you try to generate.
|
|
44
|
+
|
|
43
45
|
`templates/component/{{ pascalName name }}.tsx`
|
|
44
46
|
|
|
45
47
|
```tsx
|
|
46
|
-
// Created: {{ now
|
|
48
|
+
// Created: {{ now 'yyyy-MM-dd' }}
|
|
47
49
|
import React from 'react'
|
|
48
50
|
|
|
49
51
|
export default {{pascalCase name}}: React.FC = (props) => {
|
|
@@ -57,7 +59,7 @@ To generate the template output, run:
|
|
|
57
59
|
|
|
58
60
|
```shell
|
|
59
61
|
# generate single component
|
|
60
|
-
npx simple-scaffold@latest \
|
|
62
|
+
$ npx simple-scaffold@latest \
|
|
61
63
|
-t templates/component -o src/components PageWrapper
|
|
62
64
|
```
|
|
63
65
|
|
|
@@ -74,27 +76,73 @@ export default PageWrapper: React.FC = (props) => {
|
|
|
74
76
|
}
|
|
75
77
|
```
|
|
76
78
|
|
|
77
|
-
###
|
|
79
|
+
### Configuration Files
|
|
80
|
+
|
|
81
|
+
You can also use a config file to more easily maintain all your scaffold definitions.
|
|
82
|
+
|
|
83
|
+
`scaffold.config.js`
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
module.exports = {
|
|
87
|
+
// use "default" to avoid needing to specify key
|
|
88
|
+
// in this case the key is "component"
|
|
89
|
+
component: {
|
|
90
|
+
templates: ["templates/component"],
|
|
91
|
+
output: "src/components",
|
|
92
|
+
data: {
|
|
93
|
+
// ...
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Then call your scaffold like this:
|
|
100
|
+
|
|
101
|
+
```shell
|
|
102
|
+
$ npx simple-scaffold@latest -c scaffold.config.js PageWrapper
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
This will allow you to avoid needing to remember which configs are needed or to store them in a
|
|
106
|
+
1-liner in `packqge.json` which can get pretty long and messy, which is harder to maintain.
|
|
107
|
+
|
|
108
|
+
Also, this allows you to define more complex scaffolds with logic without having to use the Node.js
|
|
109
|
+
API directly. (Of course you always have the option to still do so if you wish)
|
|
110
|
+
|
|
111
|
+
See more at the [CLI documentation](https://chenasraf.github.io/simple-scaffold/pages/cli.html) and
|
|
112
|
+
[Configuration Files](https://chenasraf.github.io/simple-scaffold/pages/configuration_files.html).
|
|
113
|
+
|
|
114
|
+
### Remote Configurations
|
|
78
115
|
|
|
79
116
|
Another quick way to start is to re-use someone else's (or your own) work using a template
|
|
80
117
|
repository.
|
|
81
118
|
|
|
119
|
+
A remote config can be loaded in one of these ways:
|
|
120
|
+
|
|
121
|
+
- If it's on GitHub, you can use `-gh user/repository_name`
|
|
122
|
+
- If it's on another git server (such as GitLab), you can use
|
|
123
|
+
`-c https://example.com/user/repository_name.git`
|
|
124
|
+
|
|
125
|
+
Configurations can hold multiple scaffold groups. Each group can be accessed using its key by
|
|
126
|
+
supplying the `--key` or `-k` argument, or by appending a hash and then the key name, like so:
|
|
127
|
+
`-gh user/repository_name#key_name` - this also works for the `-c` flag.
|
|
128
|
+
|
|
82
129
|
Here is an example for loading the example component templates in this very repository:
|
|
83
130
|
|
|
84
131
|
```shell
|
|
85
|
-
npx simple-scaffold@latest \
|
|
86
|
-
-gh chenasraf/simple-scaffold#
|
|
132
|
+
$ npx simple-scaffold@latest \
|
|
133
|
+
-gh chenasraf/simple-scaffold#scaffold.config.js:component \
|
|
87
134
|
PageWrapper
|
|
88
135
|
|
|
89
136
|
# equivalent to:
|
|
90
|
-
npx simple-scaffold@latest \
|
|
91
|
-
-c https://github.com/chenasraf/simple-scaffold.git#
|
|
137
|
+
$ npx simple-scaffold@latest \
|
|
138
|
+
-c https://github.com/chenasraf/simple-scaffold.git#scaffold.config.js:component \
|
|
92
139
|
PageWrapper
|
|
93
140
|
```
|
|
94
141
|
|
|
95
142
|
When template name (`:component`) is omitted, `default` is used.
|
|
96
143
|
|
|
97
|
-
See more at the [CLI documentation](https://chenasraf.github.io/simple-scaffold/pages/cli.html)
|
|
144
|
+
See more at the [CLI documentation](https://chenasraf.github.io/simple-scaffold/pages/cli.html) and
|
|
145
|
+
[Configuration Files](https://chenasraf.github.io/simple-scaffold/pages/configuration_files.html).
|
|
98
146
|
|
|
99
147
|
## Documentation
|
|
100
148
|
|
package/cmd.js
CHANGED
|
@@ -11,13 +11,13 @@ const types_1 = require("./types");
|
|
|
11
11
|
const scaffold_1 = require("./scaffold");
|
|
12
12
|
const path_1 = __importDefault(require("path"));
|
|
13
13
|
const promises_1 = __importDefault(require("fs/promises"));
|
|
14
|
-
const
|
|
14
|
+
const config_1 = require("./config");
|
|
15
15
|
async function parseCliArgs(args = process.argv.slice(2)) {
|
|
16
16
|
const pkg = JSON.parse((await promises_1.default.readFile(path_1.default.join(__dirname, "package.json"))).toString());
|
|
17
17
|
const isConfig = args.includes("--config") || args.includes("-c") || args.includes("--github") || args.includes("-gh");
|
|
18
18
|
return ((0, massarg_1.default)()
|
|
19
19
|
.main(async (config) => {
|
|
20
|
-
const _config = await (0,
|
|
20
|
+
const _config = await (0, config_1.parseConfig)(config);
|
|
21
21
|
return (0, scaffold_1.Scaffold)(_config);
|
|
22
22
|
})
|
|
23
23
|
.option({
|
|
@@ -73,7 +73,7 @@ async function parseCliArgs(args = process.argv.slice(2)) {
|
|
|
73
73
|
name: "append-data",
|
|
74
74
|
aliases: ["D"],
|
|
75
75
|
description: "Append additional custom data to the templates, which will overwrite --data, using an alternate syntax, which is easier to use with CLI: -D key1=string -D key2:=raw",
|
|
76
|
-
parse:
|
|
76
|
+
parse: config_1.parseAppendData,
|
|
77
77
|
})
|
|
78
78
|
.option({
|
|
79
79
|
name: "create-sub-folder",
|
package/cmd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd.js","sourceRoot":"","sources":["../src/cmd.ts"],"names":[],"mappings":";;;;;;;AACA,sDAA6B;AAC7B,kDAAyB;AACzB,mCAAqD;AACrD,yCAAqC;AACrC,gDAAuB;AACvB,2DAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"cmd.js","sourceRoot":"","sources":["../src/cmd.ts"],"names":[],"mappings":"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"}
|
package/config.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ConfigLoadConfig, FileResponse, ScaffoldCmdConfig, ScaffoldConfig, ScaffoldConfigFile } from "./types";
|
|
2
|
+
import { OptionsBase } from "massarg/types";
|
|
3
|
+
export declare function getOptionValueForFile<T>(config: ScaffoldConfig, filePath: string, fn: FileResponse<T>, defaultValue?: T): T;
|
|
4
|
+
export declare function parseAppendData(value: string, options: ScaffoldCmdConfig & OptionsBase): unknown;
|
|
5
|
+
/** @internal */
|
|
6
|
+
export declare function parseConfig(config: ScaffoldCmdConfig & OptionsBase): Promise<ScaffoldConfig>;
|
|
7
|
+
/** @internal */
|
|
8
|
+
export declare function getConfig(config: ConfigLoadConfig): Promise<ScaffoldConfigFile>;
|
package/config.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.getConfig = exports.parseConfig = exports.parseAppendData = exports.getOptionValueForFile = void 0;
|
|
30
|
+
const path_1 = __importDefault(require("path"));
|
|
31
|
+
const types_1 = require("./types");
|
|
32
|
+
const node_child_process_1 = require("node:child_process");
|
|
33
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
34
|
+
const parser_1 = require("./parser");
|
|
35
|
+
const logger_1 = require("./logger");
|
|
36
|
+
const utils_1 = require("./utils");
|
|
37
|
+
function getOptionValueForFile(config, filePath, fn, defaultValue) {
|
|
38
|
+
if (typeof fn !== "function") {
|
|
39
|
+
return defaultValue ?? fn;
|
|
40
|
+
}
|
|
41
|
+
return fn(filePath, path_1.default.dirname((0, parser_1.handlebarsParse)(config, filePath, { isPath: true }).toString()), path_1.default.basename((0, parser_1.handlebarsParse)(config, filePath, { isPath: true }).toString()));
|
|
42
|
+
}
|
|
43
|
+
exports.getOptionValueForFile = getOptionValueForFile;
|
|
44
|
+
function parseAppendData(value, options) {
|
|
45
|
+
const data = options.data ?? {};
|
|
46
|
+
const [key, val] = value.split(/\:?=/);
|
|
47
|
+
// raw
|
|
48
|
+
if (value.includes(":=") && !val.includes(":=")) {
|
|
49
|
+
return { ...data, [key]: JSON.parse(val) };
|
|
50
|
+
}
|
|
51
|
+
return { ...data, [key]: isWrappedWithQuotes(val) ? val.substring(1, val.length - 1) : val };
|
|
52
|
+
}
|
|
53
|
+
exports.parseAppendData = parseAppendData;
|
|
54
|
+
function isWrappedWithQuotes(string) {
|
|
55
|
+
return (string.startsWith('"') && string.endsWith('"')) || (string.startsWith("'") && string.endsWith("'"));
|
|
56
|
+
}
|
|
57
|
+
/** @internal */
|
|
58
|
+
async function parseConfig(config) {
|
|
59
|
+
let c = config;
|
|
60
|
+
if (config.github) {
|
|
61
|
+
(0, logger_1.log)(config, types_1.LogLevel.Info, `Loading config from github ${config.github}`);
|
|
62
|
+
const gitUrl = new URL(`https://github.com/${config.github}`);
|
|
63
|
+
if (!gitUrl.pathname.endsWith(".git")) {
|
|
64
|
+
gitUrl.pathname += ".git";
|
|
65
|
+
}
|
|
66
|
+
config.config = gitUrl.toString();
|
|
67
|
+
}
|
|
68
|
+
if (config.config) {
|
|
69
|
+
const isUrl = config.config.includes("://");
|
|
70
|
+
const hasColonToken = (!isUrl && config.config.includes(":")) || (isUrl && count(config.config, ":") > 1);
|
|
71
|
+
const colonIndex = config.config.lastIndexOf(":");
|
|
72
|
+
const [configFile, templateKey = "default"] = hasColonToken
|
|
73
|
+
? [config.config.substring(0, colonIndex), config.config.substring(colonIndex + 1)]
|
|
74
|
+
: [config.config, undefined];
|
|
75
|
+
const key = (config.key ?? templateKey) || "default";
|
|
76
|
+
(0, logger_1.log)(config, types_1.LogLevel.Info, `Loading config from ${configFile} with key ${key}`);
|
|
77
|
+
const configPromise = await getConfig({ config: configFile, quiet: config.quiet, verbose: config.verbose });
|
|
78
|
+
const configImport = await (0, utils_1.resolve)(configPromise, config);
|
|
79
|
+
if (!configImport[key]) {
|
|
80
|
+
throw new Error(`Template "${key}" not found in ${configFile}`);
|
|
81
|
+
}
|
|
82
|
+
c = {
|
|
83
|
+
...config,
|
|
84
|
+
...configImport[key],
|
|
85
|
+
data: {
|
|
86
|
+
...configImport[key].data,
|
|
87
|
+
...config.data,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
c.data = { ...c.data, ...config.appendData };
|
|
92
|
+
delete config.appendData;
|
|
93
|
+
return c;
|
|
94
|
+
}
|
|
95
|
+
exports.parseConfig = parseConfig;
|
|
96
|
+
function wrapNoopResolver(value) {
|
|
97
|
+
if (typeof value === "function") {
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
return (_) => value;
|
|
101
|
+
}
|
|
102
|
+
/** @internal */
|
|
103
|
+
async function getConfig(config) {
|
|
104
|
+
const { config: configFile, ...logConfig } = config;
|
|
105
|
+
const url = new URL(configFile);
|
|
106
|
+
if (url.protocol === "file:") {
|
|
107
|
+
(0, logger_1.log)(logConfig, types_1.LogLevel.Info, `Loading config from file ${configFile}`);
|
|
108
|
+
const absolutePath = path_1.default.resolve(process.cwd(), configFile);
|
|
109
|
+
return wrapNoopResolver(Promise.resolve(`${absolutePath}`).then(s => __importStar(require(s))));
|
|
110
|
+
}
|
|
111
|
+
const isHttp = url.protocol === "http:" || url.protocol === "https:";
|
|
112
|
+
const isGit = url.protocol === "git:" || (isHttp && url.pathname.endsWith(".git"));
|
|
113
|
+
if (isHttp || isGit) {
|
|
114
|
+
if (isGit) {
|
|
115
|
+
return getGitConfig(url, logConfig);
|
|
116
|
+
}
|
|
117
|
+
throw new Error(`Unsupported protocol ${url.protocol}`);
|
|
118
|
+
}
|
|
119
|
+
return wrapNoopResolver(Promise.resolve(`${path_1.default.resolve(process.cwd(), configFile)}`).then(s => __importStar(require(s))));
|
|
120
|
+
}
|
|
121
|
+
exports.getConfig = getConfig;
|
|
122
|
+
async function getGitConfig(url, logConfig) {
|
|
123
|
+
const repoUrl = `${url.protocol}//${url.host}${url.pathname}`;
|
|
124
|
+
(0, logger_1.log)(logConfig, types_1.LogLevel.Info, `Cloning git repo ${repoUrl}`);
|
|
125
|
+
const tmpPath = path_1.default.resolve(node_os_1.default.tmpdir(), `scaffold-config-${Date.now()}`);
|
|
126
|
+
return new Promise((resolve, reject) => {
|
|
127
|
+
const clone = (0, node_child_process_1.spawn)("git", ["clone", "--depth", "1", repoUrl, tmpPath]);
|
|
128
|
+
clone.on("error", reject);
|
|
129
|
+
clone.on("close", async (code) => {
|
|
130
|
+
if (code === 0) {
|
|
131
|
+
(0, logger_1.log)(logConfig, types_1.LogLevel.Info, `Loading config from git repo: ${repoUrl}`);
|
|
132
|
+
const hashPath = url.hash?.replace("#", "") || "scaffold.config.js";
|
|
133
|
+
const absolutePath = path_1.default.resolve(tmpPath, hashPath);
|
|
134
|
+
const loadedConfig = (await Promise.resolve(`${absolutePath}`).then(s => __importStar(require(s)))).default;
|
|
135
|
+
(0, logger_1.log)(logConfig, types_1.LogLevel.Info, `Loaded config from git`);
|
|
136
|
+
(0, logger_1.log)(logConfig, types_1.LogLevel.Debug, `Raw config:`, loadedConfig);
|
|
137
|
+
const fixedConfig = Object.fromEntries(Object.entries(loadedConfig).map(([k, v]) => [
|
|
138
|
+
k,
|
|
139
|
+
// use absolute paths for template as config is necessarily in another directory
|
|
140
|
+
{ ...v, templates: v.templates.map((t) => path_1.default.resolve(tmpPath, t)) },
|
|
141
|
+
]));
|
|
142
|
+
resolve(wrapNoopResolver(fixedConfig));
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
reject(new Error(`Git clone failed with code ${code}`));
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
function count(string, substring) {
|
|
151
|
+
return string.split(substring).length - 1;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=config.js.map
|
package/config.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/file.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ScaffoldConfig } from "./types";
|
|
2
|
+
export declare function createDirIfNotExists(dir: string, config: ScaffoldConfig): Promise<void>;
|
|
3
|
+
export declare function pathExists(filePath: string): Promise<boolean>;
|
|
4
|
+
export declare function isDir(path: string): Promise<boolean>;
|
|
5
|
+
export declare function removeGlob(template: string): string;
|
|
6
|
+
export declare function makeRelativePath(str: string): string;
|
|
7
|
+
export declare function getBasePath(relPath: string): string;
|
|
8
|
+
export declare function getFileList(_config: ScaffoldConfig, template: string): Promise<string[]>;
|
|
9
|
+
export interface GlobInfo {
|
|
10
|
+
nonGlobTemplate: string;
|
|
11
|
+
origTemplate: string;
|
|
12
|
+
isDirOrGlob: boolean;
|
|
13
|
+
isGlob: boolean;
|
|
14
|
+
template: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function getTemplateGlobInfo(config: ScaffoldConfig, template: string): Promise<GlobInfo>;
|
|
17
|
+
export interface OutputFileInfo {
|
|
18
|
+
inputPath: string;
|
|
19
|
+
outputPathOpt: string;
|
|
20
|
+
outputDir: string;
|
|
21
|
+
outputPath: string;
|
|
22
|
+
exists: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function getTemplateFileInfo(config: ScaffoldConfig, { templatePath, basePath }: {
|
|
25
|
+
templatePath: string;
|
|
26
|
+
basePath: string;
|
|
27
|
+
}): Promise<OutputFileInfo>;
|
|
28
|
+
export declare function copyFileTransformed(config: ScaffoldConfig, { exists, overwrite, outputPath, inputPath, }: {
|
|
29
|
+
exists: boolean;
|
|
30
|
+
overwrite: boolean;
|
|
31
|
+
outputPath: string;
|
|
32
|
+
inputPath: string;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
export declare function getOutputDir(config: ScaffoldConfig, outputPathOpt: string, basePath: string): string;
|
|
35
|
+
export declare function handleTemplateFile(config: ScaffoldConfig, { templatePath, basePath }: {
|
|
36
|
+
templatePath: string;
|
|
37
|
+
basePath: string;
|
|
38
|
+
}): Promise<void>;
|
package/file.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.handleTemplateFile = exports.getOutputDir = exports.copyFileTransformed = exports.getTemplateFileInfo = exports.getTemplateGlobInfo = exports.getFileList = exports.getBasePath = exports.makeRelativePath = exports.removeGlob = exports.isDir = exports.pathExists = exports.createDirIfNotExists = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const constants_1 = require("constants");
|
|
9
|
+
const types_1 = require("./types");
|
|
10
|
+
const fs_1 = require("fs");
|
|
11
|
+
const { stat, access, mkdir } = fs_1.promises;
|
|
12
|
+
const glob_1 = require("glob");
|
|
13
|
+
const logger_1 = require("./logger");
|
|
14
|
+
const config_1 = require("./config");
|
|
15
|
+
const parser_1 = require("./parser");
|
|
16
|
+
const utils_1 = require("./utils");
|
|
17
|
+
const { readFile, writeFile } = fs_1.promises;
|
|
18
|
+
async function createDirIfNotExists(dir, config) {
|
|
19
|
+
const parentDir = path_1.default.dirname(dir);
|
|
20
|
+
if (!(await pathExists(parentDir))) {
|
|
21
|
+
await createDirIfNotExists(parentDir, config);
|
|
22
|
+
}
|
|
23
|
+
if (!(await pathExists(dir))) {
|
|
24
|
+
try {
|
|
25
|
+
(0, logger_1.log)(config, types_1.LogLevel.Debug, `Creating dir ${dir}`);
|
|
26
|
+
await mkdir(dir);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
if (e.code !== "EEXIST") {
|
|
31
|
+
throw e;
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.createDirIfNotExists = createDirIfNotExists;
|
|
38
|
+
async function pathExists(filePath) {
|
|
39
|
+
try {
|
|
40
|
+
await access(filePath, constants_1.F_OK);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
if (e.code === "ENOENT") {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
throw e;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.pathExists = pathExists;
|
|
51
|
+
async function isDir(path) {
|
|
52
|
+
const tplStat = await stat(path);
|
|
53
|
+
return tplStat.isDirectory();
|
|
54
|
+
}
|
|
55
|
+
exports.isDir = isDir;
|
|
56
|
+
function removeGlob(template) {
|
|
57
|
+
return template.replace(/\*/g, "").replace(/(\/\/|\\\\)/g, path_1.default.sep);
|
|
58
|
+
}
|
|
59
|
+
exports.removeGlob = removeGlob;
|
|
60
|
+
function makeRelativePath(str) {
|
|
61
|
+
return str.startsWith(path_1.default.sep) ? str.slice(1) : str;
|
|
62
|
+
}
|
|
63
|
+
exports.makeRelativePath = makeRelativePath;
|
|
64
|
+
function getBasePath(relPath) {
|
|
65
|
+
return path_1.default
|
|
66
|
+
.resolve(process.cwd(), relPath)
|
|
67
|
+
.replace(process.cwd() + path_1.default.sep, "")
|
|
68
|
+
.replace(process.cwd(), "");
|
|
69
|
+
}
|
|
70
|
+
exports.getBasePath = getBasePath;
|
|
71
|
+
async function getFileList(_config, template) {
|
|
72
|
+
return (await (0, glob_1.glob)(template, {
|
|
73
|
+
dot: true,
|
|
74
|
+
nodir: true,
|
|
75
|
+
// debug: config.verbose === LogLevel.Debug,
|
|
76
|
+
})).map(path_1.default.normalize);
|
|
77
|
+
}
|
|
78
|
+
exports.getFileList = getFileList;
|
|
79
|
+
async function getTemplateGlobInfo(config, template) {
|
|
80
|
+
const isGlob = (0, glob_1.hasMagic)(template);
|
|
81
|
+
(0, logger_1.log)(config, types_1.LogLevel.Debug, "before isDir", "isGlob:", isGlob, template);
|
|
82
|
+
let _template = template;
|
|
83
|
+
let nonGlobTemplate = isGlob ? removeGlob(template) : template;
|
|
84
|
+
nonGlobTemplate = path_1.default.normalize(nonGlobTemplate);
|
|
85
|
+
const isDirOrGlob = isGlob ? true : await isDir(template);
|
|
86
|
+
(0, logger_1.log)(config, types_1.LogLevel.Debug, "after isDir", isDirOrGlob);
|
|
87
|
+
const _shouldAddGlob = !isGlob && isDirOrGlob;
|
|
88
|
+
const origTemplate = template;
|
|
89
|
+
if (_shouldAddGlob) {
|
|
90
|
+
_template = path_1.default.join(template, "**", "*");
|
|
91
|
+
}
|
|
92
|
+
return { nonGlobTemplate, origTemplate, isDirOrGlob, isGlob, template: _template };
|
|
93
|
+
}
|
|
94
|
+
exports.getTemplateGlobInfo = getTemplateGlobInfo;
|
|
95
|
+
async function getTemplateFileInfo(config, { templatePath, basePath }) {
|
|
96
|
+
const inputPath = path_1.default.resolve(process.cwd(), templatePath);
|
|
97
|
+
const outputPathOpt = (0, config_1.getOptionValueForFile)(config, inputPath, config.output);
|
|
98
|
+
const outputDir = getOutputDir(config, outputPathOpt, basePath);
|
|
99
|
+
const outputPath = (0, parser_1.handlebarsParse)(config, path_1.default.join(outputDir, path_1.default.basename(inputPath)), {
|
|
100
|
+
isPath: true,
|
|
101
|
+
}).toString();
|
|
102
|
+
const exists = await pathExists(outputPath);
|
|
103
|
+
return { inputPath, outputPathOpt, outputDir, outputPath, exists };
|
|
104
|
+
}
|
|
105
|
+
exports.getTemplateFileInfo = getTemplateFileInfo;
|
|
106
|
+
async function copyFileTransformed(config, { exists, overwrite, outputPath, inputPath, }) {
|
|
107
|
+
if (!exists || overwrite) {
|
|
108
|
+
if (exists && overwrite) {
|
|
109
|
+
(0, logger_1.log)(config, types_1.LogLevel.Info, `File ${outputPath} exists, overwriting`);
|
|
110
|
+
}
|
|
111
|
+
const templateBuffer = await readFile(inputPath);
|
|
112
|
+
const unprocessedOutputContents = (0, parser_1.handlebarsParse)(config, templateBuffer);
|
|
113
|
+
const finalOutputContents = (await config.beforeWrite?.(unprocessedOutputContents, templateBuffer, outputPath)) ?? unprocessedOutputContents;
|
|
114
|
+
if (!config.dryRun) {
|
|
115
|
+
await writeFile(outputPath, finalOutputContents);
|
|
116
|
+
(0, logger_1.log)(config, types_1.LogLevel.Info, "Done.");
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
(0, logger_1.log)(config, types_1.LogLevel.Info, "Dry Run. Output should be:");
|
|
120
|
+
(0, logger_1.log)(config, types_1.LogLevel.Info, finalOutputContents);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (exists) {
|
|
124
|
+
(0, logger_1.log)(config, types_1.LogLevel.Info, `File ${outputPath} already exists, skipping`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.copyFileTransformed = copyFileTransformed;
|
|
128
|
+
function getOutputDir(config, outputPathOpt, basePath) {
|
|
129
|
+
return path_1.default.resolve(process.cwd(), ...[
|
|
130
|
+
outputPathOpt,
|
|
131
|
+
basePath,
|
|
132
|
+
config.createSubFolder
|
|
133
|
+
? config.subFolderNameHelper
|
|
134
|
+
? (0, parser_1.handlebarsParse)(config, `{{ ${config.subFolderNameHelper} name }}`).toString()
|
|
135
|
+
: config.name
|
|
136
|
+
: undefined,
|
|
137
|
+
].filter(Boolean));
|
|
138
|
+
}
|
|
139
|
+
exports.getOutputDir = getOutputDir;
|
|
140
|
+
async function handleTemplateFile(config, { templatePath, basePath }) {
|
|
141
|
+
return new Promise(async (resolve, reject) => {
|
|
142
|
+
try {
|
|
143
|
+
const { inputPath, outputPathOpt, outputDir, outputPath, exists } = await getTemplateFileInfo(config, {
|
|
144
|
+
templatePath,
|
|
145
|
+
basePath,
|
|
146
|
+
});
|
|
147
|
+
const overwrite = (0, config_1.getOptionValueForFile)(config, inputPath, config.overwrite ?? false);
|
|
148
|
+
(0, logger_1.log)(config, types_1.LogLevel.Debug, `\nParsing ${templatePath}`, `\nBase path: ${basePath}`, `\nFull input path: ${inputPath}`, `\nOutput Path Opt: ${outputPathOpt}`, `\nFull output dir: ${outputDir}`, `\nFull output path: ${outputPath}`, `\n`);
|
|
149
|
+
await createDirIfNotExists(path_1.default.dirname(outputPath), config);
|
|
150
|
+
(0, logger_1.log)(config, types_1.LogLevel.Info, `Writing to ${outputPath}`);
|
|
151
|
+
await copyFileTransformed(config, { exists, overwrite, outputPath, inputPath });
|
|
152
|
+
resolve();
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
(0, utils_1.handleErr)(e);
|
|
156
|
+
reject(e);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
exports.handleTemplateFile = handleTemplateFile;
|
|
161
|
+
//# sourceMappingURL=file.js.map
|
package/file.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"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"}
|
package/logger.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LogConfig, LogLevel, ScaffoldConfig } from "./types";
|
|
2
|
+
export declare function log(config: LogConfig, level: LogLevel, ...obj: any[]): void;
|
|
3
|
+
export declare function logInputFile(config: ScaffoldConfig, { origTemplate, relPath, template, inputFilePath, nonGlobTemplate, basePath, isDirOrGlob, isGlob, }: {
|
|
4
|
+
origTemplate: string;
|
|
5
|
+
relPath: string;
|
|
6
|
+
template: string;
|
|
7
|
+
inputFilePath: string;
|
|
8
|
+
nonGlobTemplate: string;
|
|
9
|
+
basePath: string;
|
|
10
|
+
isDirOrGlob: boolean;
|
|
11
|
+
isGlob: boolean;
|
|
12
|
+
}): void;
|
|
13
|
+
export declare function logInitStep(config: ScaffoldConfig): void;
|
package/logger.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logInitStep = exports.logInputFile = exports.log = void 0;
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
function log(config, level, ...obj) {
|
|
10
|
+
if (config.quiet || config.verbose === types_1.LogLevel.None || level < (config.verbose ?? types_1.LogLevel.Info)) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const levelColor = {
|
|
14
|
+
[types_1.LogLevel.None]: "reset",
|
|
15
|
+
[types_1.LogLevel.Debug]: "blue",
|
|
16
|
+
[types_1.LogLevel.Info]: "dim",
|
|
17
|
+
[types_1.LogLevel.Warning]: "yellow",
|
|
18
|
+
[types_1.LogLevel.Error]: "red",
|
|
19
|
+
};
|
|
20
|
+
const chalkFn = chalk_1.default[levelColor[level]];
|
|
21
|
+
const key = level === types_1.LogLevel.Error ? "error" : level === types_1.LogLevel.Warning ? "warn" : "log";
|
|
22
|
+
const logFn = console[key];
|
|
23
|
+
logFn(...obj.map((i) => i instanceof Error
|
|
24
|
+
? chalkFn(i, JSON.stringify(i, undefined, 1), i.stack)
|
|
25
|
+
: typeof i === "object"
|
|
26
|
+
? chalkFn(JSON.stringify(i, undefined, 1))
|
|
27
|
+
: chalkFn(i)));
|
|
28
|
+
}
|
|
29
|
+
exports.log = log;
|
|
30
|
+
function logInputFile(config, { origTemplate, relPath, template, inputFilePath, nonGlobTemplate, basePath, isDirOrGlob, isGlob, }) {
|
|
31
|
+
log(config, types_1.LogLevel.Debug, `\nprocess.cwd(): ${process.cwd()}`, `\norigTemplate: ${origTemplate}`, `\nrelPath: ${relPath}`, `\ntemplate: ${template}`, `\ninputFilePath: ${inputFilePath}`, `\nnonGlobTemplate: ${nonGlobTemplate}`, `\nbasePath: ${basePath}`, `\nisDirOrGlob: ${isDirOrGlob}`, `\nisGlob: ${isGlob}`, `\n`);
|
|
32
|
+
}
|
|
33
|
+
exports.logInputFile = logInputFile;
|
|
34
|
+
function logInitStep(config) {
|
|
35
|
+
log(config, types_1.LogLevel.Debug, "Full config:", {
|
|
36
|
+
name: config.name,
|
|
37
|
+
templates: config.templates,
|
|
38
|
+
output: config.output,
|
|
39
|
+
createSubFolder: config.createSubFolder,
|
|
40
|
+
data: config.data,
|
|
41
|
+
overwrite: config.overwrite,
|
|
42
|
+
quiet: config.quiet,
|
|
43
|
+
subFolderNameHelper: config.subFolderNameHelper,
|
|
44
|
+
helpers: Object.keys(config.helpers ?? {}),
|
|
45
|
+
verbose: `${config.verbose} (${Object.keys(types_1.LogLevel).find((k) => types_1.LogLevel[k] === config.verbose)})`,
|
|
46
|
+
dryRun: config.dryRun,
|
|
47
|
+
beforeWrite: config.beforeWrite,
|
|
48
|
+
});
|
|
49
|
+
log(config, types_1.LogLevel.Info, "Data:", config.data);
|
|
50
|
+
}
|
|
51
|
+
exports.logInitStep = logInitStep;
|
|
52
|
+
//# sourceMappingURL=logger.js.map
|
package/logger.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "simple-scaffold",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0-develop.1",
|
|
4
4
|
"description": "Generate any file structure - from single components to entire app boilerplates, with a single command.",
|
|
5
5
|
"homepage": "https://chenasraf.github.io/simple-scaffold",
|
|
6
6
|
"repository": "https://github.com/chenasraf/simple-scaffold.git",
|
|
7
|
-
"author": "Chen Asraf <
|
|
7
|
+
"author": "Chen Asraf <contact@casraf.dev>",
|
|
8
8
|
"license": "MIT",
|
|
9
9
|
"main": "index.js",
|
|
10
10
|
"bin": "cmd.js",
|
package/parser.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { DefaultHelpers, Helper, ScaffoldConfig } from "./types";
|
|
3
|
+
export declare const defaultHelpers: Record<DefaultHelpers, Helper>;
|
|
4
|
+
export declare function _dateHelper(date: Date, formatString: string): string;
|
|
5
|
+
export declare function _dateHelper(date: Date, formatString: string, durationDifference: number, durationType: keyof Duration): string;
|
|
6
|
+
export declare function nowHelper(formatString: string): string;
|
|
7
|
+
export declare function nowHelper(formatString: string, durationDifference: number, durationType: keyof Duration): string;
|
|
8
|
+
export declare function dateHelper(date: string, formatString: string): string;
|
|
9
|
+
export declare function dateHelper(date: string, formatString: string, durationDifference: number, durationType: keyof Duration): string;
|
|
10
|
+
export declare function pascalCase(s: string): string;
|
|
11
|
+
export declare function registerHelpers(config: ScaffoldConfig): void;
|
|
12
|
+
export declare function handlebarsParse(config: ScaffoldConfig, templateBuffer: Buffer | string, { isPath }?: {
|
|
13
|
+
isPath?: boolean;
|
|
14
|
+
}): Buffer;
|