123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- /*
- * grunt-init-amber
- * https://amber-lang.net/
- *
- * Copyright (c) 2013 Manfred Kroehnert, contributors
- * Licensed under the MIT license.
- */
- 'use strict';
- // Basic template description.
- exports.description = 'Create a web application based on Amber Smalltalk.';
- // Template-specific notes to be displayed before question prompts.
- exports.notes = ' _Project title_ should be a human-readable title.';
- // Template-specific notes to be displayed after question prompts.
- exports.after = 'You need to have these installed globally via npm:' +
- ' _amber-cli_; _grunt-cli_; _bower_.' +
- ' Now, install project dependencies with _bower install_,' +
- ' tool dependencies with _npm install_ and optionally, recompile with _grunt_.' +
- ' If you are running _amber init_, these three tasks are going to be performed for you now.' +
- ' Afterwards, start the development server with _amber serve_.' +
- ' Your application is then accessible via _http://localhost:4000/_';
- // Any existing file or directory matching this wildcard will cause a warning.
- exports.warnOn = '*';
- // The actual init template.
- exports.template = function (grunt, init, done) {
- var remembered = {};
- function rememberViaValidator(name) {
- var oldValidator = init.prompts[name].validator || function (line) {
- return true;
- };
- var newValidator;
- switch (oldValidator.length) { //apply would not work, .length is used to call it differently
- case 1:
- newValidator = function (line) {
- remembered[name] = line;
- return oldValidator.call(this, line);
- };
- break;
- case 2:
- newValidator = function (line, next) {
- remembered[name] = line;
- return oldValidator.call(this, line, next);
- };
- break;
- default:
- throw new Error("Panic: " + oldValidator.length + "-argument validator for " + name + ".");
- }
- init.prompts[name].validator = newValidator;
- }
- function capitalize(string) {
- return string[0].toUpperCase() + string.slice(1).toLowerCase();
- }
- init.prompts.name.message = 'Main class and package of Amber application.\nProject name is derived by lowercasing this.';
- init.prompts.name.validator = function (line) {
- return /^[A-Z][A-Za-z0-9]*$/.test(line)
- };
- init.prompts.name.warning = 'Must be a valid class name: only alphanumeric and starting with an uppercase letter!';
- rememberViaValidator('name');
- rememberViaValidator('title');
- init.process({type: 'amber'}, [
- // Prompt for these values.
- init.prompt('title', 'Application or Library Title'),
- init.prompt('name', function (value, data, done) {
- var words = remembered.title.split(/\W/);
- words = words.filter(function (x) {
- return x && x !== "none";
- }).map(capitalize);
- value = words.length ? words.join('') : 'MysteriousApp';
- done(null, value);
- }),
- init.prompt('description', 'The Application or The Library doing The Thing.'),
- init.prompt('author_name'),
- init.prompt('author_email'),
- {
- name: 'namespace',
- message: 'Namespace of the new Amber package.',
- altDefault: function (value, data, done) {
- value = 'amber-' + remembered.name.toLowerCase();
- done(null, value);
- },
- validator: /^[a-z][a-z0-9/\-]*$/,
- warning: 'Only lowercase letters, numbers, and - are allowed in namespaces!'
- },
- init.prompt('version'),
- init.prompt('repository'),
- init.prompt('homepage'),
- init.prompt('bugs'),
- init.prompt('author_url'),
- init.prompt('licenses', 'MIT')
- ], function (err, props) {
- // Files to copy (and process).
- var files = init.filesToCopy(props);
- // Add properly-named license files.
- init.addLicenseFiles(files, props.licenses);
- // Actually copy (and process) files.
- init.copyAndProcess(files, props, {noProcess: 'libs/**'});
- // Clean up non-npm props.
- delete props.namespace;
- props.name = props.name.toLowerCase();
- // A few additional properties.
- props.keywords = ['Amber', 'Smalltalk'];
- props.devDependencies = {
- "amber-dev": "^0.10.1",
- "grunt": "1.0.1",
- "grunt-contrib-clean": "^1.1.0",
- "grunt-contrib-requirejs": "^1.0.0",
- "grunt-exec": "^2.0.0",
- "requirejs": "^2.1.15"
- };
- props.node_version = '>=4.0.0';
- props.scripts = {
- "test": "grunt test"
- };
- // Generate package.json file, used by npm and grunt.
- init.writePackageJSON('package.json', props);
- // generate bower.json file
- grunt.file.write('bower.json', JSON.stringify({
- "name": props.name,
- "description": props.description,
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "/*.js",
- "/*.html",
- "test",
- "tests"
- ],
- "authors": [
- {
- "name": props.author_name,
- "email": props.author_email
- }
- ],
- "homepage": props.homepage,
- "main": props.main,
- "keywords": props.keywords,
- "license": props.licenses,
- "private": false,
- "dependencies": {
- "amber": "^0.21.0",
- "amber-compat-es2015": "^0.1.5",
- "amber-contrib-jquery": "^0.4.1",
- "amber-contrib-web": "^0.5.1",
- "domite": "^0.7.1",
- "silk": "^0.3.1"
- },
- "devDependencies": {
- "amber-contrib-legacy": "^0.6.0",
- "amber-ide-starter-dialog": "^0.1.0",
- "helios": "^0.9.0"
- }
- }, null, 2));
- // All done!
- done();
- });
- };
|