create-payload-app 0.5.1 → 1.0.0-beta.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/dist/index.js +10 -53
- package/dist/lib/configure-payload-config.js +97 -142
- package/dist/lib/create-project.js +101 -174
- package/dist/lib/create-project.spec.js +148 -168
- package/dist/lib/generate-secret.js +12 -44
- package/dist/lib/packages.js +52 -32
- package/dist/lib/parse-project-name.js +29 -67
- package/dist/lib/parse-template.js +42 -80
- package/dist/lib/select-db.js +62 -105
- package/dist/lib/templates.js +63 -97
- package/dist/lib/write-env-file.js +51 -106
- package/dist/main.js +118 -198
- package/dist/types.js +5 -1
- package/dist/utils/log.js +40 -19
- package/dist/utils/messages.js +71 -73
- package/package.json +8 -39
- package/.vscode/launch.json +0 -13
| @@ -1,188 +1,168 @@ | |
| 1 1 | 
             
            "use strict";
         | 
| 2 | 
            -
             | 
| 3 | 
            -
                 | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
                 | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                        if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
         | 
| 19 | 
            -
                        if (y = 0, t) op = [op[0] & 2, t.value];
         | 
| 20 | 
            -
                        switch (op[0]) {
         | 
| 21 | 
            -
                            case 0: case 1: t = op; break;
         | 
| 22 | 
            -
                            case 4: _.label++; return { value: op[1], done: false };
         | 
| 23 | 
            -
                            case 5: _.label++; y = op[1]; op = [0]; continue;
         | 
| 24 | 
            -
                            case 7: op = _.ops.pop(); _.trys.pop(); continue;
         | 
| 25 | 
            -
                            default:
         | 
| 26 | 
            -
                                if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
         | 
| 27 | 
            -
                                if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
         | 
| 28 | 
            -
                                if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
         | 
| 29 | 
            -
                                if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
         | 
| 30 | 
            -
                                if (t[2]) _.ops.pop();
         | 
| 31 | 
            -
                                _.trys.pop(); continue;
         | 
| 32 | 
            -
                        }
         | 
| 33 | 
            -
                        op = body.call(thisArg, _);
         | 
| 34 | 
            -
                    } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
         | 
| 35 | 
            -
                    if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
         | 
| 36 | 
            -
                }
         | 
| 37 | 
            -
            };
         | 
| 38 | 
            -
            var __importDefault = (this && this.__importDefault) || function (mod) {
         | 
| 39 | 
            -
                return (mod && mod.__esModule) ? mod : { "default": mod };
         | 
| 40 | 
            -
            };
         | 
| 41 | 
            -
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 42 | 
            -
            var fs_extra_1 = __importDefault(require("fs-extra"));
         | 
| 43 | 
            -
            var path_1 = __importDefault(require("path"));
         | 
| 44 | 
            -
            var create_project_1 = require("./create-project");
         | 
| 45 | 
            -
            var packages_1 = require("./packages");
         | 
| 46 | 
            -
            var projectDir = path_1.default.resolve(__dirname, './tmp');
         | 
