UNPKG

5.85 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.6.3
2var deferred, dirname, lastInstance, lstatSync, normalize, parallel, pipeline, readdirSync, save, sep, underscore, _ref, _ref1, _ref2;
3
4_ref = require('also'), deferred = _ref.deferred, parallel = _ref.parallel, pipeline = _ref.pipeline;
5
6_ref1 = require('path'), normalize = _ref1.normalize, sep = _ref1.sep, dirname = _ref1.dirname;
7
8underscore = require('inflection').underscore;
9
10_ref2 = require('fs'), readdirSync = _ref2.readdirSync, lstatSync = _ref2.lstatSync;
11
12save = require('./saver').save;
13
14require('colors');
15
16lastInstance = void 0;
17
18module.exports._test = function() {
19 return lastInstance;
20};
21
22module.exports.create = function(config) {
23 var api, local;
24 lastInstance = local = {
25 loadModules: function(arrayOfNames, doesInstance) {
26 var moduleName, promise;
27 return promise = parallel((function() {
28 var _i, _len, _results;
29 _results = [];
30 for (_i = 0, _len = arrayOfNames.length; _i < _len; _i++) {
31 moduleName = arrayOfNames[_i];
32 _results.push((function(moduleName) {
33 return function() {
34 var nestedPromise;
35 return nestedPromise = pipeline([
36 function() {
37 return local.loadModule(moduleName, doesInstance);
38 }, function(module) {
39 return doesInstance.spectate({
40 name: moduleName,
41 tagged: false
42 }, module);
43 }
44 ]);
45 };
46 })(moduleName));
47 }
48 return _results;
49 })());
50 },
51 loadModulesSync: function(arrayOfNames, doesInstance) {
52 var Module, arrayOfModules, moduleName;
53 return arrayOfModules = (function() {
54 var _i, _len, _results;
55 _results = [];
56 for (_i = 0, _len = arrayOfNames.length; _i < _len; _i++) {
57 moduleName = arrayOfNames[_i];
58 Module = local.loadModuleSync(moduleName, doesInstance);
59 _results.push(doesInstance.spectateSync({
60 name: moduleName,
61 tagged: false
62 }, Module));
63 }
64 return _results;
65 })();
66 },
67 dir: config.dir,
68 modules: config.modules,
69 upperCase: function(string) {
70 var char, error;
71 try {
72 char = string[0].charCodeAt(0);
73 } catch (_error) {
74 error = _error;
75 return false;
76 }
77 if (char > 64 && char < 91) {
78 return true;
79 }
80 return false;
81 },
82 recurse: function(name, path, matches) {
83 var fd, file, stat, _i, _len, _ref3, _results;
84 _ref3 = readdirSync(path);
85 _results = [];
86 for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
87 fd = _ref3[_i];
88 file = path + sep + fd;
89 stat = lstatSync(file);
90 if (stat.isDirectory()) {
91 local.recurse(name, file, matches);
92 continue;
93 }
94 if (fd.match(new RegExp("^" + name + ".[js|coffee]"))) {
95 _results.push(matches.push(dirname(file) + sep + name));
96 } else {
97 _results.push(void 0);
98 }
99 }
100 return _results;
101 },
102 find: function(name) {
103 var matches;
104 matches = [];
105 try {
106 local.recurse(underscore(name), local.dir + sep + 'lib', matches);
107 } catch (_error) {}
108 try {
109 local.recurse(underscore(name), local.dir + sep + 'app', matches);
110 } catch (_error) {}
111 if (matches.length > 1) {
112 throw new Error("ipso: found multiple matches for " + name + ", use ipso.modules");
113 }
114 return matches[0];
115 },
116 loadModule: deferred(function(action, name, does) {
117 return does.get({
118 query: {
119 tag: name
120 }
121 }, function(error, spectated) {
122 var path;
123 if (spectated != null) {
124 return action.resolve(spectated.object);
125 }
126 if (path = ((function() {
127 try {
128 return local.modules[name].require;
129 } catch (_error) {}
130 })())) {
131 if (path[0] === '.') {
132 path = normalize(local.dir + sep + path);
133 }
134 return action.resolve(require(path));
135 }
136 if (!local.upperCase(name)) {
137 return action.resolve(require(name));
138 }
139 if (path = local.find(name)) {
140 return action.resolve(require(path));
141 }
142 console.log('ipso: ' + ("warning: missing module " + name).yellow);
143 return action.resolve({
144 $ipso: {
145 PENDING: true,
146 module: name
147 },
148 $save: function(template) {
149 if (template == null) {
150 template = 'default';
151 }
152 return save(template, name, does);
153 }
154 });
155 });
156 }),
157 loadModuleSync: function(name, does) {
158 var path;
159 try {
160 return does.getSync({
161 query: {
162 tag: name
163 }
164 });
165 } catch (_error) {}
166 if (path = ((function() {
167 try {
168 return local.modules[name].require;
169 } catch (_error) {}
170 })())) {
171 if (path[0] === '.') {
172 path = normalize(local.dir + sep + path);
173 }
174 return require(path);
175 }
176 if (!local.upperCase(name)) {
177 return require(name);
178 }
179 if (path = local.find(name)) {
180 return require(path);
181 }
182 console.log('ipso: ' + ("warning: missing module " + name).yellow);
183 return {
184 $ipso: {
185 PENDING: true,
186 module: name
187 },
188 $save: function(template) {
189 if (template == null) {
190 template = 'default';
191 }
192 return save(template, name, does);
193 }
194 };
195 }
196 };
197 return api = {
198 loadModules: local.loadModules,
199 loadModulesSync: local.loadModulesSync
200 };
201};