create-payload-app 1.0.0 → 3.0.0-alpha.54
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 +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -0
- package/dist/lib/configure-payload-config.d.ts +11 -0
- package/dist/lib/configure-payload-config.d.ts.map +1 -0
- package/dist/lib/configure-payload-config.js +15 -53
- package/dist/lib/configure-payload-config.js.map +1 -0
- package/dist/lib/create-project.d.ts +14 -0
- package/dist/lib/create-project.d.ts.map +1 -0
- package/dist/lib/create-project.js +84 -24
- package/dist/lib/create-project.js.map +1 -0
- package/dist/lib/create-project.spec.d.ts +2 -0
- package/dist/lib/create-project.spec.d.ts.map +1 -0
- package/dist/lib/create-project.spec.js +30 -75
- package/dist/lib/create-project.spec.js.map +1 -0
- package/dist/lib/generate-secret.d.ts +2 -0
- package/dist/lib/generate-secret.d.ts.map +1 -0
- package/dist/lib/generate-secret.js +1 -1
- package/dist/lib/generate-secret.js.map +1 -0
- package/dist/lib/init-next.d.ts +29 -0
- package/dist/lib/init-next.d.ts.map +1 -0
- package/dist/lib/init-next.js +285 -0
- package/dist/lib/init-next.js.map +1 -0
- package/dist/lib/packages.d.ts +9 -0
- package/dist/lib/packages.d.ts.map +1 -0
- package/dist/lib/packages.js +8 -52
- package/dist/lib/packages.js.map +1 -0
- package/dist/lib/parse-project-name.d.ts +3 -0
- package/dist/lib/parse-project-name.d.ts.map +1 -0
- package/dist/lib/parse-project-name.js +53 -12
- package/dist/lib/parse-project-name.js.map +1 -0
- package/dist/lib/parse-template.d.ts +3 -0
- package/dist/lib/parse-template.d.ts.map +1 -0
- package/dist/lib/parse-template.js +50 -20
- package/dist/lib/parse-template.js.map +1 -0
- package/dist/lib/select-db.d.ts +3 -0
- package/dist/lib/select-db.d.ts.map +1 -0
- package/dist/lib/select-db.js +72 -31
- package/dist/lib/select-db.js.map +1 -0
- package/dist/lib/templates.d.ts +4 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +17 -11
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/wrap-next-config.d.ts +12 -0
- package/dist/lib/wrap-next-config.d.ts.map +1 -0
- package/dist/lib/wrap-next-config.js +110 -0
- package/dist/lib/wrap-next-config.js.map +1 -0
- package/dist/lib/wrap-next-config.spec.d.ts +2 -0
- package/dist/lib/wrap-next-config.spec.d.ts.map +1 -0
- package/dist/lib/wrap-next-config.spec.js +98 -0
- package/dist/lib/wrap-next-config.spec.js.map +1 -0
- package/dist/lib/write-env-file.d.ts +10 -0
- package/dist/lib/write-env-file.d.ts.map +1 -0
- package/dist/lib/write-env-file.js +9 -6
- package/dist/lib/write-env-file.js.map +1 -0
- package/dist/main.d.ts +7 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +176 -60
- package/dist/main.js.map +1 -0
- package/dist/scripts/pack-template-files.d.ts +2 -0
- package/dist/scripts/pack-template-files.d.ts.map +1 -0
- package/dist/scripts/pack-template-files.js +43 -0
- package/dist/scripts/pack-template-files.js.map +1 -0
- package/dist/template/src/app/(payload)/admin/[[...segments]]/page.tsx +17 -0
- package/dist/template/src/app/(payload)/api/[...slug]/route.ts +9 -0
- package/dist/template/src/app/(payload)/api/graphql/route.ts +6 -0
- package/dist/template/src/app/(payload)/api/graphql-playground/route.ts +6 -0
- package/dist/template/src/app/(payload)/custom.scss +0 -0
- package/dist/template/src/app/(payload)/layout.tsx +16 -0
- package/dist/template/src/app/my-route/route.ts +14 -0
- package/dist/template/src/collections/Users.ts +13 -0
- package/dist/template/src/payload.config.ts +38 -0
- package/dist/types.d.ts +55 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -0
- package/dist/utils/copy-recursive-sync.d.ts +5 -0
- package/dist/utils/copy-recursive-sync.d.ts.map +1 -0
- package/dist/utils/copy-recursive-sync.js +34 -0
- package/dist/utils/copy-recursive-sync.js.map +1 -0
- package/dist/utils/log.d.ts +6 -0
- package/dist/utils/log.d.ts.map +1 -0
- package/dist/utils/log.js +62 -15
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/messages.d.ts +11 -0
- package/dist/utils/messages.d.ts.map +1 -0
- package/dist/utils/messages.js +47 -16
- package/dist/utils/messages.js.map +1 -0
- package/package.json +27 -10
package/README.md
CHANGED
package/dist/index.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
3
3
|
value: true
|
4
4
|
});
|
5
|
-
const _main = require("./main");
|
6
|
-
const _log = require("./utils/log");
|
5
|
+
const _main = require("./main.js");
|
6
|
+
const _log = require("./utils/log.js");
|
7
7
|
async function main() {
|
8
8
|
await new _main.Main().init();
|
9
9
|
}
|
10
10
|
main().catch((e)=>(0, _log.error)(`An error has occurred: ${e instanceof Error ? e.message : e}`));
|
11
11
|
|
12
|
-
//# sourceMappingURL=
|
12
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Main } from './main.js'\nimport { error } from './utils/log.js'\n\nasync function main(): Promise<void> {\n await new Main().init()\n}\n\nmain().catch((e) => error(`An error has occurred: ${e instanceof Error ? e.message : e}`))\n"],"names":["main","Main","init","catch","e","error","Error","message"],"mappings":";;;;sBAAqB;qBACC;AAEtB,eAAeA;IACb,MAAM,IAAIC,UAAI,GAAGC,IAAI;AACvB;AAEAF,OAAOG,KAAK,CAAC,CAACC,IAAMC,IAAAA,UAAK,EAAC,CAAC,uBAAuB,EAAED,aAAaE,QAAQF,EAAEG,OAAO,GAAGH,EAAE,CAAC"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import type { DbDetails } from '../types.js';
|
2
|
+
/** Update payload config with necessary imports and adapters */
|
3
|
+
export declare function configurePayloadConfig(args: {
|
4
|
+
dbDetails: DbDetails | undefined;
|
5
|
+
projectDirOrConfigPath: {
|
6
|
+
payloadConfigPath: string;
|
7
|
+
} | {
|
8
|
+
projectDir: string;
|
9
|
+
};
|
10
|
+
}): Promise<void>;
|
11
|
+
//# sourceMappingURL=configure-payload-config.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"configure-payload-config.d.ts","sourceRoot":"","sources":["../../src/lib/configure-payload-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAK5C,gEAAgE;AAChE,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,SAAS,EAAE,SAAS,GAAG,SAAS,CAAA;IAChC,sBAAsB,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/E,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DhB"}
|
@@ -9,9 +9,9 @@ Object.defineProperty(exports, "configurePayloadConfig", {
|
|
9
9
|
}
|
10
10
|
});
|
11
11
|
const _fsextra = /*#__PURE__*/ _interop_require_default(require("fs-extra"));
|
12
|
-
const
|
13
|
-
const _log = require("../utils/log");
|
14
|
-
const _packages = require("./packages");
|
12
|
+
const _globby = /*#__PURE__*/ _interop_require_default(require("globby"));
|
13
|
+
const _log = require("../utils/log.js");
|
14
|
+
const _packages = require("./packages.js");
|
15
15
|
function _interop_require_default(obj) {
|
16
16
|
return obj && obj.__esModule ? obj : {
|
17
17
|
default: obj
|
@@ -21,67 +21,29 @@ async function configurePayloadConfig(args) {
|
|
21
21
|
if (!args.dbDetails) {
|
22
22
|
return;
|
23
23
|
}
|
24
|
-
// Update package.json
|
25
|
-
const packageJsonPath = _path.default.resolve(args.projectDir, 'package.json');
|
26
24
|
try {
|
27
|
-
const packageObj = await _fsextra.default.readJson(packageJsonPath);
|
28
|
-
packageObj.dependencies['payload'] = '^2.0.0';
|
29
|
-
const dbPackage = _packages.dbPackages[args.dbDetails.type];
|
30
|
-
const bundlerPackage = _packages.bundlerPackages['webpack'];
|
31
|
-
const editorPackage = _packages.editorPackages['slate'];
|
32
|
-
// Delete all other db adapters
|
33
|
-
Object.values(_packages.dbPackages).forEach((p)=>{
|
34
|
-
if (p.packageName !== dbPackage.packageName) {
|
35
|
-
delete packageObj.dependencies[p.packageName];
|
36
|
-
}
|
37
|
-
});
|
38
|
-
packageObj.dependencies[dbPackage.packageName] = dbPackage.version;
|
39
|
-
packageObj.dependencies[bundlerPackage.packageName] = bundlerPackage.version;
|
40
|
-
packageObj.dependencies[editorPackage.packageName] = editorPackage.version;
|
41
|
-
await _fsextra.default.writeJson(packageJsonPath, packageObj, {
|
42
|
-
spaces: 2
|
43
|
-
});
|
44
|
-
} catch (err) {
|
45
|
-
(0, _log.warning)('Unable to update name in package.json');
|
46
|
-
}
|
47
|
-
try {
|
48
|
-
const possiblePaths = [
|
49
|
-
_path.default.resolve(args.projectDir, 'src/payload.config.ts'),
|
50
|
-
_path.default.resolve(args.projectDir, 'src/payload/payload.config.ts')
|
51
|
-
];
|
52
25
|
let payloadConfigPath;
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
26
|
+
if (!('payloadConfigPath' in args.projectDirOrConfigPath)) {
|
27
|
+
payloadConfigPath = (await (0, _globby.default)('**/payload.config.ts', {
|
28
|
+
absolute: true,
|
29
|
+
cwd: args.projectDirOrConfigPath.projectDir
|
30
|
+
}))?.[0];
|
31
|
+
} else {
|
32
|
+
payloadConfigPath = args.projectDirOrConfigPath.payloadConfigPath;
|
33
|
+
}
|
58
34
|
if (!payloadConfigPath) {
|
59
|
-
(0, _log.warning)('Unable to update payload.config.ts with plugins');
|
35
|
+
(0, _log.warning)('Unable to update payload.config.ts with plugins. Could not find payload.config.ts.');
|
60
36
|
return;
|
61
37
|
}
|
62
38
|
const configContent = _fsextra.default.readFileSync(payloadConfigPath, 'utf-8');
|
63
39
|
const configLines = configContent.split('\n');
|
64
|
-
const dbReplacement = _packages.
|
65
|
-
const bundlerReplacement = _packages.bundlerPackages['webpack'];
|
66
|
-
const editorReplacement = _packages.editorPackages['slate'];
|
40
|
+
const dbReplacement = _packages.dbReplacements[args.dbDetails.type];
|
67
41
|
let dbConfigStartLineIndex;
|
68
42
|
let dbConfigEndLineIndex;
|
69
43
|
configLines.forEach((l, i)=>{
|
70
44
|
if (l.includes('// database-adapter-import')) {
|
71
45
|
configLines[i] = dbReplacement.importReplacement;
|
72
46
|
}
|
73
|
-
if (l.includes('// bundler-import')) {
|
74
|
-
configLines[i] = bundlerReplacement.importReplacement;
|
75
|
-
}
|
76
|
-
if (l.includes('// bundler-config')) {
|
77
|
-
configLines[i] = bundlerReplacement.configReplacement;
|
78
|
-
}
|
79
|
-
if (l.includes('// editor-import')) {
|
80
|
-
configLines[i] = editorReplacement.importReplacement;
|
81
|
-
}
|
82
|
-
if (l.includes('// editor-config')) {
|
83
|
-
configLines[i] = editorReplacement.configReplacement;
|
84
|
-
}
|
85
47
|
if (l.includes('// database-adapter-config-start')) {
|
86
48
|
dbConfigStartLineIndex = i;
|
87
49
|
}
|
@@ -97,8 +59,8 @@ async function configurePayloadConfig(args) {
|
|
97
59
|
}
|
98
60
|
_fsextra.default.writeFileSync(payloadConfigPath, configLines.join('\n'));
|
99
61
|
} catch (err) {
|
100
|
-
(0, _log.warning)(
|
62
|
+
(0, _log.warning)(`Unable to update payload.config.ts with plugins: ${err instanceof Error ? err.message : ''}`);
|
101
63
|
}
|
102
64
|
}
|
103
65
|
|
104
|
-
//# sourceMappingURL=
|
66
|
+
//# sourceMappingURL=configure-payload-config.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/lib/configure-payload-config.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport globby from 'globby'\n\nimport type { DbDetails } from '../types.js'\n\nimport { warning } from '../utils/log.js'\nimport { dbReplacements } from './packages.js'\n\n/** Update payload config with necessary imports and adapters */\nexport async function configurePayloadConfig(args: {\n dbDetails: DbDetails | undefined\n projectDirOrConfigPath: { payloadConfigPath: string } | { projectDir: string }\n}): Promise<void> {\n if (!args.dbDetails) {\n return\n }\n\n try {\n let payloadConfigPath: string | undefined\n if (!('payloadConfigPath' in args.projectDirOrConfigPath)) {\n payloadConfigPath = (\n await globby('**/payload.config.ts', {\n absolute: true,\n cwd: args.projectDirOrConfigPath.projectDir,\n })\n )?.[0]\n } else {\n payloadConfigPath = args.projectDirOrConfigPath.payloadConfigPath\n }\n\n if (!payloadConfigPath) {\n warning('Unable to update payload.config.ts with plugins. Could not find payload.config.ts.')\n return\n }\n\n const configContent = fse.readFileSync(payloadConfigPath, 'utf-8')\n const configLines = configContent.split('\\n')\n\n const dbReplacement = dbReplacements[args.dbDetails.type]\n\n let dbConfigStartLineIndex: number | undefined\n let dbConfigEndLineIndex: number | undefined\n\n configLines.forEach((l, i) => {\n if (l.includes('// database-adapter-import')) {\n configLines[i] = dbReplacement.importReplacement\n }\n\n if (l.includes('// database-adapter-config-start')) {\n dbConfigStartLineIndex = i\n }\n if (l.includes('// database-adapter-config-end')) {\n dbConfigEndLineIndex = i\n }\n })\n\n if (!dbConfigStartLineIndex || !dbConfigEndLineIndex) {\n warning('Unable to update payload.config.ts with database adapter import')\n } else {\n // Replaces lines between `// database-adapter-config-start` and `// database-adapter-config-end`\n configLines.splice(\n dbConfigStartLineIndex,\n dbConfigEndLineIndex - dbConfigStartLineIndex + 1,\n ...dbReplacement.configReplacement,\n )\n }\n\n fse.writeFileSync(payloadConfigPath, configLines.join('\\n'))\n } catch (err: unknown) {\n warning(\n `Unable to update payload.config.ts with plugins: ${err instanceof Error ? err.message : ''}`,\n )\n }\n}\n"],"names":["configurePayloadConfig","args","dbDetails","payloadConfigPath","projectDirOrConfigPath","globby","absolute","cwd","projectDir","warning","configContent","fse","readFileSync","configLines","split","dbReplacement","dbReplacements","type","dbConfigStartLineIndex","dbConfigEndLineIndex","forEach","l","i","includes","importReplacement","splice","configReplacement","writeFileSync","join","err","Error","message"],"mappings":";;;;+BASsBA;;;eAAAA;;;gEATN;+DACG;qBAIK;0BACO;;;;;;AAGxB,eAAeA,uBAAuBC,IAG5C;IACC,IAAI,CAACA,KAAKC,SAAS,EAAE;QACnB;IACF;IAEA,IAAI;QACF,IAAIC;QACJ,IAAI,CAAE,CAAA,uBAAuBF,KAAKG,sBAAsB,AAAD,GAAI;YACzDD,oBACE,CAAA,MAAME,IAAAA,eAAM,EAAC,wBAAwB;gBACnCC,UAAU;gBACVC,KAAKN,KAAKG,sBAAsB,CAACI,UAAU;YAC7C,EAAC,GACA,CAAC,EAAE;QACR,OAAO;YACLL,oBAAoBF,KAAKG,sBAAsB,CAACD,iBAAiB;QACnE;QAEA,IAAI,CAACA,mBAAmB;YACtBM,IAAAA,YAAO,EAAC;YACR;QACF;QAEA,MAAMC,gBAAgBC,gBAAG,CAACC,YAAY,CAACT,mBAAmB;QAC1D,MAAMU,cAAcH,cAAcI,KAAK,CAAC;QAExC,MAAMC,gBAAgBC,wBAAc,CAACf,KAAKC,SAAS,CAACe,IAAI,CAAC;QAEzD,IAAIC;QACJ,IAAIC;QAEJN,YAAYO,OAAO,CAAC,CAACC,GAAGC;YACtB,IAAID,EAAEE,QAAQ,CAAC,+BAA+B;gBAC5CV,WAAW,CAACS,EAAE,GAAGP,cAAcS,iBAAiB;YAClD;YAEA,IAAIH,EAAEE,QAAQ,CAAC,qCAAqC;gBAClDL,yBAAyBI;YAC3B;YACA,IAAID,EAAEE,QAAQ,CAAC,mCAAmC;gBAChDJ,uBAAuBG;YACzB;QACF;QAEA,IAAI,CAACJ,0BAA0B,CAACC,sBAAsB;YACpDV,IAAAA,YAAO,EAAC;QACV,OAAO;YACL,iGAAiG;YACjGI,YAAYY,MAAM,CAChBP,wBACAC,uBAAuBD,yBAAyB,MAC7CH,cAAcW,iBAAiB;QAEtC;QAEAf,gBAAG,CAACgB,aAAa,CAACxB,mBAAmBU,YAAYe,IAAI,CAAC;IACxD,EAAE,OAAOC,KAAc;QACrBpB,IAAAA,YAAO,EACL,CAAC,iDAAiD,EAAEoB,eAAeC,QAAQD,IAAIE,OAAO,GAAG,GAAG,CAAC;IAEjG;AACF"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import type { CliArgs, DbDetails, PackageManager, ProjectTemplate } from '../types.js';
|
2
|
+
export declare function createProject(args: {
|
3
|
+
cliArgs: CliArgs;
|
4
|
+
dbDetails?: DbDetails;
|
5
|
+
packageManager: PackageManager;
|
6
|
+
projectDir: string;
|
7
|
+
projectName: string;
|
8
|
+
template: ProjectTemplate;
|
9
|
+
}): Promise<void>;
|
10
|
+
export declare function updatePackageJSON(args: {
|
11
|
+
projectDir: string;
|
12
|
+
projectName: string;
|
13
|
+
}): Promise<void>;
|
14
|
+
//# sourceMappingURL=create-project.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AA2CtF,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,eAAe,CAAA;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDhB;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhB"}
|
@@ -16,19 +16,63 @@ _export(exports, {
|
|
16
16
|
return updatePackageJSON;
|
17
17
|
}
|
18
18
|
});
|
19
|
+
const _prompts = /*#__PURE__*/ _interop_require_wildcard(require("@clack/prompts"));
|
19
20
|
const _chalk = /*#__PURE__*/ _interop_require_default(require("chalk"));
|
20
21
|
const _degit = /*#__PURE__*/ _interop_require_default(require("degit"));
|
21
22
|
const _execa = /*#__PURE__*/ _interop_require_default(require("execa"));
|
22
23
|
const _fsextra = /*#__PURE__*/ _interop_require_default(require("fs-extra"));
|
23
|
-
const
|
24
|
+
const _nodeurl = require("node:url");
|
24
25
|
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
25
|
-
const _log = require("../utils/log");
|
26
|
-
const _configurepayloadconfig = require("./configure-payload-config");
|
26
|
+
const _log = require("../utils/log.js");
|
27
|
+
const _configurepayloadconfig = require("./configure-payload-config.js");
|
27
28
|
function _interop_require_default(obj) {
|
28
29
|
return obj && obj.__esModule ? obj : {
|
29
30
|
default: obj
|
30
31
|
};
|
31
32
|
}
|
33
|
+
function _getRequireWildcardCache(nodeInterop) {
|
34
|
+
if (typeof WeakMap !== "function") return null;
|
35
|
+
var cacheBabelInterop = new WeakMap();
|
36
|
+
var cacheNodeInterop = new WeakMap();
|
37
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
38
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
39
|
+
})(nodeInterop);
|
40
|
+
}
|
41
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
42
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
43
|
+
return obj;
|
44
|
+
}
|
45
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
46
|
+
return {
|
47
|
+
default: obj
|
48
|
+
};
|
49
|
+
}
|
50
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
51
|
+
if (cache && cache.has(obj)) {
|
52
|
+
return cache.get(obj);
|
53
|
+
}
|
54
|
+
var newObj = {
|
55
|
+
__proto__: null
|
56
|
+
};
|
57
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
58
|
+
for(var key in obj){
|
59
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
60
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
61
|
+
if (desc && (desc.get || desc.set)) {
|
62
|
+
Object.defineProperty(newObj, key, desc);
|
63
|
+
} else {
|
64
|
+
newObj[key] = obj[key];
|
65
|
+
}
|
66
|
+
}
|
67
|
+
}
|
68
|
+
newObj.default = obj;
|
69
|
+
if (cache) {
|
70
|
+
cache.set(obj, newObj);
|
71
|
+
}
|
72
|
+
return newObj;
|
73
|
+
}
|
74
|
+
const filename = (0, _nodeurl.fileURLToPath)(require("url").pathToFileURL(__filename).toString());
|
75
|
+
const dirname = _path.default.dirname(filename);
|
32
76
|
async function createOrFindProjectDir(projectDir) {
|
33
77
|
const pathExists = await _fsextra.default.pathExists(projectDir);
|
34
78
|
if (!pathExists) {
|
@@ -52,46 +96,62 @@ async function installDeps(args) {
|
|
52
96
|
});
|
53
97
|
return true;
|
54
98
|
} catch (err) {
|
55
|
-
|
56
|
-
err
|
57
|
-
});
|
99
|
+
(0, _log.error)(`Error installing dependencies${err instanceof Error ? `: ${err.message}` : ''}.`);
|
58
100
|
return false;
|
59
101
|
}
|
60
102
|
}
|
61
103
|
async function createProject(args) {
|
62
104
|
const { cliArgs, dbDetails, packageManager, projectDir, projectName, template } = args;
|
105
|
+
if (cliArgs['--dry-run']) {
|
106
|
+
(0, _log.debug)(`Dry run: Creating project in ${_chalk.default.green(projectDir)}`);
|
107
|
+
return;
|
108
|
+
}
|
63
109
|
await createOrFindProjectDir(projectDir);
|
64
|
-
|
65
|
-
|
66
|
-
const
|
110
|
+
if (cliArgs['--local-template']) {
|
111
|
+
// Copy template from local path. For development purposes.
|
112
|
+
const localTemplate = _path.default.resolve(dirname, '../../../../templates/', cliArgs['--local-template']);
|
113
|
+
await _fsextra.default.copy(localTemplate, projectDir);
|
114
|
+
} else if ('url' in template) {
|
115
|
+
let templateUrl = template.url;
|
116
|
+
if (cliArgs['--template-branch']) {
|
117
|
+
templateUrl = `${template.url}#${cliArgs['--template-branch']}`;
|
118
|
+
(0, _log.debug)(`Using template url: ${templateUrl}`);
|
119
|
+
}
|
120
|
+
const emitter = (0, _degit.default)(templateUrl);
|
67
121
|
await emitter.clone(projectDir);
|
68
122
|
}
|
69
|
-
const spinner =
|
123
|
+
const spinner = _prompts.spinner();
|
124
|
+
spinner.start('Checking latest Payload version...');
|
70
125
|
await updatePackageJSON({
|
71
126
|
projectDir,
|
72
127
|
projectName
|
73
128
|
});
|
129
|
+
spinner.message('Configuring Payload...');
|
74
130
|
await (0, _configurepayloadconfig.configurePayloadConfig)({
|
75
131
|
dbDetails,
|
76
|
-
|
132
|
+
projectDirOrConfigPath: {
|
133
|
+
projectDir
|
134
|
+
}
|
77
135
|
});
|
78
136
|
// Remove yarn.lock file. This is only desired in Payload Cloud.
|
79
137
|
const lockPath = _path.default.resolve(projectDir, 'yarn.lock');
|
80
138
|
if (_fsextra.default.existsSync(lockPath)) {
|
81
139
|
await _fsextra.default.remove(lockPath);
|
82
140
|
}
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
141
|
+
if (!cliArgs['--no-deps']) {
|
142
|
+
spinner.message('Installing dependencies...');
|
143
|
+
const result = await installDeps({
|
144
|
+
cliArgs,
|
145
|
+
packageManager,
|
146
|
+
projectDir
|
147
|
+
});
|
148
|
+
if (result) {
|
149
|
+
spinner.stop('Successfully installed Payload and dependencies');
|
150
|
+
} else {
|
151
|
+
spinner.stop('Error installing dependencies', 1);
|
152
|
+
}
|
93
153
|
} else {
|
94
|
-
|
154
|
+
spinner.stop('Dependency installation skipped');
|
95
155
|
}
|
96
156
|
}
|
97
157
|
async function updatePackageJSON(args) {
|
@@ -104,8 +164,8 @@ async function updatePackageJSON(args) {
|
|
104
164
|
spaces: 2
|
105
165
|
});
|
106
166
|
} catch (err) {
|
107
|
-
(0, _log.warning)(
|
167
|
+
(0, _log.warning)(`Unable to update name in package.json. ${err instanceof Error ? err.message : ''}`);
|
108
168
|
}
|
109
169
|
}
|
110
170
|
|
111
|
-
//# sourceMappingURL=
|
171
|
+
//# sourceMappingURL=create-project.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/lib/create-project.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport chalk from 'chalk'\nimport degit from 'degit'\nimport execa from 'execa'\nimport fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type { CliArgs, DbDetails, PackageManager, ProjectTemplate } from '../types.js'\n\nimport { debug, error, warning } from '../utils/log.js'\nimport { configurePayloadConfig } from './configure-payload-config.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nasync function createOrFindProjectDir(projectDir: string): Promise<void> {\n const pathExists = await fse.pathExists(projectDir)\n if (!pathExists) {\n await fse.mkdir(projectDir)\n }\n}\n\nasync function installDeps(args: {\n cliArgs: CliArgs\n packageManager: PackageManager\n projectDir: string\n}): Promise<boolean> {\n const { cliArgs, packageManager, projectDir } = args\n if (cliArgs['--no-deps']) {\n return true\n }\n let installCmd = 'npm install --legacy-peer-deps'\n\n if (packageManager === 'yarn') {\n installCmd = 'yarn'\n } else if (packageManager === 'pnpm') {\n installCmd = 'pnpm install'\n }\n\n try {\n await execa.command(installCmd, {\n cwd: path.resolve(projectDir),\n })\n return true\n } catch (err: unknown) {\n error(`Error installing dependencies${err instanceof Error ? `: ${err.message}` : ''}.`)\n return false\n }\n}\n\nexport async function createProject(args: {\n cliArgs: CliArgs\n dbDetails?: DbDetails\n packageManager: PackageManager\n projectDir: string\n projectName: string\n template: ProjectTemplate\n}): Promise<void> {\n const { cliArgs, dbDetails, packageManager, projectDir, projectName, template } = args\n\n if (cliArgs['--dry-run']) {\n debug(`Dry run: Creating project in ${chalk.green(projectDir)}`)\n return\n }\n\n await createOrFindProjectDir(projectDir)\n\n if (cliArgs['--local-template']) {\n // Copy template from local path. For development purposes.\n const localTemplate = path.resolve(\n dirname,\n '../../../../templates/',\n cliArgs['--local-template'],\n )\n await fse.copy(localTemplate, projectDir)\n } else if ('url' in template) {\n let templateUrl = template.url\n if (cliArgs['--template-branch']) {\n templateUrl = `${template.url}#${cliArgs['--template-branch']}`\n debug(`Using template url: ${templateUrl}`)\n }\n const emitter = degit(templateUrl)\n await emitter.clone(projectDir)\n }\n\n const spinner = p.spinner()\n spinner.start('Checking latest Payload version...')\n\n await updatePackageJSON({ projectDir, projectName })\n spinner.message('Configuring Payload...')\n await configurePayloadConfig({ dbDetails, projectDirOrConfigPath: { projectDir } })\n\n // Remove yarn.lock file. This is only desired in Payload Cloud.\n const lockPath = path.resolve(projectDir, 'yarn.lock')\n if (fse.existsSync(lockPath)) {\n await fse.remove(lockPath)\n }\n\n if (!cliArgs['--no-deps']) {\n spinner.message('Installing dependencies...')\n const result = await installDeps({ cliArgs, packageManager, projectDir })\n if (result) {\n spinner.stop('Successfully installed Payload and dependencies')\n } else {\n spinner.stop('Error installing dependencies', 1)\n }\n } else {\n spinner.stop('Dependency installation skipped')\n }\n}\n\nexport async function updatePackageJSON(args: {\n projectDir: string\n projectName: string\n}): Promise<void> {\n const { projectDir, projectName } = args\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n try {\n const packageObj = await fse.readJson(packageJsonPath)\n packageObj.name = projectName\n await fse.writeJson(packageJsonPath, packageObj, { spaces: 2 })\n } catch (err: unknown) {\n warning(`Unable to update name in package.json. ${err instanceof Error ? err.message : ''}`)\n }\n}\n"],"names":["createProject","updatePackageJSON","filename","fileURLToPath","dirname","path","createOrFindProjectDir","projectDir","pathExists","fse","mkdir","installDeps","args","cliArgs","packageManager","installCmd","execa","command","cwd","resolve","err","error","Error","message","dbDetails","projectName","template","debug","chalk","green","localTemplate","copy","templateUrl","url","emitter","degit","clone","spinner","p","start","configurePayloadConfig","projectDirOrConfigPath","lockPath","existsSync","remove","result","stop","packageJsonPath","packageObj","readJson","name","writeJson","spaces","warning"],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"create-project.spec.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.spec.ts"],"names":[],"mappings":""}
|
@@ -4,15 +4,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
});
|
5
5
|
const _fsextra = /*#__PURE__*/ _interop_require_default(require("fs-extra"));
|
6
6
|
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
7
|
-
const _createproject = require("./create-project");
|
8
|
-
const
|
9
|
-
const
|
7
|
+
const _createproject = require("./create-project.js");
|
8
|
+
const _nodeurl = require("node:url");
|
9
|
+
const _packages = require("./packages.js");
|
10
|
+
const _templates = require("./templates.js");
|
11
|
+
const _globby = /*#__PURE__*/ _interop_require_default(require("globby"));
|
10
12
|
function _interop_require_default(obj) {
|
11
13
|
return obj && obj.__esModule ? obj : {
|
12
14
|
default: obj
|
13
15
|
};
|
14
16
|
}
|
15
|
-
const
|
17
|
+
const filename = (0, _nodeurl.fileURLToPath)(require("url").pathToFileURL(__filename).toString());
|
18
|
+
const dirname = _path.default.dirname(filename);
|
19
|
+
const projectDir = _path.default.resolve(dirname, './tmp');
|
16
20
|
describe('createProject', ()=>{
|
17
21
|
beforeAll(()=>{
|
18
22
|
console.log = jest.fn();
|
@@ -38,29 +42,10 @@ describe('createProject', ()=>{
|
|
38
42
|
'project-name'
|
39
43
|
],
|
40
44
|
'--db': 'mongodb',
|
45
|
+
'--local-template': 'blank',
|
41
46
|
'--no-deps': true
|
42
47
|
};
|
43
48
|
const packageManager = 'yarn';
|
44
|
-
it('creates starter project', async ()=>{
|
45
|
-
const projectName = 'starter-project';
|
46
|
-
const template = {
|
47
|
-
name: 'blank',
|
48
|
-
type: 'starter',
|
49
|
-
url: 'https://github.com/payloadcms/payload/templates/blank',
|
50
|
-
description: 'Blank Template'
|
51
|
-
};
|
52
|
-
await (0, _createproject.createProject)({
|
53
|
-
cliArgs: args,
|
54
|
-
projectName,
|
55
|
-
projectDir,
|
56
|
-
template,
|
57
|
-
packageManager
|
58
|
-
});
|
59
|
-
const packageJsonPath = _path.default.resolve(projectDir, 'package.json');
|
60
|
-
const packageJson = _fsextra.default.readJsonSync(packageJsonPath);
|
61
|
-
// Check package name and description
|
62
|
-
expect(packageJson.name).toEqual(projectName);
|
63
|
-
});
|
64
49
|
it('creates plugin template', async ()=>{
|
65
50
|
const projectName = 'plugin';
|
66
51
|
const template = {
|
@@ -81,69 +66,47 @@ describe('createProject', ()=>{
|
|
81
66
|
// Check package name and description
|
82
67
|
expect(packageJson.name).toEqual(projectName);
|
83
68
|
});
|
84
|
-
describe('
|
69
|
+
describe('creates project from template', ()=>{
|
85
70
|
const templates = (0, _templates.getValidTemplates)();
|
86
71
|
it.each([
|
87
72
|
[
|
88
|
-
'blank',
|
89
|
-
'mongodb'
|
90
|
-
'webpack'
|
91
|
-
],
|
92
|
-
[
|
93
|
-
'blank',
|
94
|
-
'postgres',
|
95
|
-
'webpack'
|
96
|
-
],
|
97
|
-
[
|
98
|
-
'website',
|
99
|
-
'mongodb',
|
100
|
-
'webpack'
|
73
|
+
'blank-3.0',
|
74
|
+
'mongodb'
|
101
75
|
],
|
102
76
|
[
|
103
|
-
'
|
104
|
-
'postgres'
|
105
|
-
'webpack'
|
106
|
-
],
|
107
|
-
[
|
108
|
-
'ecommerce',
|
109
|
-
'mongodb',
|
110
|
-
'webpack'
|
111
|
-
],
|
112
|
-
[
|
113
|
-
'ecommerce',
|
114
|
-
'postgres',
|
115
|
-
'webpack'
|
77
|
+
'blank-3.0',
|
78
|
+
'postgres'
|
116
79
|
]
|
117
|
-
])('update config and deps: %s, %s
|
80
|
+
])('update config and deps: %s, %s', async (templateName, db)=>{
|
118
81
|
const projectName = 'starter-project';
|
119
82
|
const template = templates.find((t)=>t.name === templateName);
|
83
|
+
const cliArgs = {
|
84
|
+
...args,
|
85
|
+
'--db': db,
|
86
|
+
'--local-template': templateName
|
87
|
+
};
|
120
88
|
await (0, _createproject.createProject)({
|
121
|
-
cliArgs
|
89
|
+
cliArgs,
|
122
90
|
projectName,
|
123
91
|
projectDir,
|
124
|
-
template,
|
92
|
+
template: template,
|
125
93
|
packageManager,
|
126
94
|
dbDetails: {
|
127
95
|
dbUri: `${db}://localhost:27017/create-project-test`,
|
128
96
|
type: db
|
129
97
|
}
|
130
98
|
});
|
131
|
-
const dbReplacement = _packages.
|
132
|
-
const bundlerReplacement = _packages.bundlerPackages[bundler];
|
133
|
-
const editorReplacement = _packages.editorPackages['slate'];
|
99
|
+
const dbReplacement = _packages.dbReplacements[db];
|
134
100
|
const packageJsonPath = _path.default.resolve(projectDir, 'package.json');
|
135
101
|
const packageJson = _fsextra.default.readJsonSync(packageJsonPath);
|
136
|
-
// Check deps
|
137
|
-
expect(packageJson.dependencies['payload']).toEqual('^2.0.0');
|
138
|
-
expect(packageJson.dependencies[dbReplacement.packageName]).toEqual(dbReplacement.version);
|
139
102
|
// Should only have one db adapter
|
140
103
|
expect(Object.keys(packageJson.dependencies).filter((n)=>n.startsWith('@payloadcms/db-'))).toHaveLength(1);
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
if (!
|
146
|
-
|
104
|
+
const payloadConfigPath = (await (0, _globby.default)('**/payload.config.ts', {
|
105
|
+
absolute: true,
|
106
|
+
cwd: projectDir
|
107
|
+
}))?.[0];
|
108
|
+
if (!payloadConfigPath) {
|
109
|
+
throw new Error(`Could not find payload.config.ts inside ${projectDir}`);
|
147
110
|
}
|
148
111
|
const content = _fsextra.default.readFileSync(payloadConfigPath, 'utf-8');
|
149
112
|
// Check payload.config.ts
|
@@ -152,17 +115,9 @@ describe('createProject', ()=>{
|
|
152
115
|
expect(content).not.toContain('// database-adapter-config-start');
|
153
116
|
expect(content).not.toContain('// database-adapter-config-end');
|
154
117
|
expect(content).toContain(dbReplacement.configReplacement.join('\n'));
|
155
|
-
expect(content).not.toContain('// bundler-config-import');
|
156
|
-
expect(content).toContain(bundlerReplacement.importReplacement);
|
157
|
-
expect(content).not.toContain('// bundler-config');
|
158
|
-
expect(content).toContain(bundlerReplacement.configReplacement);
|
159
118
|
});
|
160
119
|
});
|
161
120
|
});
|
162
|
-
describe('Templates', ()=>{
|
163
|
-
it.todo('Verify that all templates are valid');
|
164
|
-
// Loop through all templates.ts that should have replacement comments, and verify that they are present
|
165
|
-
});
|
166
121
|
});
|
167
122
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3JlYXRlLXByb2plY3Quc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnNlIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB0eXBlIHsgQnVuZGxlclR5cGUsIENsaUFyZ3MsIERiVHlwZSwgUHJvamVjdFRlbXBsYXRlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBjcmVhdGVQcm9qZWN0IH0gZnJvbSAnLi9jcmVhdGUtcHJvamVjdCdcbmltcG9ydCB7IGJ1bmRsZXJQYWNrYWdlcywgZGJQYWNrYWdlcywgZWRpdG9yUGFja2FnZXMgfSBmcm9tICcuL3BhY2thZ2VzJ1xuaW1wb3J0IGV4cCBmcm9tICdjb25zdGFudHMnXG5pbXBvcnQgeyBnZXRWYWxpZFRlbXBsYXRlcyB9IGZyb20gJy4vdGVtcGxhdGVzJ1xuXG5jb25zdCBwcm9qZWN0RGlyID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vdG1wJylcbmRlc2NyaWJlKCdjcmVhdGVQcm9qZWN0JywgKCkgPT4ge1xuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nID0gamVzdC5mbigpXG4gIH0pXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgaWYgKGZzZS5leGlzdHNTeW5jKHByb2plY3REaXIpKSB7XG4gICAgICBmc2Uucm1kaXJTeW5jKHByb2plY3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgfVxuICB9KVxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGlmIChmc2UuZXhpc3RzU3luYyhwcm9qZWN0RGlyKSkge1xuICAgICAgZnNlLnJtU3luYyhwcm9qZWN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIH1cbiAgfSlcblxuICBkZXNjcmliZSgnI2NyZWF0ZVByb2plY3QnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICBfOiBbJ3Byb2plY3QtbmFtZSddLFxuICAgICAgJy0tZGInOiAnbW9uZ29kYicsXG4gICAgICAnLS1uby1kZXBzJzogdHJ1ZSxcbiAgICB9IGFzIENsaUFyZ3NcbiAgICBjb25zdCBwYWNrYWdlTWFuYWdlciA9ICd5YXJuJ1xuXG4gICAgaXQoJ2NyZWF0ZXMgc3RhcnRlciBwcm9qZWN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvamVjdE5hbWUgPSAnc3RhcnRlci1wcm9qZWN0J1xuICAgICAgY29uc3QgdGVtcGxhdGU6IFByb2plY3RUZW1wbGF0ZSA9IHtcbiAgICAgICAgbmFtZTogJ2JsYW5rJyxcbiAgICAgICAgdHlwZTogJ3N0YXJ0ZXInLFxuICAgICAgICB1cmw6ICdodHRwczovL2dpdGh1Yi5jb20vcGF5bG9hZGNtcy9wYXlsb2FkL3RlbXBsYXRlcy9ibGFuaycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQmxhbmsgVGVtcGxhdGUnLFxuICAgICAgfVxuICAgICAgYXdhaXQgY3JlYXRlUHJvamVjdCh7XG4gICAgICAgIGNsaUFyZ3M6IGFyZ3MsXG4gICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICBwcm9qZWN0RGlyLFxuICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgcGFja2FnZU1hbmFnZXIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLnJlc29sdmUocHJvamVjdERpciwgJ3BhY2thZ2UuanNvbicpXG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IGZzZS5yZWFkSnNvblN5bmMocGFja2FnZUpzb25QYXRoKVxuXG4gICAgICAvLyBDaGVjayBwYWNrYWdlIG5hbWUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICBleHBlY3QocGFja2FnZUpzb24ubmFtZSkudG9FcXVhbChwcm9qZWN0TmFtZSlcbiAgICB9KVxuXG4gICAgaXQoJ2NyZWF0ZXMgcGx1Z2luIHRlbXBsYXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvamVjdE5hbWUgPSAncGx1Z2luJ1xuICAgICAgY29uc3QgdGVtcGxhdGU6IFByb2plY3RUZW1wbGF0ZSA9IHtcbiAgICAgICAgbmFtZTogJ3BsdWdpbicsXG4gICAgICAgIHR5cGU6ICdwbHVnaW4nLFxuICAgICAgICB1cmw6ICdodHRwczovL2dpdGh1Yi5jb20vcGF5bG9hZGNtcy9wYXlsb2FkLXBsdWdpbi10ZW1wbGF0ZScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGVtcGxhdGUgZm9yIGNyZWF0aW5nIGEgUGF5bG9hZCBwbHVnaW4nLFxuICAgICAgfVxuICAgICAgYXdhaXQgY3JlYXRlUHJvamVjdCh7XG4gICAgICAgIGNsaUFyZ3M6IGFyZ3MsXG4gICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICBwcm9qZWN0RGlyLFxuICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgcGFja2FnZU1hbmFnZXIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLnJlc29sdmUocHJvamVjdERpciwgJ3BhY2thZ2UuanNvbicpXG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IGZzZS5yZWFkSnNvblN5bmMocGFja2FnZUpzb25QYXRoKVxuXG4gICAgICAvLyBDaGVjayBwYWNrYWdlIG5hbWUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICBleHBlY3QocGFja2FnZUpzb24ubmFtZSkudG9FcXVhbChwcm9qZWN0TmFtZSlcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RiIGFkYXB0ZXJzIGFuZCBidW5kbGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGdldFZhbGlkVGVtcGxhdGVzKClcblxuICAgICAgaXQuZWFjaChbXG4gICAgICAgIFsnYmxhbmsnLCAnbW9uZ29kYicsICd3ZWJwYWNrJ10sXG4gICAgICAgIFsnYmxhbmsnLCAncG9zdGdyZXMnLCAnd2VicGFjayddLFxuICAgICAgICBbJ3dlYnNpdGUnLCAnbW9uZ29kYicsICd3ZWJwYWNrJ10sXG4gICAgICAgIFsnd2Vic2l0ZScsICdwb3N0Z3JlcycsICd3ZWJwYWNrJ10sXG4gICAgICAgIFsnZWNvbW1lcmNlJywgJ21vbmdvZGInLCAnd2VicGFjayddLFxuICAgICAgICBbJ2Vjb21tZXJjZScsICdwb3N0Z3JlcycsICd3ZWJwYWNrJ10sXG4gICAgICBdKSgndXBkYXRlIGNvbmZpZyBhbmQgZGVwczogJXMsICVzLCAlcycsIGFzeW5jICh0ZW1wbGF0ZU5hbWUsIGRiLCBidW5kbGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2plY3ROYW1lID0gJ3N0YXJ0ZXItcHJvamVjdCdcblxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRlbXBsYXRlcy5maW5kKCh0KSA9PiB0Lm5hbWUgPT09IHRlbXBsYXRlTmFtZSlcblxuICAgICAgICBhd2FpdCBjcmVhdGVQcm9qZWN0KHtcbiAgICAgICAgICBjbGlBcmdzOiBhcmdzLFxuICAgICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICAgIHByb2plY3REaXIsXG4gICAgICAgICAgdGVtcGxhdGUsXG4gICAgICAgICAgcGFja2FnZU1hbmFnZXIsXG4gICAgICAgICAgZGJEZXRhaWxzOiB7XG4gICAgICAgICAgICBkYlVyaTogYCR7ZGJ9Oi8vbG9jYWxob3N0OjI3MDE3L2NyZWF0ZS1wcm9qZWN0LXRlc3RgLFxuICAgICAgICAgICAgdHlwZTogZGIgYXMgRGJUeXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgZGJSZXBsYWNlbWVudCA9IGRiUGFja2FnZXNbZGIgYXMgRGJUeXBlXVxuICAgICAgICBjb25zdCBidW5kbGVyUmVwbGFjZW1lbnQgPSBidW5kbGVyUGFja2FnZXNbYnVuZGxlciBhcyBCdW5kbGVyVHlwZV1cbiAgICAgICAgY29uc3QgZWRpdG9yUmVwbGFjZW1lbnQgPSBlZGl0b3JQYWNrYWdlc1snc2xhdGUnXVxuXG4gICAgICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyLCAncGFja2FnZS5qc29uJylcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBmc2UucmVhZEpzb25TeW5jKHBhY2thZ2VKc29uUGF0aClcblxuICAgICAgICAvLyBDaGVjayBkZXBzXG4gICAgICAgIGV4cGVjdChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXNbJ3BheWxvYWQnXSkudG9FcXVhbCgnXjIuMC4wJylcbiAgICAgICAgZXhwZWN0KHBhY2thZ2VKc29uLmRlcGVuZGVuY2llc1tkYlJlcGxhY2VtZW50LnBhY2thZ2VOYW1lXSkudG9FcXVhbChkYlJlcGxhY2VtZW50LnZlcnNpb24pXG5cbiAgICAgICAgLy8gU2hvdWxkIG9ubHkgaGF2ZSBvbmUgZGIgYWRhcHRlclxuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgT2JqZWN0LmtleXMocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzKS5maWx0ZXIoKG4pID0+IG4uc3RhcnRzV2l0aCgnQHBheWxvYWRjbXMvZGItJykpLFxuICAgICAgICApLnRvSGF2ZUxlbmd0aCgxKVxuXG4gICAgICAgIGV4cGVjdChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXNbYnVuZGxlclJlcGxhY2VtZW50LnBhY2thZ2VOYW1lXSkudG9FcXVhbChcbiAgICAgICAgICBidW5kbGVyUmVwbGFjZW1lbnQudmVyc2lvbixcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzW2VkaXRvclJlcGxhY2VtZW50LnBhY2thZ2VOYW1lXSkudG9FcXVhbChcbiAgICAgICAgICBlZGl0b3JSZXBsYWNlbWVudC52ZXJzaW9uLFxuICAgICAgICApXG5cbiAgICAgICAgbGV0IHBheWxvYWRDb25maWdQYXRoID0gcGF0aC5yZXNvbHZlKHByb2plY3REaXIsICdzcmMvcGF5bG9hZC5jb25maWcudHMnKVxuXG4gICAgICAgIC8vIFdlYnNpdGUgYW5kIGVjb21tZXJjZSB0ZW1wbGF0ZXMgaGF2ZSBwYXlsb2FkLmNvbmZpZy50cyBpbiBzcmMvcGF5bG9hZFxuICAgICAgICBpZiAoIWZzZS5leGlzdHNTeW5jKHBheWxvYWRDb25maWdQYXRoKSkge1xuICAgICAgICAgIHBheWxvYWRDb25maWdQYXRoID0gcGF0aC5yZXNvbHZlKHByb2plY3REaXIsICdzcmMvcGF5bG9hZC9wYXlsb2FkLmNvbmZpZy50cycpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzZS5yZWFkRmlsZVN5bmMocGF5bG9hZENvbmZpZ1BhdGgsICd1dGYtOCcpXG5cbiAgICAgICAgLy8gQ2hlY2sgcGF5bG9hZC5jb25maWcudHNcbiAgICAgICAgZXhwZWN0KGNvbnRlbnQpLm5vdC50b0NvbnRhaW4oJy8vIGRhdGFiYXNlLWFkYXB0ZXItaW1wb3J0JylcbiAgICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvQ29udGFpbihkYlJlcGxhY2VtZW50LmltcG9ydFJlcGxhY2VtZW50KVxuXG4gICAgICAgIGV4cGVjdChjb250ZW50KS5ub3QudG9Db250YWluKCcvLyBkYXRhYmFzZS1hZGFwdGVyLWNvbmZpZy1zdGFydCcpXG4gICAgICAgIGV4cGVjdChjb250ZW50KS5ub3QudG9Db250YWluKCcvLyBkYXRhYmFzZS1hZGFwdGVyLWNvbmZpZy1lbmQnKVxuICAgICAgICBleHBlY3QoY29udGVudCkudG9Db250YWluKGRiUmVwbGFjZW1lbnQuY29uZmlnUmVwbGFjZW1lbnQuam9pbignXFxuJykpXG5cbiAgICAgICAgZXhwZWN0KGNvbnRlbnQpLm5vdC50b0NvbnRhaW4oJy8vIGJ1bmRsZXItY29uZmlnLWltcG9ydCcpXG4gICAgICAgIGV4cGVjdChjb250ZW50KS50b0NvbnRhaW4oYnVuZGxlclJlcGxhY2VtZW50LmltcG9ydFJlcGxhY2VtZW50KVxuXG4gICAgICAgIGV4cGVjdChjb250ZW50KS5ub3QudG9Db250YWluKCcvLyBidW5kbGVyLWNvbmZpZycpXG4gICAgICAgIGV4cGVjdChjb250ZW50KS50b0NvbnRhaW4oYnVuZGxlclJlcGxhY2VtZW50LmNvbmZpZ1JlcGxhY2VtZW50KVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlKCdUZW1wbGF0ZXMnLCAoKSA9PiB7XG4gICAgaXQudG9kbygnVmVyaWZ5IHRoYXQgYWxsIHRlbXBsYXRlcyBhcmUgdmFsaWQnKVxuICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGVtcGxhdGVzLnRzIHRoYXQgc2hvdWxkIGhhdmUgcmVwbGFjZW1lbnQgY29tbWVudHMsIGFuZCB2ZXJpZnkgdGhhdCB0aGV5IGFyZSBwcmVzZW50XG4gIH0pXG59KVxuIl0sIm5hbWVzIjpbInByb2plY3REaXIiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsImRlc2NyaWJlIiwiYmVmb3JlQWxsIiwiY29uc29sZSIsImxvZyIsImplc3QiLCJmbiIsImJlZm9yZUVhY2giLCJmc2UiLCJleGlzdHNTeW5jIiwicm1kaXJTeW5jIiwicmVjdXJzaXZlIiwiYWZ0ZXJFYWNoIiwicm1TeW5jIiwiYXJncyIsIl8iLCJwYWNrYWdlTWFuYWdlciIsIml0IiwicHJvamVjdE5hbWUiLCJ0ZW1wbGF0ZSIsIm5hbWUiLCJ0eXBlIiwidXJsIiwiZGVzY3JpcHRpb24iLCJjcmVhdGVQcm9qZWN0IiwiY2xpQXJncyIsInBhY2thZ2VKc29uUGF0aCIsInBhY2thZ2VKc29uIiwicmVhZEpzb25TeW5jIiwiZXhwZWN0IiwidG9FcXVhbCIsInRlbXBsYXRlcyIsImdldFZhbGlkVGVtcGxhdGVzIiwiZWFjaCIsInRlbXBsYXRlTmFtZSIsImRiIiwiYnVuZGxlciIsImZpbmQiLCJ0IiwiZGJEZXRhaWxzIiwiZGJVcmkiLCJkYlJlcGxhY2VtZW50IiwiZGJQYWNrYWdlcyIsImJ1bmRsZXJSZXBsYWNlbWVudCIsImJ1bmRsZXJQYWNrYWdlcyIsImVkaXRvclJlcGxhY2VtZW50IiwiZWRpdG9yUGFja2FnZXMiLCJkZXBlbmRlbmNpZXMiLCJwYWNrYWdlTmFtZSIsInZlcnNpb24iLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwibiIsInN0YXJ0c1dpdGgiLCJ0b0hhdmVMZW5ndGgiLCJwYXlsb2FkQ29uZmlnUGF0aCIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJub3QiLCJ0b0NvbnRhaW4iLCJpbXBvcnRSZXBsYWNlbWVudCIsImNvbmZpZ1JlcGxhY2VtZW50Iiwiam9pbiIsInRvZG8iXSwibWFwcGluZ3MiOiI7Ozs7Z0VBQWdCOzZEQUNDOytCQUVhOzBCQUM4QjsyQkFFMUI7Ozs7OztBQUVsQyxNQUFNQSxhQUFhQyxhQUFJLENBQUNDLE9BQU8sQ0FBQ0MsV0FBVztBQUMzQ0MsU0FBUyxpQkFBaUI7SUFDeEJDLFVBQVU7UUFDUkMsUUFBUUMsR0FBRyxHQUFHQyxLQUFLQyxFQUFFO0lBQ3ZCO0lBRUFDLFdBQVc7UUFDVCxJQUFJQyxnQkFBRyxDQUFDQyxVQUFVLENBQUNaLGFBQWE7WUFDOUJXLGdCQUFHLENBQUNFLFNBQVMsQ0FBQ2IsWUFBWTtnQkFBRWMsV0FBVztZQUFLO1FBQzlDO0lBQ0Y7SUFDQUMsVUFBVTtRQUNSLElBQUlKLGdCQUFHLENBQUNDLFVBQVUsQ0FBQ1osYUFBYTtZQUM5QlcsZ0JBQUcsQ0FBQ0ssTUFBTSxDQUFDaEIsWUFBWTtnQkFBRWMsV0FBVztZQUFLO1FBQzNDO0lBQ0Y7SUFFQVYsU0FBUyxrQkFBa0I7UUFDekIseUVBQXlFO1FBQ3pFLE1BQU1hLE9BQU87WUFDWEMsR0FBRztnQkFBQzthQUFlO1lBQ25CLFFBQVE7WUFDUixhQUFhO1FBQ2Y7UUFDQSxNQUFNQyxpQkFBaUI7UUFFdkJDLEdBQUcsMkJBQTJCO1lBQzVCLE1BQU1DLGNBQWM7WUFDcEIsTUFBTUMsV0FBNEI7Z0JBQ2hDQyxNQUFNO2dCQUNOQyxNQUFNO2dCQUNOQyxLQUFLO2dCQUNMQyxhQUFhO1lBQ2Y7WUFDQSxNQUFNQyxJQUFBQSw0QkFBYSxFQUFDO2dCQUNsQkMsU0FBU1g7Z0JBQ1RJO2dCQUNBckI7Z0JBQ0FzQjtnQkFDQUg7WUFDRjtZQUVBLE1BQU1VLGtCQUFrQjVCLGFBQUksQ0FBQ0Ms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
|
123
|
+
//# sourceMappingURL=create-project.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/lib/create-project.spec.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport path from 'path'\nimport type { CliArgs, DbType, ProjectTemplate } from '../types.js'\nimport { createProject } from './create-project.js'\nimport { fileURLToPath } from 'node:url'\nimport { dbReplacements } from './packages.js'\nimport { getValidTemplates } from './templates.js'\nimport globby from 'globby'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nconst projectDir = path.resolve(dirname, './tmp')\ndescribe('createProject', () => {\n beforeAll(() => {\n console.log = jest.fn()\n })\n\n beforeEach(() => {\n if (fse.existsSync(projectDir)) {\n fse.rmdirSync(projectDir, { recursive: true })\n }\n })\n afterEach(() => {\n if (fse.existsSync(projectDir)) {\n fse.rmSync(projectDir, { recursive: true })\n }\n })\n\n describe('#createProject', () => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const args = {\n _: ['project-name'],\n '--db': 'mongodb',\n '--local-template': 'blank',\n '--no-deps': true,\n } as CliArgs\n const packageManager = 'yarn'\n\n it('creates plugin template', async () => {\n const projectName = 'plugin'\n const template: ProjectTemplate = {\n name: 'plugin',\n type: 'plugin',\n url: 'https://github.com/payloadcms/payload-plugin-template',\n description: 'Template for creating a Payload plugin',\n }\n await createProject({\n cliArgs: args,\n projectName,\n projectDir,\n template,\n packageManager,\n })\n\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n const packageJson = fse.readJsonSync(packageJsonPath)\n\n // Check package name and description\n expect(packageJson.name).toEqual(projectName)\n })\n\n describe('creates project from template', () => {\n const templates = getValidTemplates()\n\n it.each([\n ['blank-3.0', 'mongodb'],\n ['blank-3.0', 'postgres'],\n\n // TODO: Re-enable these once 3.0 is stable and templates updated\n // ['website', 'mongodb'],\n // ['website', 'postgres'],\n // ['ecommerce', 'mongodb'],\n // ['ecommerce', 'postgres'],\n ])('update config and deps: %s, %s', async (templateName, db) => {\n const projectName = 'starter-project'\n\n const template = templates.find((t) => t.name === templateName)\n\n const cliArgs = {\n ...args,\n '--db': db,\n '--local-template': templateName,\n } as CliArgs\n\n await createProject({\n cliArgs,\n projectName,\n projectDir,\n template: template as ProjectTemplate,\n packageManager,\n dbDetails: {\n dbUri: `${db}://localhost:27017/create-project-test`,\n type: db as DbType,\n },\n })\n\n const dbReplacement = dbReplacements[db as DbType]\n\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n const packageJson = fse.readJsonSync(packageJsonPath)\n\n // Should only have one db adapter\n expect(\n Object.keys(packageJson.dependencies).filter((n) => n.startsWith('@payloadcms/db-')),\n ).toHaveLength(1)\n\n const payloadConfigPath = (\n await globby('**/payload.config.ts', {\n absolute: true,\n cwd: projectDir,\n })\n )?.[0]\n\n if (!payloadConfigPath) {\n throw new Error(`Could not find payload.config.ts inside ${projectDir}`)\n }\n\n const content = fse.readFileSync(payloadConfigPath, 'utf-8')\n\n // Check payload.config.ts\n expect(content).not.toContain('// database-adapter-import')\n expect(content).toContain(dbReplacement.importReplacement)\n\n expect(content).not.toContain('// database-adapter-config-start')\n expect(content).not.toContain('// database-adapter-config-end')\n expect(content).toContain(dbReplacement.configReplacement.join('\\n'))\n })\n })\n })\n})\n"],"names":["filename","fileURLToPath","dirname","path","projectDir","resolve","describe","beforeAll","console","log","jest","fn","beforeEach","fse","existsSync","rmdirSync","recursive","afterEach","rmSync","args","_","packageManager","it","projectName","template","name","type","url","description","createProject","cliArgs","packageJsonPath","packageJson","readJsonSync","expect","toEqual","templates","getValidTemplates","each","templateName","db","find","t","dbDetails","dbUri","dbReplacement","dbReplacements","Object","keys","dependencies","filter","n","startsWith","toHaveLength","payloadConfigPath","globby","absolute","cwd","Error","content","readFileSync","not","toContain","importReplacement","configReplacement","join"],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"generate-secret.d.ts","sourceRoot":"","sources":["../../src/lib/generate-secret.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
|