@vercel/fs-detectors 1.0.0
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/LICENSE +202 -0
- package/dist/detect-builders.d.ts +37 -0
- package/dist/detect-builders.js +842 -0
- package/dist/detect-builders.js.map +1 -0
- package/dist/detect-file-system-api.d.ts +34 -0
- package/dist/detect-file-system-api.js +174 -0
- package/dist/detect-file-system-api.js.map +1 -0
- package/dist/detect-framework.d.ts +12 -0
- package/dist/detect-framework.js +61 -0
- package/dist/detect-framework.js.map +1 -0
- package/dist/detectors/filesystem.d.ts +54 -0
- package/dist/detectors/filesystem.js +79 -0
- package/dist/detectors/filesystem.js.map +1 -0
- package/dist/get-project-paths.d.ts +9 -0
- package/dist/get-project-paths.js +40 -0
- package/dist/get-project-paths.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/is-official-runtime.d.ts +2 -0
- package/dist/is-official-runtime.js +24 -0
- package/dist/is-official-runtime.js.map +1 -0
- package/dist/monorepos/monorepo-managers.d.ts +16 -0
- package/dist/monorepos/monorepo-managers.js +35 -0
- package/dist/monorepos/monorepo-managers.js.map +1 -0
- package/dist/workspaces/get-glob-fs.d.ts +6 -0
- package/dist/workspaces/get-glob-fs.js +72 -0
- package/dist/workspaces/get-glob-fs.js.map +1 -0
- package/dist/workspaces/get-workspace-package-paths.d.ts +11 -0
- package/dist/workspaces/get-workspace-package-paths.js +64 -0
- package/dist/workspaces/get-workspace-package-paths.js.map +1 -0
- package/dist/workspaces/get-workspaces.d.ts +12 -0
- package/dist/workspaces/get-workspaces.js +36 -0
- package/dist/workspaces/get-workspaces.js.map +1 -0
- package/dist/workspaces/workspace-managers.d.ts +16 -0
- package/dist/workspaces/workspace-managers.js +61 -0
- package/dist/workspaces/workspace-managers.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Framework } from '@vercel/frameworks';
|
|
2
|
+
/**
|
|
3
|
+
* The supported list of monorepo managers.
|
|
4
|
+
*
|
|
5
|
+
* This list is designed to work with the @see {@link detectFramework} function.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* import { monorepoManagers as frameworkList } from '@vercel/fs-detectors'
|
|
9
|
+
* import { detectFramework } from '@vercel/fs-detectors'
|
|
10
|
+
*
|
|
11
|
+
* const fs = new GitDetectorFilesystem(...)
|
|
12
|
+
* detectFramwork({ fs, frameworkList }) // returns the 'slug' field if detected, otherwise null
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
export declare const monorepoManagers: Array<Omit<Framework, 'description' | 'logo' | 'settings' | 'getOutputDirName'>>;
|
|
16
|
+
export default monorepoManagers;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.monorepoManagers = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* The supported list of monorepo managers.
|
|
6
|
+
*
|
|
7
|
+
* This list is designed to work with the @see {@link detectFramework} function.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* import { monorepoManagers as frameworkList } from '@vercel/fs-detectors'
|
|
11
|
+
* import { detectFramework } from '@vercel/fs-detectors'
|
|
12
|
+
*
|
|
13
|
+
* const fs = new GitDetectorFilesystem(...)
|
|
14
|
+
* detectFramwork({ fs, frameworkList }) // returns the 'slug' field if detected, otherwise null
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
exports.monorepoManagers = [
|
|
18
|
+
{
|
|
19
|
+
name: 'Turborepo',
|
|
20
|
+
slug: 'turbo',
|
|
21
|
+
detectors: {
|
|
22
|
+
some: [
|
|
23
|
+
{
|
|
24
|
+
path: 'turbo.json',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
path: 'package.json',
|
|
28
|
+
matchContent: '"turbo":\\s*{[^}]*.+[^}]*}',
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
exports.default = exports.monorepoManagers;
|
|
35
|
+
//# sourceMappingURL=monorepo-managers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo-managers.js","sourceRoot":"","sources":["../../src/monorepos/monorepo-managers.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;GAYG;AACU,QAAA,gBAAgB,GAEzB;IACF;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,SAAS,EAAE;YACT,IAAI,EAAE;gBACJ;oBACE,IAAI,EAAE,YAAY;iBACnB;gBACD;oBACE,IAAI,EAAE,cAAc;oBACpB,YAAY,EAAE,4BAA4B;iBAC3C;aACF;SACF;KACF;CACF,CAAC;AAEF,kBAAe,wBAAgB,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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.getGlobFs = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
function removeWindowsPrefix(path) {
|
|
9
|
+
// on windows, this will return a path like
|
|
10
|
+
// D:/c/package.json
|
|
11
|
+
// since we abstract the filesystem, we need to remove windows specific info from the path
|
|
12
|
+
// and let the FS decide how to process the path
|
|
13
|
+
// D:/c/package.json => /c/package.json
|
|
14
|
+
return path.replace(/^[a-zA-Z]:/, '');
|
|
15
|
+
}
|
|
16
|
+
function getGlobFs(_fs) {
|
|
17
|
+
const readdir = (path, callback) => {
|
|
18
|
+
_fs
|
|
19
|
+
.readdir(removeWindowsPrefix(String(path)))
|
|
20
|
+
.then(stats => callback(null, stats.map(stat => stat.name)))
|
|
21
|
+
.catch(err => callback(err, []));
|
|
22
|
+
};
|
|
23
|
+
const stat = (path, callback) => {
|
|
24
|
+
_fs
|
|
25
|
+
.isFile(removeWindowsPrefix(String(path)))
|
|
26
|
+
.then(isPathAFile => {
|
|
27
|
+
callback(null, {
|
|
28
|
+
ino: 0,
|
|
29
|
+
mode: 0,
|
|
30
|
+
nlink: 0,
|
|
31
|
+
uid: 0,
|
|
32
|
+
gid: 0,
|
|
33
|
+
rdev: 0,
|
|
34
|
+
size: 0,
|
|
35
|
+
blksize: 0,
|
|
36
|
+
blocks: 0,
|
|
37
|
+
atimeMs: 0,
|
|
38
|
+
mtimeMs: 0,
|
|
39
|
+
ctimeMs: 0,
|
|
40
|
+
birthtimeMs: 0,
|
|
41
|
+
atime: new Date(),
|
|
42
|
+
mtime: new Date(),
|
|
43
|
+
ctime: new Date(),
|
|
44
|
+
birthtime: new Date(),
|
|
45
|
+
dev: 0,
|
|
46
|
+
isBlockDevice: () => false,
|
|
47
|
+
isCharacterDevice: () => false,
|
|
48
|
+
isDirectory: () => !isPathAFile,
|
|
49
|
+
isFIFO: () => false,
|
|
50
|
+
isFile: () => isPathAFile,
|
|
51
|
+
isSocket: () => false,
|
|
52
|
+
isSymbolicLink: () => false,
|
|
53
|
+
});
|
|
54
|
+
})
|
|
55
|
+
.catch(err => callback(err, null));
|
|
56
|
+
};
|
|
57
|
+
return new Proxy(fs_1.default, {
|
|
58
|
+
get(_target, prop) {
|
|
59
|
+
switch (prop) {
|
|
60
|
+
case 'readdir':
|
|
61
|
+
return readdir;
|
|
62
|
+
case 'lstat':
|
|
63
|
+
case 'stat':
|
|
64
|
+
return stat;
|
|
65
|
+
default:
|
|
66
|
+
throw new Error('Not Implemented');
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
exports.getGlobFs = getGlobFs;
|
|
72
|
+
//# sourceMappingURL=get-glob-fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-glob-fs.js","sourceRoot":"","sources":["../../src/workspaces/get-glob-fs.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AAKpB,SAAS,mBAAmB,CAAC,IAAY;IACvC,2CAA2C;IAC3C,oBAAoB;IACpB,0FAA0F;IAC1F,gDAAgD;IAChD,uCAAuC;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,SAAS,CAAC,GAAuB;IAC/C,MAAM,OAAO,GAAG,CACd,IAAiB,EACjB,QAAsE,EAChE,EAAE;QACR,GAAG;aACA,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;aAC1C,IAAI,CAAC,KAAK,CAAC,EAAE,CACZ,QAAQ,CACN,IAAI,EACJ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7B,CACF;aACA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CACX,IAAiB,EACjB,QAGS,EACH,EAAE;QACR,GAAG;aACA,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;aACzC,IAAI,CAAC,WAAW,CAAC,EAAE;YAClB,QAAQ,CAAC,IAAI,EAAE;gBACb,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;gBACV,WAAW,EAAE,CAAC;gBACd,KAAK,EAAE,IAAI,IAAI,EAAE;gBACjB,KAAK,EAAE,IAAI,IAAI,EAAE;gBACjB,KAAK,EAAE,IAAI,IAAI,EAAE;gBACjB,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,GAAG,EAAE,CAAC;gBACN,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;gBAC1B,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK;gBAC9B,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW;gBAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;gBACnB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW;gBACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;gBACrB,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK;aAC5B,CAAC,CAAC;QACL,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,OAAO,IAAI,KAAK,CAAC,YAAE,EAAE;QACnB,GAAG,CAAC,OAAO,EAAE,IAAI;YACf,QAAQ,IAAI,EAAE;gBACZ,KAAK,SAAS;oBACZ,OAAO,OAAO,CAAC;gBACjB,KAAK,OAAO,CAAC;gBACb,KAAK,MAAM;oBACT,OAAO,IAAI,CAAC;gBACd;oBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACtC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAtED,8BAsEC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DetectorFilesystem } from '../detectors/filesystem';
|
|
2
|
+
import { Workspace } from './get-workspaces';
|
|
3
|
+
interface GetPackagePathOptions {
|
|
4
|
+
fs: DetectorFilesystem;
|
|
5
|
+
}
|
|
6
|
+
export interface GetWorkspacePackagePathsOptions extends GetPackagePathOptions {
|
|
7
|
+
fs: DetectorFilesystem;
|
|
8
|
+
workspace: Workspace;
|
|
9
|
+
}
|
|
10
|
+
export declare function getWorkspacePackagePaths({ fs, workspace, }: GetWorkspacePackagePathsOptions): Promise<string[]>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
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.getWorkspacePackagePaths = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
9
|
+
const glob_1 = __importDefault(require("glob"));
|
|
10
|
+
const get_glob_fs_1 = require("./get-glob-fs");
|
|
11
|
+
const posixPath = path_1.default.posix;
|
|
12
|
+
async function getWorkspacePackagePaths({ fs, workspace, }) {
|
|
13
|
+
const { type, rootPath } = workspace;
|
|
14
|
+
const workspaceFs = fs.chdir(rootPath);
|
|
15
|
+
let results = [];
|
|
16
|
+
switch (type) {
|
|
17
|
+
case 'yarn':
|
|
18
|
+
case 'npm':
|
|
19
|
+
results = await getPackageJsonWorkspacePackagePaths({ fs: workspaceFs });
|
|
20
|
+
break;
|
|
21
|
+
case 'pnpm':
|
|
22
|
+
results = await getPnpmWorkspacePackagePaths({ fs: workspaceFs });
|
|
23
|
+
break;
|
|
24
|
+
default:
|
|
25
|
+
throw new Error(`Unknown workspace implementation: ${type}`);
|
|
26
|
+
}
|
|
27
|
+
return results.map(packagePath => {
|
|
28
|
+
return posixPath.join(rootPath, posixPath.dirname(packagePath));
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
exports.getWorkspacePackagePaths = getWorkspacePackagePaths;
|
|
32
|
+
const isWin = process.platform === 'win32';
|
|
33
|
+
const normalizePath = (p) => (isWin ? p.replace(/\\/g, '/') : p);
|
|
34
|
+
async function getPackagePaths(packages, fs) {
|
|
35
|
+
return (await Promise.all(packages.map(packageGlob => new Promise((resolve, reject) => {
|
|
36
|
+
glob_1.default(normalizePath(posixPath.join(packageGlob, 'package.json')), {
|
|
37
|
+
cwd: '/',
|
|
38
|
+
fs: get_glob_fs_1.getGlobFs(fs),
|
|
39
|
+
}, (err, matches) => {
|
|
40
|
+
if (err)
|
|
41
|
+
reject(err);
|
|
42
|
+
else
|
|
43
|
+
resolve(matches);
|
|
44
|
+
});
|
|
45
|
+
})))).flat();
|
|
46
|
+
}
|
|
47
|
+
async function getPackageJsonWorkspacePackagePaths({ fs, }) {
|
|
48
|
+
const packageJsonAsBuffer = await fs.readFile('package.json');
|
|
49
|
+
const { workspaces } = JSON.parse(packageJsonAsBuffer.toString());
|
|
50
|
+
let packages = [];
|
|
51
|
+
if (Array.isArray(workspaces)) {
|
|
52
|
+
packages = workspaces;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
packages = workspaces?.packages ?? [];
|
|
56
|
+
}
|
|
57
|
+
return getPackagePaths(packages, fs);
|
|
58
|
+
}
|
|
59
|
+
async function getPnpmWorkspacePackagePaths({ fs, }) {
|
|
60
|
+
const pnpmWorkspaceAsBuffer = await fs.readFile('pnpm-workspace.yaml');
|
|
61
|
+
const { packages = [] } = js_yaml_1.default.load(pnpmWorkspaceAsBuffer.toString());
|
|
62
|
+
return getPackagePaths(packages, fs);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=get-workspace-package-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-workspace-package-paths.js","sourceRoot":"","sources":["../../src/workspaces/get-workspace-package-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DetectorFilesystem } from '../detectors/filesystem';
|
|
2
|
+
export interface GetWorkspaceOptions {
|
|
3
|
+
fs: DetectorFilesystem;
|
|
4
|
+
depth?: number;
|
|
5
|
+
cwd?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare type WorkspaceType = 'yarn' | 'pnpm' | 'npm';
|
|
8
|
+
export declare type Workspace = {
|
|
9
|
+
type: WorkspaceType;
|
|
10
|
+
rootPath: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function getWorkspaces({ fs, depth, cwd, }: GetWorkspaceOptions): Promise<Workspace[]>;
|
|
@@ -0,0 +1,36 @@
|
|
|
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.getWorkspaces = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const workspace_managers_1 = require("./workspace-managers");
|
|
9
|
+
const detect_framework_1 = require("../detect-framework");
|
|
10
|
+
const MAX_DEPTH_TRAVERSE = 3;
|
|
11
|
+
const posixPath = path_1.default.posix;
|
|
12
|
+
async function getWorkspaces({ fs, depth = MAX_DEPTH_TRAVERSE, cwd = '/', }) {
|
|
13
|
+
if (depth === 0)
|
|
14
|
+
return [];
|
|
15
|
+
const workspaceType = await detect_framework_1.detectFramework({
|
|
16
|
+
fs,
|
|
17
|
+
frameworkList: workspace_managers_1.workspaceManagers,
|
|
18
|
+
});
|
|
19
|
+
if (workspaceType === null) {
|
|
20
|
+
const directoryContents = await fs.readdir('./');
|
|
21
|
+
const childDirectories = directoryContents.filter(stat => stat.type === 'dir');
|
|
22
|
+
return (await Promise.all(childDirectories.map(childDirectory => getWorkspaces({
|
|
23
|
+
fs: fs.chdir(childDirectory.path),
|
|
24
|
+
depth: depth - 1,
|
|
25
|
+
cwd: posixPath.join(cwd, childDirectory.path),
|
|
26
|
+
})))).flat();
|
|
27
|
+
}
|
|
28
|
+
return [
|
|
29
|
+
{
|
|
30
|
+
type: workspaceType,
|
|
31
|
+
rootPath: cwd,
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
exports.getWorkspaces = getWorkspaces;
|
|
36
|
+
//# sourceMappingURL=get-workspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-workspaces.js","sourceRoot":"","sources":["../../src/workspaces/get-workspaces.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,6DAAyD;AACzD,0DAAiF;AAEjF,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,SAAS,GAAG,cAAI,CAAC,KAAK,CAAC;AAetB,KAAK,UAAU,aAAa,CAAC,EAClC,EAAE,EACF,KAAK,GAAG,kBAAkB,EAC1B,GAAG,GAAG,GAAG,GACW;IACpB,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,aAAa,GAAG,MAAM,kCAAuB,CAAC;QAClD,EAAE;QACF,aAAa,EAAE,sCAAiB;KACjC,CAAC,CAAC;IAEH,IAAI,aAAa,KAAK,IAAI,EAAE;QAC1B,MAAM,iBAAiB,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,CAC/C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAC5B,CAAC;QAEF,OAAO,CACL,MAAM,OAAO,CAAC,GAAG,CACf,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CACpC,aAAa,CAAC;YACZ,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,KAAK,GAAG,CAAC;YAChB,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC;SAC9C,CAAC,CACH,CACF,CACF,CAAC,IAAI,EAAE,CAAC;KACV;IAED,OAAO;QACL;YACE,IAAI,EAAE,aAA8B;YACpC,QAAQ,EAAE,GAAG;SACd;KACF,CAAC;AACJ,CAAC;AArCD,sCAqCC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Framework } from '@vercel/frameworks';
|
|
2
|
+
/**
|
|
3
|
+
* The supported list of workspace managers.
|
|
4
|
+
*
|
|
5
|
+
* This list is designed to work with the @see {@link detectFramework} function.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* import { workspaceManagers as frameworkList } from '@vercel/fs-detectors'
|
|
9
|
+
* import { detectFramework } from '@vercel/fs-detectors'
|
|
10
|
+
*
|
|
11
|
+
* const fs = new GitDetectorFilesystem(...)
|
|
12
|
+
* detectFramwork({ fs, frameworkList }) // returns the 'slug' field if detected, otherwise null
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
export declare const workspaceManagers: Array<Omit<Framework, 'description' | 'logo' | 'settings' | 'getOutputDirName'>>;
|
|
16
|
+
export default workspaceManagers;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.workspaceManagers = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* The supported list of workspace managers.
|
|
6
|
+
*
|
|
7
|
+
* This list is designed to work with the @see {@link detectFramework} function.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* import { workspaceManagers as frameworkList } from '@vercel/fs-detectors'
|
|
11
|
+
* import { detectFramework } from '@vercel/fs-detectors'
|
|
12
|
+
*
|
|
13
|
+
* const fs = new GitDetectorFilesystem(...)
|
|
14
|
+
* detectFramwork({ fs, frameworkList }) // returns the 'slug' field if detected, otherwise null
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
exports.workspaceManagers = [
|
|
18
|
+
{
|
|
19
|
+
name: 'Yarn',
|
|
20
|
+
slug: 'yarn',
|
|
21
|
+
detectors: {
|
|
22
|
+
every: [
|
|
23
|
+
{
|
|
24
|
+
path: 'package.json',
|
|
25
|
+
matchContent: '"workspaces":\\s*(?:\\[[^\\]]*]|{[^}]*"packages":[^}]*})',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
path: 'yarn.lock',
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'pnpm',
|
|
35
|
+
slug: 'pnpm',
|
|
36
|
+
detectors: {
|
|
37
|
+
every: [
|
|
38
|
+
{
|
|
39
|
+
path: 'pnpm-workspace.yaml',
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'npm',
|
|
46
|
+
slug: 'npm',
|
|
47
|
+
detectors: {
|
|
48
|
+
every: [
|
|
49
|
+
{
|
|
50
|
+
path: 'package.json',
|
|
51
|
+
matchContent: '"workspaces":\\s*(?:\\[[^\\]]*]|{[^}]*"packages":[^}]*})',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
path: 'package-lock.json',
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
exports.default = exports.workspaceManagers;
|
|
61
|
+
//# sourceMappingURL=workspace-managers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-managers.js","sourceRoot":"","sources":["../../src/workspaces/workspace-managers.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;GAYG;AACU,QAAA,iBAAiB,GAE1B;IACF;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE;YACT,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,cAAc;oBACpB,YAAY,EACV,0DAA0D;iBAC7D;gBACD;oBACE,IAAI,EAAE,WAAW;iBAClB;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE;YACT,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,qBAAqB;iBAC5B;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,SAAS,EAAE;YACT,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,cAAc;oBACpB,YAAY,EACV,0DAA0D;iBAC7D;gBACD;oBACE,IAAI,EAAE,mBAAmB;iBAC1B;aACF;SACF;KACF;CACF,CAAC;AAEF,kBAAe,yBAAiB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vercel/fs-detectors",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Vercel filesystem detectors",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/vercel/vercel.git",
|
|
13
|
+
"directory": "packages/fs-detectors"
|
|
14
|
+
},
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"scripts": {
|
|
17
|
+
"prepublishOnly": "tsc",
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"test": "yarn jest --env node --verbose --runInBand --bail test/unit.*test.*",
|
|
20
|
+
"test-unit": "yarn test"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@vercel/frameworks": "1.0.2",
|
|
24
|
+
"@vercel/routing-utils": "1.13.5",
|
|
25
|
+
"glob": "8.0.3",
|
|
26
|
+
"js-yaml": "4.1.0",
|
|
27
|
+
"minimatch": "3.0.4",
|
|
28
|
+
"semver": "6.1.1"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/glob": "7.2.0",
|
|
32
|
+
"@types/jest": "27.5.1",
|
|
33
|
+
"@types/js-yaml": "4.0.5",
|
|
34
|
+
"@types/minimatch": "3.0.5",
|
|
35
|
+
"@types/node": "12.12.20",
|
|
36
|
+
"@types/semver": "7.3.10",
|
|
37
|
+
"@vercel/build-utils": "4.2.0",
|
|
38
|
+
"typescript": "4.3.4"
|
|
39
|
+
},
|
|
40
|
+
"gitHead": "621b53bc49a1ac4aaf6ab986f9bbbdd517af01f5"
|
|
41
|
+
}
|