| 47 | 
            -
            describe('createProject', function () {
         | 
| 48 | 
            -
                beforeAll(function () {
         | 
| 2 | 
            +
            Object.defineProperty(exports, "__esModule", {
         | 
| 3 | 
            +
                value: true
         | 
| 4 | 
            +
            });
         | 
| 5 | 
            +
            const _fsextra = /*#__PURE__*/ _interop_require_default(require("fs-extra"));
         | 
| 6 | 
            +
            const _path = /*#__PURE__*/ _interop_require_default(require("path"));
         | 
| 7 | 
            +
            const _createproject = require("./create-project");
         | 
| 8 | 
            +
            const _packages = require("./packages");
         | 
| 9 | 
            +
            const _templates = require("./templates");
         | 
| 10 | 
            +
            function _interop_require_default(obj) {
         | 
| 11 | 
            +
                return obj && obj.__esModule ? obj : {
         | 
| 12 | 
            +
                    default: obj
         | 
| 13 | 
            +
                };
         | 
| 14 | 
            +
            }
         | 
| 15 | 
            +
            const projectDir = _path.default.resolve(__dirname, './tmp');
         | 
| 16 | 
            +
            describe('createProject', ()=>{
         | 
| 17 | 
            +
                beforeAll(()=>{
         | 
| 49 18 | 
             
                    console.log = jest.fn();
         | 
| 50 19 | 
             
                });
         | 
| 51 | 
            -
                beforeEach( | 
| 52 | 
            -
                    if ( | 
| 53 | 
            -
                         | 
| 20 | 
            +
                beforeEach(()=>{
         | 
| 21 | 
            +
                    if (_fsextra.default.existsSync(projectDir)) {
         | 
| 22 | 
            +
                        _fsextra.default.rmdirSync(projectDir, {
         | 
| 23 | 
            +
                            recursive: true
         | 
| 24 | 
            +
                        });
         | 
| 54 25 | 
             
                    }
         | 
| 55 26 | 
             
                });
         | 
| 56 | 
            -
                afterEach( | 
| 57 | 
            -
                    if ( | 
| 58 | 
            -
                         | 
| 27 | 
            +
                afterEach(()=>{
         | 
| 28 | 
            +
                    if (_fsextra.default.existsSync(projectDir)) {
         | 
| 29 | 
            +
                        _fsextra.default.rmSync(projectDir, {
         | 
| 30 | 
            +
                            recursive: true
         | 
| 31 | 
            +
                        });
         | 
| 59 32 | 
             
                    }
         | 
| 60 33 | 
             
                });
         | 
| 61 | 
            -
                describe('#createProject',  | 
| 34 | 
            +
                describe('#createProject', ()=>{
         | 
| 62 35 | 
             
                    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
         | 
| 63 | 
            -
                     | 
| 64 | 
            -
                        _: [ | 
| 36 | 
            +
                    const args = {
         | 
| 37 | 
            +
                        _: [
         | 
| 38 | 
            +
                            'project-name'
         | 
| 39 | 
            +
                        ],
         | 
| 65 40 | 
             
                        '--db': 'mongodb',
         | 
| 66 | 
            -
                        '--no-deps': true | 
| 41 | 
            +
                        '--no-deps': true
         | 
| 67 42 | 
             
                    };
         | 
| 68 | 
            -
                     | 
| 69 | 
            -
                    it('creates starter project',  | 
| 70 | 
            -
                         | 
| 71 | 
            -
                         | 
| 72 | 
            -
                             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
                                            projectName: projectName,
         | 
| 84 | 
            -
                                            projectDir: projectDir,
         | 
| 85 | 
            -
                                            template: template,
         | 
| 86 | 
            -
                                            packageManager: packageManager,
         | 
| 87 | 
            -
                                        })];
         | 
| 88 | 
            -
                                case 1:
         | 
| 89 | 
            -
                                    _a.sent();
         | 
| 90 | 
            -
                                    packageJsonPath = path_1.default.resolve(projectDir, 'package.json');
         | 
| 91 | 
            -
                                    packageJson = fs_extra_1.default.readJsonSync(packageJsonPath);
         | 
| 92 | 
            -
                                    // Check package name and description
         | 
| 93 | 
            -
                                    expect(packageJson.name).toEqual(projectName);
         | 
| 94 | 
            -
                                    return [2 /*return*/];
         | 
| 95 | 
            -
                            }
         | 
| 43 | 
            +
                    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
         | 
| 96 58 | 
             
                        });
         | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
                         | 
| 100 | 
            -
                         | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
                                        })];
         | 
| 117 | 
            -
                                case 1:
         | 
| 118 | 
            -
                                    _a.sent();
         | 
| 119 | 
            -
                                    packageJsonPath = path_1.default.resolve(projectDir, 'package.json');
         | 
| 120 | 
            -
                                    packageJson = fs_extra_1.default.readJsonSync(packageJsonPath);
         | 
| 121 | 
            -
                                    // Check package name and description
         | 
| 122 | 
            -
                                    expect(packageJson.name).toEqual(projectName);
         | 
| 123 | 
            -
                                    return [2 /*return*/];
         | 
| 124 | 
            -
                            }
         | 
| 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 | 
            +
                    it('creates plugin template', async ()=>{
         | 
| 65 | 
            +
                        const projectName = 'plugin';
         | 
| 66 | 
            +
                        const template = {
         | 
| 67 | 
            +
                            name: 'plugin',
         | 
| 68 | 
            +
                            type: 'plugin',
         | 
| 69 | 
            +
                            url: 'https://github.com/payloadcms/payload-plugin-template',
         | 
| 70 | 
            +
                            description: 'Template for creating a Payload plugin'
         | 
| 71 | 
            +
                        };
         | 
| 72 | 
            +
                        await (0, _createproject.createProject)({
         | 
| 73 | 
            +
                            cliArgs: args,
         | 
| 74 | 
            +
                            projectName,
         | 
| 75 | 
            +
                            projectDir,
         | 
| 76 | 
            +
                            template,
         | 
| 77 | 
            +
                            packageManager
         | 
| 125 78 | 
             
                        });
         | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 79 | 
            +
                        const packageJsonPath = _path.default.resolve(projectDir, 'package.json');
         | 
| 80 | 
            +
                        const packageJson = _fsextra.default.readJsonSync(packageJsonPath);
         | 
| 81 | 
            +
                        // Check package name and description
         | 
| 82 | 
            +
                        expect(packageJson.name).toEqual(projectName);
         | 
| 83 | 
            +
                    });
         | 
| 84 | 
            +
                    describe('db adapters and bundlers', ()=>{
         | 
| 85 | 
            +
                        const templates = (0, _templates.getValidTemplates)();
         | 
| 128 86 | 
             
                        it.each([
         | 
| 129 | 
            -
                            [ | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
                             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
             | 
| 162 | 
            -
             | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 170 | 
            -
             | 
| 171 | 
            -
                                        expect(content).not.toContain('// database-adapter-config-start');
         | 
| 172 | 
            -
                                        expect(content).not.toContain('// database-adapter-config-end');
         | 
| 173 | 
            -
                                        expect(content).toContain(dbReplacement.configReplacement.join('\n'));
         | 
| 174 | 
            -
                                        expect(content).not.toContain('// bundler-config-import');
         | 
| 175 | 
            -
                                        expect(content).toContain(bundlerReplacement.importReplacement);
         | 
| 176 | 
            -
                                        expect(content).not.toContain('// bundler-config');
         | 
| 177 | 
            -
                                        expect(content).toContain(bundlerReplacement.configReplacement);
         | 
| 178 | 
            -
                                        return [2 /*return*/];
         | 
| 87 | 
            +
                            [
         | 
| 88 | 
            +
                                'blank',
         | 
| 89 | 
            +
                                'mongodb',
         | 
| 90 | 
            +
                                'webpack'
         | 
| 91 | 
            +
                            ],
         | 
| 92 | 
            +
                            [
         | 
| 93 | 
            +
                                'blank',
         | 
| 94 | 
            +
                                'postgres',
         | 
| 95 | 
            +
                                'webpack'
         | 
| 96 | 
            +
                            ],
         | 
| 97 | 
            +
                            [
         | 
| 98 | 
            +
                                'website',
         | 
| 99 | 
            +
                                'mongodb',
         | 
| 100 | 
            +
                                'webpack'
         | 
| 101 | 
            +
                            ],
         | 
| 102 | 
            +
                            [
         | 
| 103 | 
            +
                                'website',
         | 
| 104 | 
            +
                                'postgres',
         | 
| 105 | 
            +
                                'webpack'
         | 
| 106 | 
            +
                            ],
         | 
| 107 | 
            +
                            [
         | 
| 108 | 
            +
                                'ecommerce',
         | 
| 109 | 
            +
                                'mongodb',
         | 
| 110 | 
            +
                                'webpack'
         | 
| 111 | 
            +
                            ],
         | 
| 112 | 
            +
                            [
         | 
| 113 | 
            +
                                'ecommerce',
         | 
| 114 | 
            +
                                'postgres',
         | 
| 115 | 
            +
                                'webpack'
         | 
| 116 | 
            +
                            ]
         | 
| 117 | 
            +
                        ])('update config and deps: %s, %s, %s', async (templateName, db, bundler)=>{
         | 
| 118 | 
            +
                            const projectName = 'starter-project';
         | 
| 119 | 
            +
                            const template = templates.find((t)=>t.name === templateName);
         | 
| 120 | 
            +
                            await (0, _createproject.createProject)({
         | 
| 121 | 
            +
                                cliArgs: args,
         | 
| 122 | 
            +
                                projectName,
         | 
| 123 | 
            +
                                projectDir,
         | 
| 124 | 
            +
                                template,
         | 
| 125 | 
            +
                                packageManager,
         | 
| 126 | 
            +
                                dbDetails: {
         | 
| 127 | 
            +
                                    dbUri: `${db}://localhost:27017/create-project-test`,
         | 
| 128 | 
            +
                                    type: db
         | 
| 179 129 | 
             
                                }
         | 
| 180 130 | 
             
                            });
         | 
| 181 | 
            -
             | 
| 131 | 
            +
                            const dbReplacement = _packages.dbPackages[db];
         | 
| 132 | 
            +
                            const bundlerReplacement = _packages.bundlerPackages[bundler];
         | 
| 133 | 
            +
                            const editorReplacement = _packages.editorPackages['slate'];
         | 
| 134 | 
            +
                            const packageJsonPath = _path.default.resolve(projectDir, 'package.json');
         | 
| 135 | 
            +
                            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 | 
            +
                            // Should only have one db adapter
         | 
| 140 | 
            +
                            expect(Object.keys(packageJson.dependencies).filter((n)=>n.startsWith('@payloadcms/db-'))).toHaveLength(1);
         | 
| 141 | 
            +
                            expect(packageJson.dependencies[bundlerReplacement.packageName]).toEqual(bundlerReplacement.version);
         | 
| 142 | 
            +
                            expect(packageJson.dependencies[editorReplacement.packageName]).toEqual(editorReplacement.version);
         | 
| 143 | 
            +
                            let payloadConfigPath = _path.default.resolve(projectDir, 'src/payload.config.ts');
         | 
| 144 | 
            +
                            // Website and ecommerce templates have payload.config.ts in src/payload
         | 
| 145 | 
            +
                            if (!_fsextra.default.existsSync(payloadConfigPath)) {
         | 
| 146 | 
            +
                                payloadConfigPath = _path.default.resolve(projectDir, 'src/payload/payload.config.ts');
         | 
| 147 | 
            +
                            }
         | 
| 148 | 
            +
                            const content = _fsextra.default.readFileSync(payloadConfigPath, 'utf-8');
         | 
| 149 | 
            +
                            // Check payload.config.ts
         | 
| 150 | 
            +
                            expect(content).not.toContain('// database-adapter-import');
         | 
| 151 | 
            +
                            expect(content).toContain(dbReplacement.importReplacement);
         | 
| 152 | 
            +
                            expect(content).not.toContain('// database-adapter-config-start');
         | 
| 153 | 
            +
                            expect(content).not.toContain('// database-adapter-config-end');
         | 
| 154 | 
            +
                            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 | 
            +
                        });
         | 
| 182 160 | 
             
                    });
         | 
| 183 161 | 
             
                });
         | 
| 184 | 
            -
                describe('Templates',  | 
| 162 | 
            +
                describe('Templates', ()=>{
         | 
| 185 163 | 
             
                    it.todo('Verify that all templates are valid');
         | 
| 186 | 
            -
             | 
| 164 | 
            +
                // Loop through all templates.ts that should have replacement comments, and verify that they are present
         | 
| 187 165 | 
             
                });
         | 
| 188 166 | 
             
            });
         | 
| 167 | 
            +
             | 
| 168 | 
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3JlYXRlLXByb2plY3Quc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnNlIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB0eXBlIHsgQnVuZGxlclR5cGUsIENsaUFyZ3MsIERiVHlwZSwgUHJvamVjdFRlbXBsYXRlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBjcmVhdGVQcm9qZWN0IH0gZnJvbSAnLi9jcmVhdGUtcHJvamVjdCdcbmltcG9ydCB7IGJ1bmRsZXJQYWNrYWdlcywgZGJQYWNrYWdlcywgZWRpdG9yUGFja2FnZXMgfSBmcm9tICcuL3BhY2thZ2VzJ1xuaW1wb3J0IGV4cCBmcm9tICdjb25zdGFudHMnXG5pbXBvcnQgeyBnZXRWYWxpZFRlbXBsYXRlcyB9IGZyb20gJy4vdGVtcGxhdGVzJ1xuXG5jb25zdCBwcm9qZWN0RGlyID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vdG1wJylcbmRlc2NyaWJlKCdjcmVhdGVQcm9qZWN0JywgKCkgPT4ge1xuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nID0gamVzdC5mbigpXG4gIH0pXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgaWYgKGZzZS5leGlzdHNTeW5jKHByb2plY3REaXIpKSB7XG4gICAgICBmc2Uucm1kaXJTeW5jKHByb2plY3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgfVxuICB9KVxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGlmIChmc2UuZXhpc3RzU3luYyhwcm9qZWN0RGlyKSkge1xuICAgICAgZnNlLnJtU3luYyhwcm9qZWN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIH1cbiAgfSlcblxuICBkZXNjcmliZSgnI2NyZWF0ZVByb2plY3QnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICBfOiBbJ3Byb2plY3QtbmFtZSddLFxuICAgICAgJy0tZGInOiAnbW9uZ29kYicsXG4gICAgICAnLS1uby1kZXBzJzogdHJ1ZSxcbiAgICB9IGFzIENsaUFyZ3NcbiAgICBjb25zdCBwYWNrYWdlTWFuYWdlciA9ICd5YXJuJ1xuXG4gICAgaXQoJ2NyZWF0ZXMgc3RhcnRlciBwcm9qZWN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvamVjdE5hbWUgPSAnc3RhcnRlci1wcm9qZWN0J1xuICAgICAgY29uc3QgdGVtcGxhdGU6IFByb2plY3RUZW1wbGF0ZSA9IHtcbiAgICAgICAgbmFtZTogJ2JsYW5rJyxcbiAgICAgICAgdHlwZTogJ3N0YXJ0ZXInLFxuICAgICAgICB1cmw6ICdodHRwczovL2dpdGh1Yi5jb20vcGF5bG9hZGNtcy9wYXlsb2FkL3RlbXBsYXRlcy9ibGFuaycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQmxhbmsgVGVtcGxhdGUnLFxuICAgICAgfVxuICAgICAgYXdhaXQgY3JlYXRlUHJvamVjdCh7XG4gICAgICAgIGNsaUFyZ3M6IGFyZ3MsXG4gICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICBwcm9qZWN0RGlyLFxuICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgcGFja2FnZU1hbmFnZXIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLnJlc29sdmUocHJvamVjdERpciwgJ3BhY2thZ2UuanNvbicpXG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IGZzZS5yZWFkSnNvblN5bmMocGFja2FnZUpzb25QYXRoKVxuXG4gICAgICAvLyBDaGVjayBwYWNrYWdlIG5hbWUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICBleHBlY3QocGFja2FnZUpzb24ubmFtZSkudG9FcXVhbChwcm9qZWN0TmFtZSlcbiAgICB9KVxuXG4gICAgaXQoJ2NyZWF0ZXMgcGx1Z2luIHRlbXBsYXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvamVjdE5hbWUgPSAncGx1Z2luJ1xuICAgICAgY29uc3QgdGVtcGxhdGU6IFByb2plY3RUZW1wbGF0ZSA9IHtcbiAgICAgICAgbmFtZTogJ3BsdWdpbicsXG4gICAgICAgIHR5cGU6ICdwbHVnaW4nLFxuICAgICAgICB1cmw6ICdodHRwczovL2dpdGh1Yi5jb20vcGF5bG9hZGNtcy9wYXlsb2FkLXBsdWdpbi10ZW1wbGF0ZScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGVtcGxhdGUgZm9yIGNyZWF0aW5nIGEgUGF5bG9hZCBwbHVnaW4nLFxuICAgICAgfVxuICAgICAgYXdhaXQgY3JlYXRlUHJvamVjdCh7XG4gICAgICAgIGNsaUFyZ3M6IGFyZ3MsXG4gICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICBwcm9qZWN0RGlyLFxuICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgcGFja2FnZU1hbmFnZXIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLnJlc29sdmUocHJvamVjdERpciwgJ3BhY2thZ2UuanNvbicpXG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IGZzZS5yZWFkSnNvblN5bmMocGFja2FnZUpzb25QYXRoKVxuXG4gICAgICAvLyBDaGVjayBwYWNrYWdlIG5hbWUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICBleHBlY3QocGFja2FnZUpzb24ubmFtZSkudG9FcXVhbChwcm9qZWN0TmFtZSlcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RiIGFkYXB0ZXJzIGFuZCBidW5kbGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGdldFZhbGlkVGVtcGxhdGVzKClcblxuICAgICAgaXQuZWFjaChbXG4gICAgICAgIFsnYmxhbmsnLCAnbW9uZ29kYicsICd3ZWJwYWNrJ10sXG4gICAgICAgIFsnYmxhbmsnLCAncG9zdGdyZXMnLCAnd2VicGFjayddLFxuICAgICAgICBbJ3dlYnNpdGUnLCAnbW9uZ29kYicsICd3ZWJwYWNrJ10sXG4gICAgICAgIFsnd2Vic2l0ZScsICdwb3N0Z3JlcycsICd3ZWJwYWNrJ10sXG4gICAgICAgIFsnZWNvbW1lcmNlJywgJ21vbmdvZGInLCAnd2VicGFjayddLFxuICAgICAgICBbJ2Vjb21tZXJjZScsICdwb3N0Z3JlcycsICd3ZWJwYWNrJ10sXG4gICAgICBdKSgndXBkYXRlIGNvbmZpZyBhbmQgZGVwczogJXMsICVzLCAlcycsIGFzeW5jICh0ZW1wbGF0ZU5hbWUsIGRiLCBidW5kbGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2plY3ROYW1lID0gJ3N0YXJ0ZXItcHJvamVjdCdcblxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRlbXBsYXRlcy5maW5kKCh0KSA9PiB0Lm5hbWUgPT09IHRlbXBsYXRlTmFtZSlcblxuICAgICAgICBhd2FpdCBjcmVhdGVQcm9qZWN0KHtcbiAgICAgICAgICBjbGlBcmdzOiBhcmdzLFxuICAgICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICAgIHByb2plY3REaXIsXG4gICAgICAgICAgdGVtcGxhdGUsXG4gICAgICAgICAgcGFja2FnZU1hbmFnZXIsXG4gICAgICAgICAgZGJEZXRhaWxzOiB7XG4gICAgICAgICAgICBkYlVyaTogYCR7ZGJ9Oi8vbG9jYWxob3N0OjI3MDE3L2NyZWF0ZS1wcm9qZWN0LXRlc3RgLFxuICAgICAgICAgICAgdHlwZTogZGIgYXMgRGJUeXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgZGJSZXBsYWNlbWVudCA9IGRiUGFja2FnZXNbZGIgYXMgRGJUeXBlXVxuICAgICAgICBjb25zdCBidW5kbGVyUmVwbGFjZW1lbnQgPSBidW5kbGVyUGFja2FnZXNbYnVuZGxlciBhcyBCdW5kbGVyVHlwZV1cbiAgICAgICAgY29uc3QgZWRpdG9yUmVwbGFjZW1lbnQgPSBlZGl0b3JQYWNrYWdlc1snc2xhdGUnXVxuXG4gICAgICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyLCAncGFja2FnZS5qc29uJylcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBmc2UucmVhZEpzb25TeW5jKHBhY2thZ2VKc29uUGF0aClcblxuICAgICAgICAvLyBDaGVjayBkZXBzXG4gICAgICAgIGV4cGVjdChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXNbJ3BheWxvYWQnXSkudG9FcXVhbCgnXjIuMC4wJylcbiAgICAgICAgZXhwZWN0KHBhY2thZ2VKc29uLmRlcGVuZGVuY2llc1tkYlJlcGxhY2VtZW50LnBhY2thZ2VOYW1lXSkudG9FcXVhbChkYlJlcGxhY2VtZW50LnZlcnNpb24pXG5cbiAgICAgICAgLy8gU2hvdWxkIG9ubHkgaGF2ZSBvbmUgZGIgYWRhcHRlclxuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgT2JqZWN0LmtleXMocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzKS5maWx0ZXIoKG4pID0+IG4uc3RhcnRzV2l0aCgnQHBheWxvYWRjbXMvZGItJykpLFxuICAgICAgICApLnRvSGF2ZUxlbmd0aCgxKVxuXG4gICAgICAgIGV4cGVjdChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXNbYnVuZGxlclJlcGxhY2VtZW50LnBhY2thZ2VOYW1lXSkudG9FcXVhbChcbiAgICAgICAgICBidW5kbGVyUmVwbGFjZW1lbnQudmVyc2lvbixcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzW2VkaXRvclJlcGxhY2VtZW50LnBhY2thZ2VOYW1lXSkudG9FcXVhbChcbiAgICAgICAgICBlZGl0b3JSZXBsYWNlbWVudC52ZXJzaW9uLFxuICAgICAgICApXG5cbiAgICAgICAgbGV0IHBheWxvYWRDb25maWdQYXRoID0gcGF0aC5yZXNvbHZlKHByb2plY3REaXIsICdzcmMvcGF5bG9hZC5jb25maWcudHMnKVxuXG4gICAgICAgIC8vIFdlYnNpdGUgYW5kIGVjb21tZXJjZSB0ZW1wbGF0ZXMgaGF2ZSBwYXlsb2FkLmNvbmZpZy50cyBpbiBzcmMvcGF5bG9hZFxuICAgICAgICBpZiAoIWZzZS5leGlzdHNTeW5jKHBheWxvYWRDb25maWdQYXRoKSkge1xuICAgICAgICAgIHBheWxvYWRDb25maWdQYXRoID0gcGF0aC5yZXNvbHZlKHByb2plY3REaXIsICdzcmMvcGF5bG9hZC9wYXlsb2FkLmNvbmZpZy50cycpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzZS5yZWFkRmlsZVN5bmMocGF5bG9hZENvbmZpZ1BhdGgsICd1dGYtOCcpXG5cbiAgICAgICAgLy8gQ2hlY2sgcGF5bG9hZC5jb25maWcudHNcbiAgICAgICAgZXhwZWN0KGNvbnRlbnQpLm5vdC50b0NvbnRhaW4oJy8vIGRhdGFiYXNlLWFkYXB0ZXItaW1wb3J0JylcbiAgICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvQ29udGFpbihkYlJlcGxhY2VtZW50LmltcG9ydFJlcGxhY2VtZW50KVxuXG4gICAgICAgIGV4cGVjdChjb250ZW50KS5ub3QudG9Db250YWluKCcvLyBkYXRhYmFzZS1hZGFwdGVyLWNvbmZpZy1zdGFydCcpXG4gICAgICAgIGV4cGVjdChjb250ZW50KS5ub3QudG9Db250YWluKCcvLyBkYXRhYmFzZS1hZGFwdGVyLWNvbmZpZy1lbmQnKVxuICAgICAgICBleHBlY3QoY29udGVudCkudG9Db250YWluKGRiUmVwbGFjZW1lbnQuY29uZmlnUmVwbGFjZW1lbnQuam9pbignXFxuJykpXG5cbiAgICAgICAgZXhwZWN0KGNvbnRlbnQpLm5vdC50b0NvbnRhaW4oJy8vIGJ1bmRsZXItY29uZmlnLWltcG9ydCcpXG4gICAgICAgIGV4cGVjdChjb250ZW50KS50b0NvbnRhaW4oYnVuZGxlclJlcGxhY2VtZW50LmltcG9ydFJlcGxhY2VtZW50KVxuXG4gICAgICAgIGV4cGVjdChjb250ZW50KS5ub3QudG9Db250YWluKCcvLyBidW5kbGVyLWNvbmZpZycpXG4gICAgICAgIGV4cGVjdChjb250ZW50KS50b0NvbnRhaW4oYnVuZGxlclJlcGxhY2VtZW50LmNvbmZpZ1JlcGxhY2VtZW50KVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlKCdUZW1wbGF0ZXMnLCAoKSA9PiB7XG4gICAgaXQudG9kbygnVmVyaWZ5IHRoYXQgYWxsIHRlbXBsYXRlcyBhcmUgdmFsaWQnKVxuICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGVtcGxhdGVzLnRzIHRoYXQgc2hvdWxkIGhhdmUgcmVwbGFjZW1lbnQgY29tbWVudHMsIGFuZCB2ZXJpZnkgdGhhdCB0aGV5IGFyZSBwcmVzZW50XG4gIH0pXG59KVxuIl0sIm5hbWVzIjpbInByb2plY3REaXIiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsImRlc2NyaWJlIiwiYmVmb3JlQWxsIiwiY29uc29sZSIsImxvZyIsImplc3QiLCJmbiIsImJlZm9yZUVhY2giLCJmc2UiLCJleGlzdHNTeW5jIiwicm1kaXJTeW5jIiwicmVjdXJzaXZlIiwiYWZ0ZXJFYWNoIiwicm1TeW5jIiwiYXJncyIsIl8iLCJwYWNrYWdlTWFuYWdlciIsIml0IiwicHJvamVjdE5hbWUiLCJ0ZW1wbGF0ZSIsIm5hbWUiLCJ0eXBlIiwidXJsIiwiZGVzY3JpcHRpb24iLCJjcmVhdGVQcm9qZWN0IiwiY2xpQXJncyIsInBhY2thZ2VKc29uUGF0aCIsInBhY2thZ2VKc29uIiwicmVhZEpzb25TeW5jIiwiZXhwZWN0IiwidG9FcXVhbCIsInRlbXBsYXRlcyIsImdldFZhbGlkVGVtcGxhdGVzIiwiZWFjaCIsInRlbXBsYXRlTmFtZSIsImRiIiwiYnVuZGxlciIsImZpbmQiLCJ0IiwiZGJEZXRhaWxzIiwiZGJVcmkiLCJkYlJlcGxhY2VtZW50IiwiZGJQYWNrYWdlcyIsImJ1bmRsZXJSZXBsYWNlbWVudCIsImJ1bmRsZXJQYWNrYWdlcyIsImVkaXRvclJlcGxhY2VtZW50IiwiZWRpdG9yUGFja2FnZXMiLCJkZXBlbmRlbmNpZXMiLCJwYWNrYWdlTmFtZSIsInZlcnNpb24iLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwibiIsInN0YXJ0c1dpdGgiLCJ0b0hhdmVMZW5ndGgiLCJwYXlsb2FkQ29uZmlnUGF0aCIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJub3QiLCJ0b0NvbnRhaW4iLCJpbXBvcnRSZXBsYWNlbWVudCIsImNvbmZpZ1JlcGxhY2VtZW50Iiwiam9pbiIsInRvZG8iXSwibWFwcGluZ3MiOiI7Ozs7Z0VBQWdCOzZEQUNDOytCQUVhOzBCQUM4QjsyQkFFMUI7Ozs7OztBQUVsQyxNQUFNQSxhQUFhQyxhQUFJLENBQUNDLE9BQU8sQ0FBQ0MsV0FBVztBQUMzQ0MsU0FBUyxpQkFBaUI7SUFDeEJDLFVBQVU7UUFDUkMsUUFBUUMsR0FBRyxHQUFHQyxLQUFLQyxFQUFFO0lBQ3ZCO0lBRUFDLFdBQVc7UUFDVCxJQUFJQyxnQkFBRyxDQUFDQyxVQUFVLENBQUNaLGFBQWE7WUFDOUJXLGdCQUFHLENBQUNFLFNBQVMsQ0FBQ2IsWUFBWTtnQkFBRWMsV0FBVztZQUFLO1FBQzlDO0lBQ0Y7SUFDQUMsVUFBVTtRQUNSLElBQUlKLGdCQUFHLENBQUNDLFVBQVUsQ0FBQ1osYUFBYTtZQUM5QlcsZ0JBQUcsQ0FBQ0ssTUFBTSxDQUFDaEIsWUFBWTtnQkFBRWMsV0FBVztZQUFLO1FBQzNDO0lBQ0Y7SUFFQVYsU0FBUyxrQkFBa0I7UUFDekIseUVBQXlFO1FBQ3pFLE1BQU1hLE9BQU87WUFDWEMsR0FBRztnQkFBQzthQUFlO1lBQ25CLFFBQVE7WUFDUixhQUFhO1FBQ2Y7UUFDQSxNQUFNQyxpQkFBaUI7UUFFdkJDLEdBQUcsMkJBQTJCO1lBQzVCLE1BQU1DLGNBQWM7WUFDcEIsTUFBTUMsV0FBNEI7Z0JBQ2hDQyxNQUFNO2dCQUNOQyxNQUFNO2dCQUNOQyxLQUFLO2dCQUNMQyxhQUFhO1lBQ2Y7WUFDQSxNQUFNQyxJQUFBQSw0QkFBYSxFQUFDO2dCQUNsQkMsU0FBU1g7Z0JBQ1RJO2dCQUNBckI7Z0JBQ0FzQjtnQkFDQUg7WUFDRjtZQUVBLE1BQU1VLGtCQUFrQjVCLGFBQUksQ0FBQ0Ms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
         | 
| @@ -1,48 +1,16 @@ | |
| 1 1 | 
             
            "use strict";
         | 
| 2 | 
            -
             | 
| 3 | 
            -
                 | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
                     | 
| 9 | 
            -
                });
         | 
| 10 | 
            -
            };
         | 
