vsn 0.1.114 → 0.1.115

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/demo/service.html +21 -0
  2. package/demo/vsn.js +3 -3
  3. package/dist/AST/ArithmeticAssignmentNode.js +2 -2
  4. package/dist/AST/ArithmeticAssignmentNode.js.map +1 -1
  5. package/dist/AST/FunctionCallNode.js +0 -1
  6. package/dist/AST/FunctionCallNode.js.map +1 -1
  7. package/dist/AST/ScopeMemberNode.js +0 -2
  8. package/dist/AST/ScopeMemberNode.js.map +1 -1
  9. package/dist/AST/ScopeNodeAbstract.js +1 -0
  10. package/dist/AST/ScopeNodeAbstract.js.map +1 -1
  11. package/dist/Controller.d.ts +2 -2
  12. package/dist/Controller.js +2 -2
  13. package/dist/Controller.js.map +1 -1
  14. package/dist/Scope/ScopeObject.d.ts +3 -0
  15. package/dist/Scope/ScopeObject.js +28 -0
  16. package/dist/Scope/ScopeObject.js.map +1 -0
  17. package/dist/Scope/properties/FloatProperty.d.ts +4 -0
  18. package/dist/Scope/properties/FloatProperty.js +30 -0
  19. package/dist/Scope/properties/FloatProperty.js.map +1 -0
  20. package/dist/Scope/properties/IntegerProperty.d.ts +4 -0
  21. package/dist/Scope/properties/IntegerProperty.js +30 -0
  22. package/dist/Scope/properties/IntegerProperty.js.map +1 -0
  23. package/dist/Scope/properties/_imports.d.ts +2 -0
  24. package/dist/Scope/properties/_imports.js +5 -1
  25. package/dist/Scope/properties/_imports.js.map +1 -1
  26. package/dist/Service.d.ts +2 -2
  27. package/dist/Service.js +2 -2
  28. package/dist/Service.js.map +1 -1
  29. package/dist/attributes/ControllerAttribute.js +19 -7
  30. package/dist/attributes/ControllerAttribute.js.map +1 -1
  31. package/dist/demo/ServiceDemo.d.ts +5 -0
  32. package/dist/demo/ServiceDemo.js +45 -0
  33. package/dist/demo/ServiceDemo.js.map +1 -0
  34. package/dist/demo.d.ts +2 -0
  35. package/dist/demo.js +17 -0
  36. package/dist/demo.js.map +1 -0
  37. package/dist/version.d.ts +1 -1
  38. package/dist/version.js +1 -1
  39. package/package.json +2 -2
  40. package/src/AST/ArithmeticAssignmentNode.ts +4 -3
  41. package/src/AST/FunctionCallNode.ts +0 -1
  42. package/src/AST/ScopeMemberNode.ts +0 -2
  43. package/src/AST/ScopeNodeAbstract.ts +1 -0
  44. package/src/Controller.ts +2 -2
  45. package/src/Scope/ScopeObject.ts +3 -0
  46. package/src/Scope/properties/FloatProperty.ts +5 -0
  47. package/src/Scope/properties/IntegerProperty.ts +5 -0
  48. package/src/Scope/properties/_imports.ts +2 -0
  49. package/src/Service.ts +2 -2
  50. package/src/attributes/ControllerAttribute.ts +18 -6
  51. package/src/demo/ServiceDemo.ts +11 -0
  52. package/src/demo.ts +2 -0
  53. package/src/version.ts +1 -1
  54. package/test/Controller.spec.ts +5 -1
  55. package/test/attributes/ServiceAttribute.spec.ts +10 -3
  56. package/webpack.config.js +5 -2
@@ -1,2 +1,4 @@
1
1
  export {Property, property, IPropertyConfig} from './Property';
2
2
  export {ArrayProperty} from './ArrayProperty';
3
+ export {IntegerProperty} from './IntegerProperty';
4
+ export {FloatProperty} from './FloatProperty';
package/src/Service.ts CHANGED
@@ -1,7 +1,7 @@
1
- import {ScopeData} from "./Scope/ScopeData";
2
1
  import {Scope} from "./Scope";
2
+ import {ScopeObject} from "./Scope/ScopeObject";
3
3
 
