vike 0.4.223-commit-3502685 → 0.4.223-commit-32cd543
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/cjs/node/api/prepareViteApiCall.js +9 -2
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +16 -0
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +36 -61
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +3 -3
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/node/api/prepareViteApiCall.js +9 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.d.ts +1 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +13 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +37 -62
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +3 -3
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/utils/projectInfo.d.ts +1 -1
- package/package.json +3 -1
|
@@ -87,7 +87,10 @@ async function getViteRoot(operation) {
|
|
|
87
87
|
}
|
|
88
88
|
async function getInfoFromVite(viteConfigFromOptions, operation) {
|
|
89
89
|
const viteConfigFromUserViteFile = await loadViteConfigFile(viteConfigFromOptions, operation);
|
|
90
|
-
const root = normalizeViteRoot(
|
|
90
|
+
const root = normalizeViteRoot(
|
|
91
|
+
// `viteConfigFromOptions.root` before `viteConfigFromUserViteFile.root` replicates Vite's precedence:
|
|
92
|
+
// https://github.com/vitejs/vite/blob/4f5845a3182fc950eb9cd76d7161698383113b18/packages/vite/src/node/config.ts#L1001
|
|
93
|
+
viteConfigFromOptions?.root ?? viteConfigFromUserViteFile?.root ?? process.cwd());
|
|
91
94
|
globalObject.root = root;
|
|
92
95
|
let vikeVitePluginOptions;
|
|
93
96
|
let viteConfigEnhanced = viteConfigFromOptions;
|
|
@@ -153,7 +156,11 @@ function getResolveConfigArgs(viteConfig = {}, operation) {
|
|
|
153
156
|
return [inlineConfig, command, defaultMode, defaultNodeEnv, isPreview];
|
|
154
157
|
}
|
|
155
158
|
function normalizeViteRoot(root) {
|
|
156
|
-
|
|
159
|
+
// `path.resolve(viteConfigFromUserViteFile.configFile, root)` could be more intuitive than `path.resolve(process.cwd(), root)` but we replicate Vite's behavior (`vite.config.js` should follow Vite's API), see:
|
|
160
|
+
// https://github.com/vitejs/vite/blob/4f5845a3182fc950eb9cd76d7161698383113b18/packages/vite/src/node/config.ts#L1063
|
|
161
|
+
return (0, utils_js_1.toPosixPath)(
|
|
162
|
+
// Equivalent to `path.resolve(process.cwd(), root)`
|
|
163
|
+
path_1.default.resolve(root));
|
|
157
164
|
}
|
|
158
165
|
const errMsg = `A Vite plugin is modifying Vite's setting ${picocolors_1.default.cyan('root')} which is forbidden`;
|
|
159
166
|
async function assertViteRoot2(root, viteConfigEnhanced, operation) {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ignorePatternsBuiltIn = void 0;
|
|
4
|
+
exports.ignorePatternsBuiltIn = [
|
|
5
|
+
'**/node_modules/**',
|
|
6
|
+
// Ejected Vike extensions, see https://github.com/snake-py/eject
|
|
7
|
+
'**/ejected/**',
|
|
8
|
+
// Allow:
|
|
9
|
+
// ```bash
|
|
10
|
+
// +Page.js
|
|
11
|
+
// +Page.telefunc.js
|
|
12
|
+
// ```
|
|
13
|
+
'**/*.telefunc.*',
|
|
14
|
+
// https://github.com/vikejs/vike/discussions/2222
|
|
15
|
+
'**/*.generated.*'
|
|
16
|
+
];
|
package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js
CHANGED
|
@@ -14,36 +14,22 @@ const util_1 = require("util");
|
|
|
14
14
|
const transpileAndExecuteFile_js_1 = require("./transpileAndExecuteFile.js");
|
|
15
15
|
const getEnvVarObject_js_1 = require("../../../../shared/getEnvVarObject.js");
|
|
16
16
|
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
17
|
+
const picomatch_1 = __importDefault(require("picomatch"));
|
|
18
|
+
const ignorePatternsBuiltIn_js_1 = require("./crawlPlusFiles/ignorePatternsBuiltIn.js");
|
|
17
19
|
const execA = (0, util_1.promisify)(child_process_1.exec);
|
|
18
20
|
const debug = (0, utils_js_1.createDebugger)('vike:crawl');
|
|
19
21
|
(0, utils_js_1.assertIsNotProductionRuntime)();
|
|
20
22
|
(0, utils_js_1.assertIsSingleModuleInstance)('getVikeConfig/crawlPlusFiles.ts');
|
|
21
23
|
let gitIsNotUsable = false;
|
|
22
|
-
async function crawlPlusFiles(userRootDir
|
|
24
|
+
async function crawlPlusFiles(userRootDir) {
|
|
23
25
|
(0, utils_js_1.assertPosixPath)(userRootDir);
|
|
24
26
|
(0, utils_js_1.assertFilePathAbsoluteFilesystem)(userRootDir);
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
/*/
|
|
28
|
-
assertPosixPath(outDirAbsoluteFilesystem)
|
|
29
|
-
let outDirRelativeFromUserRootDir: string | null = path.posix.relative(userRootDir, outDirAbsoluteFilesystem)
|
|
30
|
-
if (outDirRelativeFromUserRootDir.startsWith('../')) {
|
|
31
|
-
// config.outDir is outside of config.root => it's going to be ignored anyways
|
|
32
|
-
outDirRelativeFromUserRootDir = null
|
|
33
|
-
}
|
|
34
|
-
//*/
|
|
35
|
-
(0, utils_js_1.assert)(outDirRelativeFromUserRootDir === null ||
|
|
36
|
-
/* Not true if outDirRelativeFromUserRootDir starts with a hidden directory (i.e. a directory with a name that starts with `.`)
|
|
37
|
-
!outDirRelativeFromUserRootDir.startsWith('.') &&
|
|
38
|
-
*/
|
|
39
|
-
(!outDirRelativeFromUserRootDir.startsWith('./') &&
|
|
40
|
-
//
|
|
41
|
-
!outDirRelativeFromUserRootDir.startsWith('../')));
|
|
42
|
-
const crawSettings = getCrawlSettings();
|
|
27
|
+
const userSettings = getUserSettings();
|
|
28
|
+
const { ignorePatterns, ignoreMatchers } = getIgnore(userSettings);
|
|
43
29
|
// Crawl
|
|
44
|
-
const filesGit =
|
|
30
|
+
const filesGit = userSettings.git !== false && (await gitLsFiles(userRootDir, ignorePatterns, ignoreMatchers));
|
|
45
31
|
const filesGitNothingFound = !filesGit || filesGit.length === 0;
|
|
46
|
-
const filesGlob = (filesGitNothingFound || debug.isActivated) && (await tinyglobby(userRootDir,
|
|
32
|
+
const filesGlob = (filesGitNothingFound || debug.isActivated) && (await tinyglobby(userRootDir, ignorePatterns));
|
|
47
33
|
let files = !filesGitNothingFound
|
|
48
34
|
? filesGit
|
|
49
35
|
: // Fallback to tinyglobby for users that dynamically generate plus files. (Assuming that no plus file is found because of the user's .gitignore list.)
|
|
@@ -68,7 +54,7 @@ async function crawlPlusFiles(userRootDir, outDirAbsoluteFilesystem) {
|
|
|
68
54
|
return plusFiles;
|
|
69
55
|
}
|
|
70
56
|
// Same as tinyglobby() but using `$ git ls-files`
|
|
71
|
-
async function gitLsFiles(userRootDir,
|
|
57
|
+
async function gitLsFiles(userRootDir, ignorePatterns, ignoreMatchers) {
|
|
72
58
|
if (gitIsNotUsable)
|
|
73
59
|
return null;
|
|
74
60
|
// Preserve UTF-8 file paths.
|
|
@@ -76,8 +62,6 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
|
|
|
76
62
|
// https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8-encoded-pathnames-in-the-console-window/22828826#22828826
|
|
77
63
|
// https://stackoverflow.com/questions/15884180/how-do-i-override-git-configuration-options-by-command-line-parameters/15884261#15884261
|
|
78
64
|
const preserveUTF8 = '-c core.quotepath=off';
|
|
79
|
-
const ignoreAsPatterns = getIgnoreAsPatterns(outDirRelativeFromUserRootDir);
|
|
80
|
-
const ignoreAsFilterFn = getIgnoreAsFilterFn(outDirRelativeFromUserRootDir);
|
|
81
65
|
const cmd = [
|
|
82
66
|
'git',
|
|
83
67
|
preserveUTF8,
|
|
@@ -87,7 +71,7 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
|
|
|
87
71
|
// Performance gain is non-negligible.
|
|
88
72
|
// - https://github.com/vikejs/vike/pull/1688#issuecomment-2166206648
|
|
89
73
|
// - When node_modules/ is untracked the performance gain could be significant?
|
|
90
|
-
...
|
|
74
|
+
...ignorePatterns.map((pattern) => `--exclude="${pattern}"`),
|
|
91
75
|
// --others --exclude-standard => list untracked files (--others) while using .gitignore (--exclude-standard)
|
|
92
76
|
// --cached => list tracked files
|
|
93
77
|
'--others --exclude-standard --cached'
|
|
@@ -122,7 +106,7 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
|
|
|
122
106
|
if (!path_1.default.posix.basename(filePath).startsWith('+'))
|
|
123
107
|
continue;
|
|
124
108
|
// We have to repeat the same exclusion logic here because the option --exclude of `$ git ls-files` only applies to untracked files. (We use --exclude only to speed up the `$ git ls-files` command.)
|
|
125
|
-
if (
|
|
109
|
+
if (ignoreMatchers.some((m) => m(filePath)))
|
|
126
110
|
continue;
|
|
127
111
|
// JavaScript file?
|
|
128
112
|
if (!(0, utils_js_1.isScriptFile)(filePath))
|
|
@@ -135,10 +119,10 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
|
|
|
135
119
|
return files;
|
|
136
120
|
}
|
|
137
121
|
// Same as gitLsFiles() but using tinyglobby
|
|
138
|
-
async function tinyglobby(userRootDir,
|
|
122
|
+
async function tinyglobby(userRootDir, ignorePatterns) {
|
|
139
123
|
const pattern = `**/+*.${utils_js_1.scriptFileExtensions}`;
|
|
140
124
|
const options = {
|
|
141
|
-
ignore:
|
|
125
|
+
ignore: ignorePatterns,
|
|
142
126
|
cwd: userRootDir,
|
|
143
127
|
dot: false
|
|
144
128
|
};
|
|
@@ -153,35 +137,6 @@ async function tinyglobby(userRootDir, outDirRelativeFromUserRootDir) {
|
|
|
153
137
|
}
|
|
154
138
|
return files;
|
|
155
139
|
}
|
|
156
|
-
// Same as getIgnoreAsFilterFn() but as glob pattern
|
|
157
|
-
function getIgnoreAsPatterns(outDirRelativeFromUserRootDir) {
|
|
158
|
-
const ignoreAsPatterns = [
|
|
159
|
-
'**/node_modules/**',
|
|
160
|
-
'**/ejected/**',
|
|
161
|
-
// Allow:
|
|
162
|
-
// ```
|
|
163
|
-
// +Page.js
|
|
164
|
-
// +Page.telefunc.js
|
|
165
|
-
// ```
|
|
166
|
-
'**/*.telefunc.*',
|
|
167
|
-
// https://github.com/vikejs/vike/discussions/2222
|
|
168
|
-
'**/*.generated.*'
|
|
169
|
-
];
|
|
170
|
-
if (outDirRelativeFromUserRootDir) {
|
|
171
|
-
(0, utils_js_1.assert)(!outDirRelativeFromUserRootDir.startsWith('/'));
|
|
172
|
-
ignoreAsPatterns.push(`${outDirRelativeFromUserRootDir}/**`);
|
|
173
|
-
}
|
|
174
|
-
return ignoreAsPatterns;
|
|
175
|
-
}
|
|
176
|
-
// Same as getIgnoreAsPatterns() but for Array.filter()
|
|
177
|
-
function getIgnoreAsFilterFn(outDirRelativeFromUserRootDir) {
|
|
178
|
-
(0, utils_js_1.assert)(outDirRelativeFromUserRootDir === null || !outDirRelativeFromUserRootDir.startsWith('/'));
|
|
179
|
-
return (file) => !file.includes('node_modules/') &&
|
|
180
|
-
!file.includes('ejected/') &&
|
|
181
|
-
!file.includes('.telefunc.') &&
|
|
182
|
-
!file.includes('.generated.') &&
|
|
183
|
-
(outDirRelativeFromUserRootDir === null || !file.startsWith(`${outDirRelativeFromUserRootDir}/`));
|
|
184
|
-
}
|
|
185
140
|
// Whether Git is installed and whether we can use it
|
|
186
141
|
async function isGitNotUsable(userRootDir) {
|
|
187
142
|
// Check Git version
|
|
@@ -236,11 +191,19 @@ async function runCmd2(cmd, cwd) {
|
|
|
236
191
|
stderr = stderr.toString().trim();
|
|
237
192
|
return { stdout, stderr };
|
|
238
193
|
}
|
|
239
|
-
function
|
|
240
|
-
const
|
|
194
|
+
function getUserSettings() {
|
|
195
|
+
const userSettings = (0, getEnvVarObject_js_1.getEnvVarObject)('VIKE_CRAWL') ?? {};
|
|
241
196
|
const wrongUsage = (settingName, settingType) => `Setting ${picocolors_1.default.cyan(settingName)} in VIKE_CRAWL should be a ${picocolors_1.default.cyan(settingType)}`;
|
|
242
|
-
(0, utils_js_1.assertUsage)((0, utils_js_1.hasProp)(
|
|
243
|
-
|
|
197
|
+
(0, utils_js_1.assertUsage)((0, utils_js_1.hasProp)(userSettings, 'git', 'boolean') || (0, utils_js_1.hasProp)(userSettings, 'git', 'undefined'), wrongUsage('git', 'boolean'));
|
|
198
|
+
(0, utils_js_1.assertUsage)((0, utils_js_1.hasProp)(userSettings, 'ignore', 'string[]') ||
|
|
199
|
+
(0, utils_js_1.hasProp)(userSettings, 'ignore', 'string') ||
|
|
200
|
+
(0, utils_js_1.hasProp)(userSettings, 'ignore', 'undefined'), wrongUsage('git', 'string or an array of strings'));
|
|
201
|
+
(0, utils_js_1.assertUsage)((0, utils_js_1.hasProp)(userSettings, 'ignoreBuiltIn', 'boolean') || (0, utils_js_1.hasProp)(userSettings, 'ignoreBuiltIn', 'undefined'), wrongUsage('ignoreBuiltIn', 'boolean'));
|
|
202
|
+
const settingNames = ['git', 'ignore', 'ignoreBuiltIn'];
|
|
203
|
+
Object.keys(userSettings).forEach((name) => {
|
|
204
|
+
(0, utils_js_1.assertUsage)(settingNames.includes(name), `Unknown setting ${picocolors_1.default.bold(picocolors_1.default.red(name))} in VIKE_CRAWL`);
|
|
205
|
+
});
|
|
206
|
+
return userSettings;
|
|
244
207
|
}
|
|
245
208
|
function isPlusFile(filePath) {
|
|
246
209
|
(0, utils_js_1.assertPosixPath)(filePath);
|
|
@@ -276,3 +239,15 @@ function assertNoUnexpectedPlusSign(filePath: string, fileName: string) {
|
|
|
276
239
|
)
|
|
277
240
|
}
|
|
278
241
|
*/
|
|
242
|
+
function getIgnore(userSettings) {
|
|
243
|
+
const ignorePatternsSetByUser = [userSettings.ignore].flat().filter(utils_js_1.isNotNullish);
|
|
244
|
+
const { ignoreBuiltIn } = userSettings;
|
|
245
|
+
const ignorePatterns = [...(ignoreBuiltIn === false ? [] : ignorePatternsBuiltIn_js_1.ignorePatternsBuiltIn), ...ignorePatternsSetByUser];
|
|
246
|
+
const ignoreMatchers = ignorePatterns.map((p) => (0, picomatch_1.default)(p, {
|
|
247
|
+
// We must pass the same settings than tinyglobby
|
|
248
|
+
// https://github.com/SuperchupuDev/tinyglobby/blob/fcfb08a36c3b4d48d5488c21000c95a956d9797c/src/index.ts#L191-L194
|
|
249
|
+
dot: false,
|
|
250
|
+
nocase: false
|
|
251
|
+
}));
|
|
252
|
+
return { ignorePatterns, ignoreMatchers };
|
|
253
|
+
}
|
package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js
CHANGED
|
@@ -11,7 +11,7 @@ const resolvePointerImport_js_1 = require("./resolvePointerImport.js");
|
|
|
11
11
|
const getFilePath_js_1 = require("../../../../shared/getFilePath.js");
|
|
12
12
|
const assertExtensions_js_1 = require("./assertExtensions.js");
|
|
13
13
|
async function getPlusFilesAll(userRootDir, esbuildCache) {
|
|
14
|
-
const plusFiles = await findPlusFiles(userRootDir
|
|
14
|
+
const plusFiles = await findPlusFiles(userRootDir);
|
|
15
15
|
const configFiles = [];
|
|
16
16
|
const valueFiles = [];
|
|
17
17
|
plusFiles.forEach((f) => {
|
|
@@ -114,8 +114,8 @@ function getPlusFileFromConfigFile(configFile, isExtensionConfig, locationId, us
|
|
|
114
114
|
function sortMakeDeterministic(plusFile1, plusFile2) {
|
|
115
115
|
return plusFile1.filePath.filePathAbsoluteVite < plusFile2.filePath.filePathAbsoluteVite ? -1 : 1;
|
|
116
116
|
}
|
|
117
|
-
async function findPlusFiles(userRootDir
|
|
118
|
-
const files = await (0, crawlPlusFiles_js_1.crawlPlusFiles)(userRootDir
|
|
117
|
+
async function findPlusFiles(userRootDir) {
|
|
118
|
+
const files = await (0, crawlPlusFiles_js_1.crawlPlusFiles)(userRootDir);
|
|
119
119
|
const plusFiles = files.map(({ filePathAbsoluteUserRootDir }) => (0, getFilePath_js_1.getFilePathResolved)({ filePathAbsoluteUserRootDir, userRootDir }));
|
|
120
120
|
return plusFiles;
|
|
121
121
|
}
|
|
@@ -49,7 +49,10 @@ async function getViteRoot(operation) {
|
|
|
49
49
|
}
|
|
50
50
|
async function getInfoFromVite(viteConfigFromOptions, operation) {
|
|
51
51
|
const viteConfigFromUserViteFile = await loadViteConfigFile(viteConfigFromOptions, operation);
|
|
52
|
-
const root = normalizeViteRoot(
|
|
52
|
+
const root = normalizeViteRoot(
|
|
53
|
+
// `viteConfigFromOptions.root` before `viteConfigFromUserViteFile.root` replicates Vite's precedence:
|
|
54
|
+
// https://github.com/vitejs/vite/blob/4f5845a3182fc950eb9cd76d7161698383113b18/packages/vite/src/node/config.ts#L1001
|
|
55
|
+
viteConfigFromOptions?.root ?? viteConfigFromUserViteFile?.root ?? process.cwd());
|
|
53
56
|
globalObject.root = root;
|
|
54
57
|
let vikeVitePluginOptions;
|
|
55
58
|
let viteConfigEnhanced = viteConfigFromOptions;
|
|
@@ -115,7 +118,11 @@ function getResolveConfigArgs(viteConfig = {}, operation) {
|
|
|
115
118
|
return [inlineConfig, command, defaultMode, defaultNodeEnv, isPreview];
|
|
116
119
|
}
|
|
117
120
|
function normalizeViteRoot(root) {
|
|
118
|
-
|
|
121
|
+
// `path.resolve(viteConfigFromUserViteFile.configFile, root)` could be more intuitive than `path.resolve(process.cwd(), root)` but we replicate Vite's behavior (`vite.config.js` should follow Vite's API), see:
|
|
122
|
+
// https://github.com/vitejs/vite/blob/4f5845a3182fc950eb9cd76d7161698383113b18/packages/vite/src/node/config.ts#L1063
|
|
123
|
+
return toPosixPath(
|
|
124
|
+
// Equivalent to `path.resolve(process.cwd(), root)`
|
|
125
|
+
path.resolve(root));
|
|
119
126
|
}
|
|
120
127
|
const errMsg = `A Vite plugin is modifying Vite's setting ${pc.cyan('root')} which is forbidden`;
|
|
121
128
|
async function assertViteRoot2(root, viteConfigEnhanced, operation) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ignorePatternsBuiltIn: readonly ["**/node_modules/**", "**/ejected/**", "**/*.telefunc.*", "**/*.generated.*"];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const ignorePatternsBuiltIn = [
|
|
2
|
+
'**/node_modules/**',
|
|
3
|
+
// Ejected Vike extensions, see https://github.com/snake-py/eject
|
|
4
|
+
'**/ejected/**',
|
|
5
|
+
// Allow:
|
|
6
|
+
// ```bash
|
|
7
|
+
// +Page.js
|
|
8
|
+
// +Page.telefunc.js
|
|
9
|
+
// ```
|
|
10
|
+
'**/*.telefunc.*',
|
|
11
|
+
// https://github.com/vikejs/vike/discussions/2222
|
|
12
|
+
'**/*.generated.*'
|
|
13
|
+
];
|
package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { crawlPlusFiles };
|
|
2
2
|
export { isPlusFile };
|
|
3
3
|
export { getPlusFileValueConfigName };
|
|
4
|
-
declare function crawlPlusFiles(userRootDir: string
|
|
4
|
+
declare function crawlPlusFiles(userRootDir: string): Promise<{
|
|
5
5
|
filePathAbsoluteUserRootDir: string;
|
|
6
6
|
}[]>;
|
|
7
7
|
declare function isPlusFile(filePath: string): boolean;
|
package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { crawlPlusFiles };
|
|
2
2
|
export { isPlusFile };
|
|
3
3
|
export { getPlusFileValueConfigName };
|
|
4
|
-
import { assertPosixPath, assert, scriptFileExtensions, assertIsSingleModuleInstance, assertIsNotProductionRuntime, isVersionOrAbove, isScriptFile, scriptFileExtensionList, createDebugger, deepEqual, assertUsage, assertFilePathAbsoluteFilesystem, assertWarning, hasProp } from '../../../../utils.js';
|
|
4
|
+
import { assertPosixPath, assert, scriptFileExtensions, assertIsSingleModuleInstance, assertIsNotProductionRuntime, isVersionOrAbove, isScriptFile, scriptFileExtensionList, createDebugger, deepEqual, assertUsage, assertFilePathAbsoluteFilesystem, assertWarning, hasProp, isNotNullish } from '../../../../utils.js';
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import { glob } from 'tinyglobby';
|
|
7
7
|
import { exec } from 'child_process';
|
|
@@ -9,36 +9,22 @@ import { promisify } from 'util';
|
|
|
9
9
|
import { isTemporaryBuildFile } from './transpileAndExecuteFile.js';
|
|
10
10
|
import { getEnvVarObject } from '../../../../shared/getEnvVarObject.js';
|
|
11
11
|
import pc from '@brillout/picocolors';
|
|
12
|
+
import picomatch from 'picomatch';
|
|
13
|
+
import { ignorePatternsBuiltIn } from './crawlPlusFiles/ignorePatternsBuiltIn.js';
|
|
12
14
|
const execA = promisify(exec);
|
|
13
15
|
const debug = createDebugger('vike:crawl');
|
|
14
16
|
assertIsNotProductionRuntime();
|
|
15
17
|
assertIsSingleModuleInstance('getVikeConfig/crawlPlusFiles.ts');
|
|
16
18
|
let gitIsNotUsable = false;
|
|
17
|
-
async function crawlPlusFiles(userRootDir
|
|
19
|
+
async function crawlPlusFiles(userRootDir) {
|
|
18
20
|
assertPosixPath(userRootDir);
|
|
19
21
|
assertFilePathAbsoluteFilesystem(userRootDir);
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
/*/
|
|
23
|
-
assertPosixPath(outDirAbsoluteFilesystem)
|
|
24
|
-
let outDirRelativeFromUserRootDir: string | null = path.posix.relative(userRootDir, outDirAbsoluteFilesystem)
|
|
25
|
-
if (outDirRelativeFromUserRootDir.startsWith('../')) {
|
|
26
|
-
// config.outDir is outside of config.root => it's going to be ignored anyways
|
|
27
|
-
outDirRelativeFromUserRootDir = null
|
|
28
|
-
}
|
|
29
|
-
//*/
|
|
30
|
-
assert(outDirRelativeFromUserRootDir === null ||
|
|
31
|
-
/* Not true if outDirRelativeFromUserRootDir starts with a hidden directory (i.e. a directory with a name that starts with `.`)
|
|
32
|
-
!outDirRelativeFromUserRootDir.startsWith('.') &&
|
|
33
|
-
*/
|
|
34
|
-
(!outDirRelativeFromUserRootDir.startsWith('./') &&
|
|
35
|
-
//
|
|
36
|
-
!outDirRelativeFromUserRootDir.startsWith('../')));
|
|
37
|
-
const crawSettings = getCrawlSettings();
|
|
22
|
+
const userSettings = getUserSettings();
|
|
23
|
+
const { ignorePatterns, ignoreMatchers } = getIgnore(userSettings);
|
|
38
24
|
// Crawl
|
|
39
|
-
const filesGit =
|
|
25
|
+
const filesGit = userSettings.git !== false && (await gitLsFiles(userRootDir, ignorePatterns, ignoreMatchers));
|
|
40
26
|
const filesGitNothingFound = !filesGit || filesGit.length === 0;
|
|
41
|
-
const filesGlob = (filesGitNothingFound || debug.isActivated) && (await tinyglobby(userRootDir,
|
|
27
|
+
const filesGlob = (filesGitNothingFound || debug.isActivated) && (await tinyglobby(userRootDir, ignorePatterns));
|
|
42
28
|
let files = !filesGitNothingFound
|
|
43
29
|
? filesGit
|
|
44
30
|
: // Fallback to tinyglobby for users that dynamically generate plus files. (Assuming that no plus file is found because of the user's .gitignore list.)
|
|
@@ -63,7 +49,7 @@ async function crawlPlusFiles(userRootDir, outDirAbsoluteFilesystem) {
|
|
|
63
49
|
return plusFiles;
|
|
64
50
|
}
|
|
65
51
|
// Same as tinyglobby() but using `$ git ls-files`
|
|
66
|
-
async function gitLsFiles(userRootDir,
|
|
52
|
+
async function gitLsFiles(userRootDir, ignorePatterns, ignoreMatchers) {
|
|
67
53
|
if (gitIsNotUsable)
|
|
68
54
|
return null;
|
|
69
55
|
// Preserve UTF-8 file paths.
|
|
@@ -71,8 +57,6 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
|
|
|
71
57
|
// https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8-encoded-pathnames-in-the-console-window/22828826#22828826
|
|
72
58
|
// https://stackoverflow.com/questions/15884180/how-do-i-override-git-configuration-options-by-command-line-parameters/15884261#15884261
|
|
73
59
|
const preserveUTF8 = '-c core.quotepath=off';
|
|
74
|
-
const ignoreAsPatterns = getIgnoreAsPatterns(outDirRelativeFromUserRootDir);
|
|
75
|
-
const ignoreAsFilterFn = getIgnoreAsFilterFn(outDirRelativeFromUserRootDir);
|
|
76
60
|
const cmd = [
|
|
77
61
|
'git',
|
|
78
62
|
preserveUTF8,
|
|
@@ -82,7 +66,7 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
|
|
|
82
66
|
// Performance gain is non-negligible.
|
|
83
67
|
// - https://github.com/vikejs/vike/pull/1688#issuecomment-2166206648
|
|
84
68
|
// - When node_modules/ is untracked the performance gain could be significant?
|
|
85
|
-
...
|
|
69
|
+
...ignorePatterns.map((pattern) => `--exclude="${pattern}"`),
|
|
86
70
|
// --others --exclude-standard => list untracked files (--others) while using .gitignore (--exclude-standard)
|
|
87
71
|
// --cached => list tracked files
|
|
88
72
|
'--others --exclude-standard --cached'
|
|
@@ -117,7 +101,7 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
|
|
|
117
101
|
if (!path.posix.basename(filePath).startsWith('+'))
|
|
118
102
|
continue;
|
|
119
103
|
// We have to repeat the same exclusion logic here because the option --exclude of `$ git ls-files` only applies to untracked files. (We use --exclude only to speed up the `$ git ls-files` command.)
|
|
120
|
-
if (
|
|
104
|
+
if (ignoreMatchers.some((m) => m(filePath)))
|
|
121
105
|
continue;
|
|
122
106
|
// JavaScript file?
|
|
123
107
|
if (!isScriptFile(filePath))
|
|
@@ -130,10 +114,10 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
|
|
|
130
114
|
return files;
|
|
131
115
|
}
|
|
132
116
|
// Same as gitLsFiles() but using tinyglobby
|
|
133
|
-
async function tinyglobby(userRootDir,
|
|
117
|
+
async function tinyglobby(userRootDir, ignorePatterns) {
|
|
134
118
|
const pattern = `**/+*.${scriptFileExtensions}`;
|
|
135
119
|
const options = {
|
|
136
|
-
ignore:
|
|
120
|
+
ignore: ignorePatterns,
|
|
137
121
|
cwd: userRootDir,
|
|
138
122
|
dot: false
|
|
139
123
|
};
|
|
@@ -148,35 +132,6 @@ async function tinyglobby(userRootDir, outDirRelativeFromUserRootDir) {
|
|
|
148
132
|
}
|
|
149
133
|
return files;
|
|
150
134
|
}
|
|
151
|
-
// Same as getIgnoreAsFilterFn() but as glob pattern
|
|
152
|
-
function getIgnoreAsPatterns(outDirRelativeFromUserRootDir) {
|
|
153
|
-
const ignoreAsPatterns = [
|
|
154
|
-
'**/node_modules/**',
|
|
155
|
-
'**/ejected/**',
|
|
156
|
-
// Allow:
|
|
157
|
-
// ```
|
|
158
|
-
// +Page.js
|
|
159
|
-
// +Page.telefunc.js
|
|
160
|
-
// ```
|
|
161
|
-
'**/*.telefunc.*',
|
|
162
|
-
// https://github.com/vikejs/vike/discussions/2222
|
|
163
|
-
'**/*.generated.*'
|
|
164
|
-
];
|
|
165
|
-
if (outDirRelativeFromUserRootDir) {
|
|
166
|
-
assert(!outDirRelativeFromUserRootDir.startsWith('/'));
|
|
167
|
-
ignoreAsPatterns.push(`${outDirRelativeFromUserRootDir}/**`);
|
|
168
|
-
}
|
|
169
|
-
return ignoreAsPatterns;
|
|
170
|
-
}
|
|
171
|
-
// Same as getIgnoreAsPatterns() but for Array.filter()
|
|
172
|
-
function getIgnoreAsFilterFn(outDirRelativeFromUserRootDir) {
|
|
173
|
-
assert(outDirRelativeFromUserRootDir === null || !outDirRelativeFromUserRootDir.startsWith('/'));
|
|
174
|
-
return (file) => !file.includes('node_modules/') &&
|
|
175
|
-
!file.includes('ejected/') &&
|
|
176
|
-
!file.includes('.telefunc.') &&
|
|
177
|
-
!file.includes('.generated.') &&
|
|
178
|
-
(outDirRelativeFromUserRootDir === null || !file.startsWith(`${outDirRelativeFromUserRootDir}/`));
|
|
179
|
-
}
|
|
180
135
|
// Whether Git is installed and whether we can use it
|
|
181
136
|
async function isGitNotUsable(userRootDir) {
|
|
182
137
|
// Check Git version
|
|
@@ -231,11 +186,19 @@ async function runCmd2(cmd, cwd) {
|
|
|
231
186
|
stderr = stderr.toString().trim();
|
|
232
187
|
return { stdout, stderr };
|
|
233
188
|
}
|
|
234
|
-
function
|
|
235
|
-
const
|
|
189
|
+
function getUserSettings() {
|
|
190
|
+
const userSettings = getEnvVarObject('VIKE_CRAWL') ?? {};
|
|
236
191
|
const wrongUsage = (settingName, settingType) => `Setting ${pc.cyan(settingName)} in VIKE_CRAWL should be a ${pc.cyan(settingType)}`;
|
|
237
|
-
assertUsage(hasProp(
|
|
238
|
-
|
|
192
|
+
assertUsage(hasProp(userSettings, 'git', 'boolean') || hasProp(userSettings, 'git', 'undefined'), wrongUsage('git', 'boolean'));
|
|
193
|
+
assertUsage(hasProp(userSettings, 'ignore', 'string[]') ||
|
|
194
|
+
hasProp(userSettings, 'ignore', 'string') ||
|
|
195
|
+
hasProp(userSettings, 'ignore', 'undefined'), wrongUsage('git', 'string or an array of strings'));
|
|
196
|
+
assertUsage(hasProp(userSettings, 'ignoreBuiltIn', 'boolean') || hasProp(userSettings, 'ignoreBuiltIn', 'undefined'), wrongUsage('ignoreBuiltIn', 'boolean'));
|
|
197
|
+
const settingNames = ['git', 'ignore', 'ignoreBuiltIn'];
|
|
198
|
+
Object.keys(userSettings).forEach((name) => {
|
|
199
|
+
assertUsage(settingNames.includes(name), `Unknown setting ${pc.bold(pc.red(name))} in VIKE_CRAWL`);
|
|
200
|
+
});
|
|
201
|
+
return userSettings;
|
|
239
202
|
}
|
|
240
203
|
function isPlusFile(filePath) {
|
|
241
204
|
assertPosixPath(filePath);
|
|
@@ -271,3 +234,15 @@ function assertNoUnexpectedPlusSign(filePath: string, fileName: string) {
|
|
|
271
234
|
)
|
|
272
235
|
}
|
|
273
236
|
*/
|
|
237
|
+
function getIgnore(userSettings) {
|
|
238
|
+
const ignorePatternsSetByUser = [userSettings.ignore].flat().filter(isNotNullish);
|
|
239
|
+
const { ignoreBuiltIn } = userSettings;
|
|
240
|
+
const ignorePatterns = [...(ignoreBuiltIn === false ? [] : ignorePatternsBuiltIn), ...ignorePatternsSetByUser];
|
|
241
|
+
const ignoreMatchers = ignorePatterns.map((p) => picomatch(p, {
|
|
242
|
+
// We must pass the same settings than tinyglobby
|
|
243
|
+
// https://github.com/SuperchupuDev/tinyglobby/blob/fcfb08a36c3b4d48d5488c21000c95a956d9797c/src/index.ts#L191-L194
|
|
244
|
+
dot: false,
|
|
245
|
+
nocase: false
|
|
246
|
+
}));
|
|
247
|
+
return { ignorePatterns, ignoreMatchers };
|
|
248
|
+
}
|
package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js
CHANGED
|
@@ -9,7 +9,7 @@ import { resolvePointerImport } from './resolvePointerImport.js';
|
|
|
9
9
|
import { getFilePathResolved } from '../../../../shared/getFilePath.js';
|
|
10
10
|
import { assertExtensionsConventions } from './assertExtensions.js';
|
|
11
11
|
async function getPlusFilesAll(userRootDir, esbuildCache) {
|
|
12
|
-
const plusFiles = await findPlusFiles(userRootDir
|
|
12
|
+
const plusFiles = await findPlusFiles(userRootDir);
|
|
13
13
|
const configFiles = [];
|
|
14
14
|
const valueFiles = [];
|
|
15
15
|
plusFiles.forEach((f) => {
|
|
@@ -112,8 +112,8 @@ function getPlusFileFromConfigFile(configFile, isExtensionConfig, locationId, us
|
|
|
112
112
|
function sortMakeDeterministic(plusFile1, plusFile2) {
|
|
113
113
|
return plusFile1.filePath.filePathAbsoluteVite < plusFile2.filePath.filePathAbsoluteVite ? -1 : 1;
|
|
114
114
|
}
|
|
115
|
-
async function findPlusFiles(userRootDir
|
|
116
|
-
const files = await crawlPlusFiles(userRootDir
|
|
115
|
+
async function findPlusFiles(userRootDir) {
|
|
116
|
+
const files = await crawlPlusFiles(userRootDir);
|
|
117
117
|
const plusFiles = files.map(({ filePathAbsoluteUserRootDir }) => getFilePathResolved({ filePathAbsoluteUserRootDir, userRootDir }));
|
|
118
118
|
return plusFiles;
|
|
119
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PROJECT_VERSION: "0.4.223-commit-
|
|
1
|
+
export declare const PROJECT_VERSION: "0.4.223-commit-32cd543";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Automatically updated by @brillout/release-me
|
|
2
|
-
export const PROJECT_VERSION = '0.4.223-commit-
|
|
2
|
+
export const PROJECT_VERSION = '0.4.223-commit-32cd543';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vike",
|
|
3
|
-
"version": "0.4.223-commit-
|
|
3
|
+
"version": "0.4.223-commit-32cd543",
|
|
4
4
|
"repository": "https://github.com/vikejs/vike",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./server": {
|
|
@@ -129,6 +129,7 @@
|
|
|
129
129
|
"es-module-lexer": "^1.0.0",
|
|
130
130
|
"esbuild": "^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0",
|
|
131
131
|
"json5": "^2.0.0",
|
|
132
|
+
"picomatch": "^4.0.2",
|
|
132
133
|
"semver": "^7.0.0",
|
|
133
134
|
"source-map-support": "^0.5.0",
|
|
134
135
|
"tinyglobby": "^0.2.10",
|
|
@@ -246,6 +247,7 @@
|
|
|
246
247
|
"@types/estree": "^1.0.5",
|
|
247
248
|
"@types/jest": "^29.5.11",
|
|
248
249
|
"@types/node": "^20.10.5",
|
|
250
|
+
"@types/picomatch": "^3.0.2",
|
|
249
251
|
"@types/resolve": "^1.20.6",
|
|
250
252
|
"@types/semver": "^7.5.8",
|
|
251
253
|
"@types/source-map-support": "^0.5.10",
|