| 11 | 
            -
            var __generator = (this && this.__generator) || function (thisArg, body) {
         | 
| 12 | 
            -
                var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
         | 
| 13 | 
            -
                return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
         | 
| 14 | 
            -
                function verb(n) { return function (v) { return step([n, v]); }; }
         | 
| 15 | 
            -
                function step(op) {
         | 
| 16 | 
            -
                    if (f) throw new TypeError("Generator is already executing.");
         | 
| 17 | 
            -
                    while (g && (g = 0, op[0] && (_ = 0)), _) try {
         | 
| 18 | 
            -
                        if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
         | 
| 19 | 
            -
                        if (y = 0, t) op = [op[0] & 2, t.value];
         | 
| 20 | 
            -
                        switch (op[0]) {
         | 
| 21 | 
            -
                            case 0: case 1: t = op; break;
         | 
| 22 | 
            -
                            case 4: _.label++; return { value: op[1], done: false };
         | 
| 23 | 
            -
                            case 5: _.label++; y = op[1]; op = [0]; continue;
         | 
| 24 | 
            -
                            case 7: op = _.ops.pop(); _.trys.pop(); continue;
         | 
| 25 | 
            -
                            default:
         | 
| 26 | 
            -
                                if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
         | 
| 27 | 
            -
                                if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
         | 
| 28 | 
            -
                                if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
         | 
| 29 | 
            -
                                if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
         | 
| 30 | 
            -
                                if (t[2]) _.ops.pop();
         | 
| 31 | 
            -
                                _.trys.pop(); continue;
         | 
| 32 | 
            -
                        }
         | 
| 33 | 
            -
                        op = body.call(thisArg, _);
         | 
| 34 | 
            -
                    } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
         | 
| 35 | 
            -
                    if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
         | 
| 2 | 
            +
            Object.defineProperty(exports, "__esModule", {
         | 
| 3 | 
            +
                value: true
         | 
| 4 | 
            +
            });
         | 
| 5 | 
            +
            Object.defineProperty(exports, "generateSecret", {
         | 
| 6 | 
            +
                enumerable: true,
         | 
| 7 | 
            +
                get: function() {
         | 
| 8 | 
            +
                    return generateSecret;
         | 
| 36 9 | 
             
                }
         | 
| 37 | 
            -
            };
         | 
| 38 | 
            -
             | 
| 39 | 
            -
            exports.generateSecret = void 0;
         | 
| 40 | 
            -
            var crypto_1 = require("crypto");
         | 
| 10 | 
            +
            });
         | 
| 11 | 
            +
            const _crypto = require("crypto");
         | 
| 41 12 | 
             
            function generateSecret() {
         | 
| 42 | 
            -
                return  | 
| 43 | 
            -
                    return __generator(this, function (_a) {
         | 
| 44 | 
            -
                        return [2 /*return*/, (0, crypto_1.randomBytes)(32).toString('hex').slice(0, 24)];
         | 
| 45 | 
            -
                    });
         | 
| 46 | 
            -
                });
         | 