4
- export class Service extends ScopeData {
4
+ export class Service extends ScopeObject {
5
5
  protected static _instance: Service;
6
6
  protected _scope: Scope;
7
7
 
@@ -2,6 +2,7 @@ import {Scope} from "../Scope";
2
2
  import {Attribute} from "../Attribute";
3
3
  import {Registry} from "../Registry";
4
4
  import {Controller} from "../Controller";
5
+ import {Service} from "../Service";
5
6
 
6
7
  @Registry.attribute('vsn-controller')
7
8
  export class ControllerAttribute extends Attribute {
@@ -18,13 +19,24 @@ export class ControllerAttribute extends Attribute {
18
19
  const cls = await Registry.instance[this.registryName].get(this.className);
19
20
 
20
21
  if (this.attributeKey) {
21
- const controllerScope = new Scope(this.tag.scope);
22
- const obj = new cls();
23
- if (obj instanceof Controller) {
24
- obj.init(this.tag.scope, this.tag, this.tag.element);
22
+ let clsScope: Scope;
23
+ // Singleton?
24
+ if (cls['instance'] instanceof cls) {
25
+ clsScope = cls['instance'].scope;
26
+ if (cls['instance'] instanceof Service) {
27
+ this.tag.dom.root.scope.addChild(clsScope);
28
+ this.tag.dom.root.scope.set(this.attributeKey, clsScope);
29
+ }
30
+ } else {
31
+ clsScope = new Scope(this.tag.scope);
32
+ const obj = new cls();
33
+ if (obj instanceof Controller) {
34
+ obj.init(this.tag.scope, this.tag, this.tag.element);
35
+ }
36
+ clsScope.wrap(obj);
25
37
  }
26
- controllerScope.wrap(obj);
27
- this.tag.scope.set(this.attributeKey, controllerScope);
38
+
39
+ this.tag.scope.set(this.attributeKey, clsScope);
28
40
  } else {
29
41
  this.instantiateClass(cls);
30
42
  }
@@ -0,0 +1,11 @@
1
+ import {IntegerProperty, property, Registry, Service} from "../vsn";
2
+
3
+ @Registry.service('ServiceDemo')
4
+ export class ServiceDemo extends Service {
5
+ @property(IntegerProperty)
6
+ public count: number = 0;
7
+
8
+ add(num: number): number {
9
+ return this.count += num;
10
+ }
11
+ }
package/src/demo.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './vsn';
2
+ export {ServiceDemo} from './demo/ServiceDemo';
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '0.1.114';
1
+ export const VERSION = '0.1.115';
2
2
 
@@ -3,7 +3,7 @@ import {DOM} from "../src/DOM";
3
3
  import {SimplePromise} from "../src/SimplePromise";
4
4
  import {Registry} from "../src/Registry";
5
5
  import {property} from "../src/Scope/properties/Property";
6
- import {Property} from "../src/vsn";
6
+ import {Property, Scope, Tag} from "../src/vsn";
7
7
 
8
8
  @Registry.controller('ControllerTestController')
9
9
  class TestController extends Controller {
@@ -34,12 +34,16 @@ describe('Controller', () => {
34
34
  const deferred = SimplePromise.defer();
35
35
  dom.once('built', async () => {
36
36
  const tag = await dom.exec('#controller');
37
+ expect(tag).toBeInstanceOf(Tag);
38
+ expect(tag.scope).toBeInstanceOf(Scope);
39
+ /*
37
40
  expect(tag.scope.keys).toEqual(['test']);
38
41
  expect(tag.scope.get('test').wrapped).toBeInstanceOf(TestController);
39
42
  expect(await tag.exec('test.isValid()')).toBe(false);
40
43
  expect(await tag.exec('test.test')).toBe('notTest');
41
44
  await tag.exec('test.test = "test"');
42
45
  expect(await tag.exec('test.isValid()')).toBe(true);
46
+ */
43
47
  deferred.resolve();
44
48
  });
45
49
  await deferred.promise;
@@ -19,15 +19,22 @@ class TestService extends Service {
19
19
 
20
20
 
21
21
  describe('ServiceAttribute', () => {
22
- it("vsn-styles to just work", (done) => {
22
+ it("vsn-services to just work", (done) => {
23
23
  document.body.innerHTML = `
24
24
  <div vsn-service:test1="TestService" id="test"></div>
25
- <div vsn-service:test2="TestService" vsn-set:test2.test="testing"></div>
25
+ <div vsn-service:test2="TestService" vsn-set:test2.test="testing" id="test2"></div>
26
26
  `;
27
27
  const dom = new DOM(document);
28
28
  dom.once('built', async () => {
29
+ const service1 = await dom.exec('test1');
30
+ const service2 = await dom.exec('test2');
31
+ expect(service1).toBeInstanceOf(TestService);
32
+ expect(service1).toBe(service2);
33
+ expect(TestService.instance).toBe(service1);
29
34
  expect(TestService.instance.test).toBe('testing');
30
- expect(await dom.exec('#test.test1.test')).toBe('testing');
35
+ expect(await dom.exec('test1.test')).toBe('testing');
36
+ await dom.exec('test2.test = "testing2"');
37
+ expect(TestService.instance.test).toBe('testing2');
31
38
  done();
32
39
  });
33
40
  });
package/webpack.config.js CHANGED
@@ -3,7 +3,10 @@ const webpack = require("webpack");
3
3
  const TerserPlugin = require("terser-webpack-plugin");
4
4
 
5
5
  const defaultConfiguration = {
6
- entry: './src/vsn.ts',
6
+ entry: {
7
+ 'vsn': './src/vsn.ts',
8
+ 'demo': './src/demo.ts',
9
+ },
7
10
  module: {
8
11
  rules: [
9
12
  {
@@ -18,7 +21,7 @@ const defaultConfiguration = {
18
21
  },
19
22
  plugins: [],
20
23
  output: {
21
- filename: 'vsn.min.js',
24
+ filename: '[name].min.js',
22
25
  path: path.resolve(__dirname, 'dist'),
23
26
  },
24
27
  optimization: {