UNPKG

6.02 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, match, 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 (match = 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 Module, path;
159 if (Module = ((function() {
160 try {
161 return does.getSync({
162 query: {
163 tag: name
164 }
165 });
166 } catch (_error) {}
167 })())) {
168 return Module;
169 }
170 if (path = ((function() {
171 try {
172 return local.modules[name].require;
173 } catch (_error) {}
174 })())) {
175 console.log({
176 path: path
177 });
178 if (path[0] === '.') {
179 path = normalize(local.dir + sep + path);
180 }
181 return require(path);
182 }
183 if (!local.upperCase(name)) {
184 return require(name);
185 }
186 if (path = local.find(name)) {
187 return require(path);
188 }
189 console.log('ipso: ' + ("warning: missing module " + name).yellow);
190 return {
191 $ipso: {
192 PENDING: true,
193 module: name
194 },
195 $save: function(template) {
196 if (template == null) {
197 template = 'default';
198 }
199 return save(template, name, does);
200 }
201 };
202 }
203 };
204 return api = {
205 loadModules: local.loadModules,
206 loadModulesSync: local.loadModulesSync
207 };
208};