| 13 | 
            +
                return (0, _crypto.randomBytes)(32).toString('hex').slice(0, 24);
         | 
| 47 14 | 
             
            }
         | 
| 48 | 
            -
             | 
| 15 | 
            +
             | 
| 16 | 
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZ2VuZXJhdGUtc2VjcmV0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTZWNyZXQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jykuc2xpY2UoMCwgMjQpXG59XG4iXSwibmFtZXMiOlsiZ2VuZXJhdGVTZWNyZXQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwic2xpY2UiXSwibWFwcGluZ3MiOiI7Ozs7K0JBRWdCQTs7O2VBQUFBOzs7d0JBRlk7QUFFckIsU0FBU0E7SUFDZCxPQUFPQyxJQUFBQSxtQkFBVyxFQUFDLElBQUlDLFFBQVEsQ0FBQyxPQUFPQyxLQUFLLENBQUMsR0FBRztBQUNsRCJ9
         | 
    
        package/dist/lib/packages.js
    CHANGED
    
    | @@ -1,61 +1,81 @@ | |
| 1 1 | 
             
            "use strict";
         | 
| 2 | 
            -
            Object.defineProperty(exports, "__esModule", { | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 2 | 
            +
            Object.defineProperty(exports, "__esModule", {
         | 
| 3 | 
            +
                value: true
         | 
| 4 | 
            +
            });
         | 
| 5 | 
            +
            function _export(target, all) {
         | 
| 6 | 
            +
                for(var name in all)Object.defineProperty(target, name, {
         | 
| 7 | 
            +
                    enumerable: true,
         | 
| 8 | 
            +
                    get: all[name]
         | 
| 9 | 
            +
                });
         | 
| 10 | 
            +
            }
         | 
| 11 | 
            +
            _export(exports, {
         | 
| 12 | 
            +
                dbPackages: function() {
         | 
| 13 | 
            +
                    return dbPackages;
         | 
| 14 | 
            +
                },
         | 
| 15 | 
            +
                bundlerPackages: function() {
         | 
| 16 | 
            +
                    return bundlerPackages;
         | 
| 17 | 
            +
                },
         | 
| 18 | 
            +
                editorPackages: function() {
         | 
| 19 | 
            +
                    return editorPackages;
         | 
| 20 | 
            +
                }
         | 
| 21 | 
            +
            });
         | 
| 22 | 
            +
            const mongodbReplacement = {
         | 
| 6 23 | 
             
                importReplacement: "import { mongooseAdapter } from '@payloadcms/db-mongodb'",
         | 
| 24 | 
            +
                packageName: '@payloadcms/db-mongodb',
         | 
| 7 25 | 
             
                // Replacement between `// database-adapter-config-start` and `// database-adapter-config-end`
         | 
| 8 26 | 
             
                configReplacement: [
         | 
| 9 27 | 
             
                    '  db: mongooseAdapter({',
         | 
| 10 28 | 
             
                    '    url: process.env.DATABASE_URI,',
         | 
| 11 | 
            -
                    '  }),' | 
| 29 | 
            +
                    '  }),'
         | 
| 12 30 | 
             
                ],
         | 
| 13 | 
            -
                version: '^1.0.0' | 
| 31 | 
            +
                version: '^1.0.0'
         | 
| 14 32 | 
             
            };
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                packageName: '@payloadcms/db-postgres',
         | 
| 17 | 
            -
                importReplacement: "import { postgresAdapter } from '@payloadcms/db-postgres'",
         | 
| 33 | 
            +
            const postgresReplacement = {
         | 
| 18 34 | 
             
                configReplacement: [
         | 
| 19 35 | 
             
                    '  db: postgresAdapter({',
         | 
| 20 36 | 
             
                    '    pool: {',
         | 
| 21 37 | 
             
                    '      connectionString: process.env.DATABASE_URI,',
         | 
| 22 38 | 
             
                    '    },',
         | 
| 23 | 
            -
                    '  }),' | 
| 39 | 
            +
                    '  }),'
         | 
| 24 40 | 
             
                ],
         | 
| 25 | 
            -
                 | 
| 41 | 
            +
                importReplacement: "import { postgresAdapter } from '@payloadcms/db-postgres'",
         | 
| 42 | 
            +
                packageName: '@payloadcms/db-postgres',
         | 
| 43 | 
            +
                version: '^0.x'
         | 
| 26 44 | 
             
            };
         | 
| 27 | 
            -
             | 
| 45 | 
            +
            const dbPackages = {
         | 
| 28 46 | 
             
                mongodb: mongodbReplacement,
         | 
| 29 | 
            -
                postgres: postgresReplacement | 
| 47 | 
            +
                postgres: postgresReplacement
         | 
| 30 48 | 
             
            };
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                packageName: '@payloadcms/bundler-webpack',
         | 
| 49 | 
            +
            const webpackReplacement = {
         | 
| 33 50 | 
             
                importReplacement: "import { webpackBundler } from '@payloadcms/bundler-webpack'",
         | 
| 51 | 
            +
                packageName: '@payloadcms/bundler-webpack',
         | 
| 34 52 | 
             
                // Replacement of line containing `// bundler-config`
         | 
| 35 53 | 
             
                configReplacement: '    bundler: webpackBundler(),',
         | 
| 36 | 
            -
                version: '^1.0.0' | 
| 54 | 
            +
                version: '^1.0.0'
         | 
| 37 55 | 
             
            };
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                packageName: '@payloadcms/bundler-vite',
         | 
| 40 | 
            -
                importReplacement: "import { viteBundler } from '@payloadcms/bundler-vite'",
         | 
| 56 | 
            +
            const viteReplacement = {
         | 
| 41 57 | 
             
                configReplacement: '  bundler: viteBundler(),',
         | 
| 42 | 
            -
                 | 
| 58 | 
            +
                importReplacement: "import { viteBundler } from '@payloadcms/bundler-vite'",
         | 
| 59 | 
            +
                packageName: '@payloadcms/bundler-vite',
         | 
| 60 | 
            +
                version: '^0.x'
         | 
| 43 61 | 
             
            };
         | 
| 44 | 
            -
             | 
| 45 | 
            -
                webpack: webpackReplacement,
         | 
| 62 | 
            +
            const bundlerPackages = {
         | 
| 46 63 | 
             
                vite: viteReplacement,
         | 
| 64 | 
            +
                webpack: webpackReplacement
         | 
| 47 65 | 
             
            };
         | 
| 48 | 
            -
             | 
| 49 | 
            -
                slate: {
         | 
| 50 | 
            -
                    packageName: '@payloadcms/richtext-slate',
         | 
| 51 | 
            -
                    importReplacement: "import { slateEditor } from '@payloadcms/richtext-slate'",
         | 
| 52 | 
            -
                    configReplacement: '  editor: slateEditor({}),',
         | 
| 53 | 
            -
                    version: '^1.0.0',
         | 
| 54 | 
            -
                },
         | 
| 66 | 
            +
            const editorPackages = {
         | 
| 55 67 | 
             
                lexical: {
         | 
| 56 | 
            -
                    packageName: '@payloadcms/richtext-lexical',
         | 
| 57 | 
            -
                    importReplacement: "import { lexicalEditor } from '@payloadcms/richtext-lexical'",
         | 
| 58 68 | 
             
                    configReplacement: '  editor: lexicalEditor({}),',
         | 
| 59 | 
            -
                     | 
| 69 | 
            +
                    importReplacement: "import { lexicalEditor } from '@payloadcms/richtext-lexical'",
         | 
| 70 | 
            +
                    packageName: '@payloadcms/richtext-lexical',
         | 
| 71 | 
            +
                    version: '^0.x'
         | 
| 60 72 | 
             
                },
         | 
| 73 | 
            +
                slate: {
         | 
| 74 | 
            +
                    configReplacement: '  editor: slateEditor({}),',
         | 
| 75 | 
            +
                    importReplacement: "import { slateEditor } from '@payloadcms/richtext-slate'",
         | 
| 76 | 
            +
                    packageName: '@payloadcms/richtext-slate',
         | 
| 77 | 
            +
                    version: '^1.0.0'
         | 
| 78 | 
            +
                }
         | 
| 61 79 | 
             
            };
         | 
| 80 | 
            +
             | 
| 81 | 
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGFja2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCdW5kbGVyVHlwZSwgRGJUeXBlLCBFZGl0b3JUeXBlIH0gZnJvbSAnLi4vdHlwZXMnXG5cbnR5cGUgRGJBZGFwdGVyUmVwbGFjZW1lbnQgPSB7XG4gIGNvbmZpZ1JlcGxhY2VtZW50OiBzdHJpbmdbXVxuICBpbXBvcnRSZXBsYWNlbWVudDogc3RyaW5nXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmdcbiAgdmVyc2lvbjogc3RyaW5nXG59XG5cbnR5cGUgQnVuZGxlclJlcGxhY2VtZW50ID0ge1xuICBjb25maWdSZXBsYWNlbWVudDogc3RyaW5nXG4gIGltcG9ydFJlcGxhY2VtZW50OiBzdHJpbmdcbiAgcGFja2FnZU5hbWU6IHN0cmluZ1xuICB2ZXJzaW9uOiBzdHJpbmdcbn1cblxudHlwZSBFZGl0b3JSZXBsYWNlbWVudCA9IHtcbiAgY29uZmlnUmVwbGFjZW1lbnQ6IHN0cmluZ1xuICBpbXBvcnRSZXBsYWNlbWVudDogc3RyaW5nXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmdcbiAgdmVyc2lvbjogc3RyaW5nXG59XG5cbmNvbnN0IG1vbmdvZGJSZXBsYWNlbWVudDogRGJBZGFwdGVyUmVwbGFjZW1lbnQgPSB7XG4gIGltcG9ydFJlcGxhY2VtZW50OiBcImltcG9ydCB7IG1vbmdvb3NlQWRhcHRlciB9IGZyb20gJ0BwYXlsb2FkY21zL2RiLW1vbmdvZGInXCIsXG4gIHBhY2thZ2VOYW1lOiAnQHBheWxvYWRjbXMvZGItbW9uZ29kYicsXG4gIC8vIFJlcGxhY2VtZW50IGJldHdlZW4gYC8vIGRhdGFiYXNlLWFkYXB0ZXItY29uZmlnLXN0YXJ0YCBhbmQgYC8vIGRhdGFiYXNlLWFkYXB0ZXItY29uZmlnLWVuZGBcbiAgY29uZmlnUmVwbGFjZW1lbnQ6IFsnICBkYjogbW9uZ29vc2VBZGFwdGVyKHsnLCAnICAgIHVybDogcHJvY2Vzcy5lbnYuREFUQUJBU0VfVVJJLCcsICcgIH0pLCddLFxuICB2ZXJzaW9uOiAnXjEuMC4wJyxcbn1cblxuY29uc3QgcG9zdGdyZXNSZXBsYWNlbWVudDogRGJBZGFwdGVyUmVwbGFjZW1lbnQgPSB7XG4gIGNvbmZpZ1JlcGxhY2VtZW50OiBbXG4gICAgJyAgZGI6IHBvc3RncmVzQWRhcHRlcih7JyxcbiAgICAnICAgIHBvb2w6IHsnLFxuICAgICcgICAgICBjb25uZWN0aW9uU3RyaW5nOiBwcm9jZXNzLmVudi5EQVRBQkFTRV9VUkksJyxcbiAgICAnICAgIH0sJyxcbiAgICAnICB9KSwnLFxuICBdLFxuICBpbXBvcnRSZXBsYWNlbWVudDogXCJpbXBvcnQgeyBwb3N0Z3Jlc0FkYXB0ZXIgfSBmcm9tICdAcGF5bG9hZGNtcy9kYi1wb3N0Z3JlcydcIixcbiAgcGFja2FnZU5hbWU6ICdAcGF5bG9hZGNtcy9kYi1wb3N0Z3JlcycsXG4gIHZlcnNpb246ICdeMC54JywgLy8gdXAgdG8sIG5vdCBpbmNsdWRpbmcgMS4wLjBcbn1cblxuZXhwb3J0IGNvbnN0IGRiUGFja2FnZXM6IFJlY29yZDxEYlR5cGUsIERiQWRhcHRlclJlcGxhY2VtZW50PiA9IHtcbiAgbW9uZ29kYjogbW9uZ29kYlJlcGxhY2VtZW50LFxuICBwb3N0Z3JlczogcG9zdGdyZXNSZXBsYWNlbWVudCxcbn1cblxuY29uc3Qgd2VicGFja1JlcGxhY2VtZW50OiBCdW5kbGVyUmVwbGFjZW1lbnQgPSB7XG4gIGltcG9ydFJlcGxhY2VtZW50OiBcImltcG9ydCB7IHdlYnBhY2tCdW5kbGVyIH0gZnJvbSAnQHBheWxvYWRjbXMvYnVuZGxlci13ZWJwYWNrJ1wiLFxuICBwYWNrYWdlTmFtZTogJ0BwYXlsb2FkY21zL2J1bmRsZXItd2VicGFjaycsXG4gIC8vIFJlcGxhY2VtZW50IG9mIGxpbmUgY29udGFpbmluZyBgLy8gYnVuZGxlci1jb25maWdgXG4gIGNvbmZpZ1JlcGxhY2VtZW50OiAnICAgIGJ1bmRsZXI6IHdlYnBhY2tCdW5kbGVyKCksJyxcbiAgdmVyc2lvbjogJ14xLjAuMCcsXG59XG5cbmNvbnN0IHZpdGVSZXBsYWNlbWVudDogQnVuZGxlclJlcGxhY2VtZW50ID0ge1xuICBjb25maWdSZXBsYWNlbWVudDogJyAgYnVuZGxlcjogdml0ZUJ1bmRsZXIoKSwnLFxuICBpbXBvcnRSZXBsYWNlbWVudDogXCJpbXBvcnQgeyB2aXRlQnVuZGxlciB9IGZyb20gJ0BwYXlsb2FkY21zL2J1bmRsZXItdml0ZSdcIixcbiAgcGFja2FnZU5hbWU6ICdAcGF5bG9hZGNtcy9idW5kbGVyLXZpdGUnLFxuICB2ZXJzaW9uOiAnXjAueCcsIC8vIHVwIHRvLCBub3QgaW5jbHVkaW5nIDEuMC4wXG59XG5cbmV4cG9ydCBjb25zdCBidW5kbGVyUGFja2FnZXM6IFJlY29yZDxCdW5kbGVyVHlwZSwgQnVuZGxlclJlcGxhY2VtZW50PiA9IHtcbiAgdml0ZTogdml0ZVJlcGxhY2VtZW50LFxuICB3ZWJwYWNrOiB3ZWJwYWNrUmVwbGFjZW1lbnQsXG59XG5cbmV4cG9ydCBjb25zdCBlZGl0b3JQYWNrYWdlczogUmVjb3JkPEVkaXRvclR5cGUsIEVkaXRvclJlcGxhY2VtZW50PiA9IHtcbiAgbGV4aWNhbDoge1xuICAgIGNvbmZpZ1JlcGxhY2VtZW50OiAnICBlZGl0b3I6IGxleGljYWxFZGl0b3Ioe30pLCcsXG4gICAgaW1wb3J0UmVwbGFjZW1lbnQ6IFwiaW1wb3J0IHsgbGV4aWNhbEVkaXRvciB9IGZyb20gJ0BwYXlsb2FkY21zL3JpY2h0ZXh0LWxleGljYWwnXCIsXG4gICAgcGFja2FnZU5hbWU6ICdAcGF5bG9hZGNtcy9yaWNodGV4dC1sZXhpY2FsJyxcbiAgICB2ZXJzaW9uOiAnXjAueCcsIC8vIHVwIHRvLCBub3QgaW5jbHVkaW5nIDEuMC4wXG4gIH0sXG4gIHNsYXRlOiB7XG4gICAgY29uZmlnUmVwbGFjZW1lbnQ6ICcgIGVkaXRvcjogc2xhdGVFZGl0b3Ioe30pLCcsXG4gICAgaW1wb3J0UmVwbGFjZW1lbnQ6IFwiaW1wb3J0IHsgc2xhdGVFZGl0b3IgfSBmcm9tICdAcGF5bG9hZGNtcy9yaWNodGV4dC1zbGF0ZSdcIixcbiAgICBwYWNrYWdlTmFtZTogJ0BwYXlsb2FkY21zL3JpY2h0ZXh0LXNsYXRlJyxcbiAgICB2ZXJzaW9uOiAnXjEuMC4wJyxcbiAgfSxcbn1cbiJdLCJuYW1lcyI6WyJkYlBhY2thZ2VzIiwiYnVuZGxlclBhY2thZ2VzIiwiZWRpdG9yUGFja2FnZXMiLCJtb25nb2RiUmVwbGFjZW1lbnQiLCJpbXBvcnRSZXBsYWNlbWVudCIsInBhY2thZ2VOYW1lIiwiY29uZmlnUmVwbGFjZW1lbnQiLCJ2ZXJzaW9uIiwicG9zdGdyZXNSZXBsYWNlbWVudCIsIm1vbmdvZGIiLCJwb3N0Z3JlcyIsIndlYnBhY2tSZXBsYWNlbWVudCIsInZpdGVSZXBsYWNlbWVudCIsInZpdGUiLCJ3ZWJwYWNrIiwibGV4aWNhbCIsInNsYXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQTRDYUEsVUFBVTtlQUFWQTs7SUFvQkFDLGVBQWU7ZUFBZkE7O0lBS0FDLGNBQWM7ZUFBZEE7OztBQTlDYixNQUFNQyxxQkFBMkM7SUFDL0NDLG1CQUFtQjtJQUNuQkMsYUFBYTtJQUNiLDhGQUE4RjtJQUM5RkMsbUJBQW1CO1FBQUM7UUFBMkI7UUFBc0M7S0FBUTtJQUM3RkMsU0FBUztBQUNYO0FBRUEsTUFBTUMsc0JBQTRDO0lBQ2hERixtQkFBbUI7UUFDakI7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNEO0lBQ0RGLG1CQUFtQjtJQUNuQkMsYUFBYTtJQUNiRSxTQUFTO0FBQ1g7QUFFTyxNQUFNUCxhQUFtRDtJQUM5RFMsU0FBU047SUFDVE8sVUFBVUY7QUFDWjtBQUVBLE1BQU1HLHFCQUF5QztJQUM3Q1AsbUJBQW1CO0lBQ25CQyxhQUFhO0lBQ2IscURBQXFEO0lBQ3JEQyxtQkFBbUI7SUFDbkJDLFNBQVM7QUFDWDtBQUVBLE1BQU1LLGtCQUFzQztJQUMxQ04sbUJBQW1CO0lBQ25CRixtQkFBbUI7SUFDbkJDLGFBQWE7SUFDYkUsU0FBUztBQUNYO0FBRU8sTUFBTU4sa0JBQTJEO0lBQ3RFWSxNQUFNRDtJQUNORSxTQUFTSDtBQUNYO0FBRU8sTUFBTVQsaUJBQXdEO0lBQ25FYSxTQUFTO1FBQ1BULG1CQUFtQjtRQUNuQkYsbUJBQW1CO1FBQ25CQyxhQUFhO1FBQ2JFLFNBQVM7SUFDWDtJQUNBUyxPQUFPO1FBQ0xWLG1CQUFtQjtRQUNuQkYsbUJBQW1CO1FBQ25CQyxhQUFhO1FBQ2JFLFNBQVM7SUFDWDtBQUNGIn0=
         |