summaryrefslogtreecommitdiffstats
path: root/remote/test/puppeteer/packages/ng-schematics/tools
diff options
context:
space:
mode:
Diffstat (limited to 'remote/test/puppeteer/packages/ng-schematics/tools')
-rw-r--r--remote/test/puppeteer/packages/ng-schematics/tools/copySchemaFiles.js72
-rw-r--r--remote/test/puppeteer/packages/ng-schematics/tools/sandbox.js104
2 files changed, 176 insertions, 0 deletions
diff --git a/remote/test/puppeteer/packages/ng-schematics/tools/copySchemaFiles.js b/remote/test/puppeteer/packages/ng-schematics/tools/copySchemaFiles.js
new file mode 100644
index 0000000000..bca61b8101
--- /dev/null
+++ b/remote/test/puppeteer/packages/ng-schematics/tools/copySchemaFiles.js
@@ -0,0 +1,72 @@
+/**
+ * Copyright 2022 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 fs = require('fs/promises');
+const {join} = require('path');
+const path = require('path');
+
+/**
+ *
+ * @param {String} directory
+ * @param {String[]} files
+ */
+async function findSchemaFiles(directory, files = []) {
+ const items = await fs.readdir(directory);
+ const promises = [];
+ // Match any listing that has no *.* format
+ // Ignore files folder
+ const regEx = /^.*\.[^\s]*$/;
+
+ items.forEach(item => {
+ if (!item.match(regEx)) {
+ promises.push(findSchemaFiles(`${directory}/${item}`, files));
+ } else if (item.endsWith('.json') || directory.includes('files')) {
+ files.push(`${directory}/${item}`);
+ }
+ });
+
+ await Promise.all(promises);
+
+ return files;
+}
+
+async function copySchemaFiles() {
+ const srcDir = join(__dirname, '..', 'src');
+ const outputDir = join(__dirname, '..', 'lib');
+ const files = await findSchemaFiles(srcDir);
+
+ const moves = files.map(file => {
+ const to = file.replace(srcDir, outputDir);
+
+ return {from: file, to};
+ });
+
+ // Because fs.cp is Experimental (recursive support)
+ // We need to create directories first and copy the files
+ await Promise.all(
+ moves.map(({to}) => {
+ const dir = path.dirname(to);
+ return fs.mkdir(dir, {recursive: true});
+ })
+ );
+ await Promise.all(
+ moves.map(({from, to}) => {
+ return fs.copyFile(from, to);
+ })
+ );
+}
+
+copySchemaFiles();
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');
+});