Skip to content

Commit

Permalink
feat(schematics): add customization script for enabling and disabling…
Browse files Browse the repository at this point in the history
… service worker
  • Loading branch information
dhhyi committed Apr 9, 2020
1 parent 60e8792 commit 30bec4d
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 4 deletions.
6 changes: 2 additions & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,10 @@ jobs:
uses: bahmutov/npm-install@v1

- name: Disable ServiceWorker
run: |
sed -i "s/serviceWorker:.*/serviceWorker:false,/" src/environments/environment.prod.ts
run: node schematics/customization/service-worker false

- name: Build SSR
run: |
npm run build
run: npm run build

- name: Upload Build Output
uses: actions/upload-artifact@v1
Expand Down
4 changes: 4 additions & 0 deletions e2e/test-schematics.sh
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@ else
sed -i -e 's/^};$/mockServerAPI: true };/' src/environments/environment.prod.ts
fi

node schematics/customization/service-worker false
grep '"serviceWorker": false' angular.json
grep 'serviceWorker: false' src/environments/environment.prod.ts

git add -A
npx lint-staged
npx tsc --project tsconfig.spec.json
Expand Down
61 changes: 61 additions & 0 deletions schematics/customization/service-worker/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
const fs = require('fs');
const { parse, stringify } = require('comment-json');
const { execSync } = require('child_process');
const { Project, ts } = require('ts-morph');

if (process.argv.length < 3) {
console.warn('required argument missing, provide true or false');
process.exit(1);
}

const enable = process.argv[2].toLowerCase() === 'true';
console.log('setting serviceWorker to', enable);

// replace in angular.json
const angularJson = parse(fs.readFileSync('./angular.json', { encoding: 'UTF-8' }));
const project = Object.keys(angularJson.projects)[0];
const build = angularJson.projects[project].architect.build;

if (build.options.serviceWorker !== undefined) {
build.options.serviceWorker = enable;
}

Object.keys(build.configurations)
.filter(key => key !== 'local')
.forEach(key => {
const configuration = build.configurations[key];
if (configuration.serviceWorker !== undefined) {
configuration.serviceWorker = enable;
}
});

fs.writeFileSync('./angular.json', stringify(angularJson, null, 2));
execSync('npx prettier --write angular.json');

// replace in environments
const tsMorphProject = new Project();
tsMorphProject.addSourceFilesAtPaths('src/environments/environment*.ts');

tsMorphProject
.getSourceFiles()
.filter(
file =>
!file.getBaseName().endsWith('.model.ts') &&
!file.getBaseName().endsWith('.local.ts') &&
file.getBaseName() !== 'environment.ts'
)
.forEach(file => {
file
.forEachDescendantAsArray()
.filter(stm => stm.getKind() == ts.SyntaxKind.VariableDeclaration && stm.getName() === 'environment')
.map(stm => stm.getInitializer())
.forEach(objectLiteralExpression => {
const property = objectLiteralExpression.getProperty('serviceWorker');
if (property) {
property.setInitializer(`${enable}`);
}
});
});

tsMorphProject.saveSync();
execSync('npx prettier --write src/environments/*.*');

0 comments on commit 30bec4d

Please sign in to comment.