UNPKG

@stratusjs/angularjs

Version:

This is the AngularJS package for StratusJS.

253 lines (251 loc) 12.4 kB
System.register(["lodash", "@stratusjs/runtime/stratus", "@stratusjs/core/conversion", "@stratusjs/core/misc", "@stratusjs/core/environment", "../injector", "./model", "./collection", "@stratusjs/core/events/eventManager"], function (exports_1, context_1) { "use strict"; var lodash_1, stratus_1, conversion_1, misc_1, environment_1, injector_1, model_1, collection_1, eventManager_1, injector, $interpolate, serviceVerify, Registry; var __moduleName = context_1 && context_1.id; return { setters: [ function (lodash_1_1) { lodash_1 = lodash_1_1; }, function (stratus_1_1) { stratus_1 = stratus_1_1; }, function (conversion_1_1) { conversion_1 = conversion_1_1; }, function (misc_1_1) { misc_1 = misc_1_1; }, function (environment_1_1) { environment_1 = environment_1_1; }, function (injector_1_1) { injector_1 = injector_1_1; }, function (model_1_1) { model_1 = model_1_1; }, function (collection_1_1) { collection_1 = collection_1_1; }, function (eventManager_1_1) { eventManager_1 = eventManager_1_1; } ], execute: function () { injector = injector_1.getInjector(); serviceVerify = async () => { return new Promise(async (resolve, _reject) => { if ($interpolate) { resolve(true); return; } if (!injector) { injector = injector_1.getInjector(); } if (injector) { $interpolate = injector.get('$interpolate'); } if ($interpolate) { resolve(true); return; } setTimeout(() => { if (environment_1.cookie('env')) { console.log('wait for $interpolate service:', $interpolate); } serviceVerify().then(resolve); }, 250); }); }; Registry = class Registry { constructor() { } fetch($element, $scope) { return new Promise(async (resolve, _reject) => { if (typeof $element === 'string') { $element = { target: $element }; } const inputs = {}; const baseInputs = [ 'id', 'api', 'temp', 'decouple', 'fetch' ]; lodash_1.forEach(lodash_1.union(model_1.ModelOptionKeys, collection_1.CollectionOptionKeys, baseInputs), (option) => lodash_1.set(inputs, option, 'data-' + lodash_1.kebabCase(option))); const options = lodash_1.forEach(inputs, (value, key, list) => { list[key] = $element.attr ? $element.attr(value) : $element[key]; if (!misc_1.isJSON(list[key])) { return; } list[key] = JSON.parse(list[key]); }); options.api = conversion_1.sanitize(options.api); options.temp = conversion_1.sanitize(options.temp); let completed = 0; const verify = () => { if (!lodash_1.isNumber(completed) || completed !== lodash_1.size(options)) { return; } resolve(this.build(options, $scope)); }; if (!$interpolate) { await serviceVerify(); } lodash_1.forEach(options, async (element, key) => { if (!element || typeof element !== 'string' || !$scope || !$scope.$parent) { completed++; verify(); return; } const interpreter = $interpolate(element, false, null, true); const initial = interpreter($scope.$parent); if (typeof initial !== 'undefined') { options[key] = initial; completed++; verify(); return; } if (environment_1.cookie('env')) { console.log(`poll (${key}): start`); } let value; try { value = await misc_1.poll(() => interpreter($scope.$parent), 1500, 250); } catch (err) { if (environment_1.cookie('env') || err.name !== 'Timeout') { console.error(err); } } if (environment_1.cookie('env')) { console.log(`poll (${key}):`, value); } options[key] = value; completed++; verify(); }); }); } build(options, $scope) { let data; if (options.payload || options.convoy) { options.fetch = false; } if (options.target) { options.target = misc_1.ucfirst(options.target); if (options.manifest || options.id) { if (!stratus_1.Stratus.Catalog[options.target]) { stratus_1.Stratus.Catalog[options.target] = {}; } const id = options.id || 'manifest'; if (options.decouple || !stratus_1.Stratus.Catalog[options.target][id]) { const modelOptions = { stagger: true }; lodash_1.forEach(model_1.ModelOptionKeys, (element) => { const optionValue = lodash_1.get(options, element); if (lodash_1.isUndefined(optionValue)) { return; } lodash_1.set(modelOptions, element, optionValue); }); data = new model_1.Model(modelOptions, { id: options.id }); if (!options.decouple) { stratus_1.Stratus.Catalog[options.target][id] = data; } } else if (stratus_1.Stratus.Catalog[options.target][id]) { data = stratus_1.Stratus.Catalog[options.target][id]; } } else { const registry = !options.direct ? 'Catalog' : 'Compendium'; if (!stratus_1.Stratus[registry][options.target]) { stratus_1.Stratus[registry][options.target] = {}; } if (options.decouple || !stratus_1.Stratus[registry][options.target].collection) { const collectionOptions = {}; lodash_1.forEach(collection_1.CollectionOptionKeys, (element) => { const optionValue = lodash_1.get(options, element); if (lodash_1.isUndefined(optionValue)) { return; } lodash_1.set(collectionOptions, element, optionValue); }); data = new collection_1.Collection(collectionOptions); if (!options.decouple) { stratus_1.Stratus[registry][options.target].collection = data; } } else if (stratus_1.Stratus[registry][options.target].collection) { data = stratus_1.Stratus[registry][options.target].collection; } } if (options.api) { data.meta.set('api', misc_1.isJSON(options.api) ? JSON.parse(options.api) : options.api); } if (options.temp && lodash_1.isObject(options.temp) && !data.completed) { lodash_1.forEach(misc_1.flatten(options.temp), (v, k) => { console.log('setting temp:', `api.${k}`, v); data.meta.temp(`api.${k}`, v); }); } if (data instanceof model_1.Model && data.stagger && typeof data.initialize === 'function') { data.initialize(); } } if (typeof data === 'object' && data !== null) { if (typeof $scope !== 'undefined') { $scope.data = data; if (data instanceof model_1.Model) { $scope.model = data; } else if (data instanceof collection_1.Collection) { $scope.collection = data; } if (data instanceof eventManager_1.EventManager && typeof $scope.$applyAsync === 'function') { data.on('change', () => { $scope.$applyAsync(); }); data.on('error', () => { $scope.$applyAsync(); }); if (data.completed) { $scope.$applyAsync(); } } } if (!data.pending && !data.completed && (lodash_1.isUndefined(options.fetch) || options.fetch)) { data.fetch().then(); } } return data; } }; exports_1("Registry", Registry); stratus_1.Stratus.Services.Registry = [ '$provide', ($provide) => { $provide.factory('Registry', [ () => { return new Registry(); } ]); } ]; stratus_1.Stratus.Data.Registry = Registry; } }; }); //# sourceMappingURL=registry.js.map