diff options
Diffstat (limited to 'remote/test/puppeteer/packages/ng-schematics/tools/sandbox.js')
-rw-r--r-- | remote/test/puppeteer/packages/ng-schematics/tools/sandbox.js | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/remote/test/puppeteer/packages/ng-schematics/tools/sandbox.js b/remote/test/puppeteer/packages/ng-schematics/tools/sandbox.js new file mode 100644 index 0000000000..44f131bfac --- /dev/null +++ b/remote/test/puppeteer/packages/ng-schematics/tools/sandbox.js @@ -0,0 +1,104 @@ +/** + * Copyright 2023 Google Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const {spawn} = require('child_process'); +const {readFile, writeFile} = require('fs/promises'); +const {join} = require('path'); +const {cwd} = require('process'); + +const isInit = process.argv.indexOf('--init') !== -1; +const isBuild = process.argv.indexOf('--build') !== -1; +const commands = { + build: ['npm run build'], + createSandbox: ['npx ng new sandbox --defaults'], + runSchematics: [ + { + command: 'npm run schematics', + options: { + cwd: join(cwd(), '/sandbox/'), + }, + }, + ], +}; +const scripts = { + // Deletes all files created by Puppeteer Ng-Schematics to avoid errors + 'delete:file': + 'rm -f .puppeteerrc.cjs && rm -f tsconfig.e2e.json && rm -R -f e2e/', + // Runs the Puppeteer Ng-Schematics against the sandbox + schematics: 'npm run delete:file && schematics ../:ng-add --dry-run=false', +}; +/** + * + * @param {string | object} toExecute + * @returns {Promise<boolean>} + */ +async function executeCommand(commands) { + for (const toExecute of commands) { + let executable; + let args; + let options = {}; + if (typeof toExecute === 'string') { + [executable, ...args] = toExecute.split(' '); + } else { + [executable, ...args] = toExecute.command.split(' '); + options = toExecute.options ?? {}; + } + + await new Promise((resolve, reject) => { + const createProcess = spawn(executable, args, { + stdio: 'inherit', + shell: true, + ...options, + }); + + createProcess.on('error', message => { + console.error(message); + reject(message); + }); + + createProcess.on('exit', code => { + if (code === 0) { + resolve(true); + } else { + reject(); + } + }); + }); + } +} + +async function main() { + if (isInit) { + await executeCommand(commands.createSandbox); + + const packageJsonFile = join(cwd(), '/sandbox/package.json'); + const packageJson = JSON.parse(await readFile(packageJsonFile)); + packageJson['scripts'] = { + ...packageJson['scripts'], + ...scripts, + }; + await writeFile(packageJsonFile, JSON.stringify(packageJson, null, 2)); + } else { + if (isBuild) { + await executeCommand(commands.build); + } + await executeCommand(commands.runSchematics); + } +} + +main().catch(() => { + console.log('\n'); +}); |