brighterscript 1.0.0-alpha.18 → 1.0.0-alpha.20

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 (83) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +2 -0
  3. package/bsconfig.schema.json +12 -0
  4. package/dist/BsConfig.d.ts +4 -0
  5. package/dist/DiagnosticMessages.d.ts +21 -1
  6. package/dist/DiagnosticMessages.js +27 -4
  7. package/dist/DiagnosticMessages.js.map +1 -1
  8. package/dist/PluginInterface.d.ts +4 -0
  9. package/dist/PluginInterface.js +6 -0
  10. package/dist/PluginInterface.js.map +1 -1
  11. package/dist/Program.d.ts +1 -2
  12. package/dist/Program.js +6 -2
  13. package/dist/Program.js.map +1 -1
  14. package/dist/ProgramBuilder.d.ts +4 -0
  15. package/dist/ProgramBuilder.js +13 -3
  16. package/dist/ProgramBuilder.js.map +1 -1
  17. package/dist/Scope.d.ts +5 -5
  18. package/dist/astUtils/visitors.d.ts +15 -5
  19. package/dist/astUtils/visitors.js +1 -1
  20. package/dist/astUtils/visitors.js.map +1 -1
  21. package/dist/bscPlugin/BscPlugin.d.ts +3 -1
  22. package/dist/bscPlugin/BscPlugin.js +6 -1
  23. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  24. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +25 -13
  25. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -1
  26. package/dist/bscPlugin/validation/ScopeValidator.d.ts +22 -4
  27. package/dist/bscPlugin/validation/ScopeValidator.js +102 -13
  28. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  29. package/dist/cli.js +9 -3
  30. package/dist/cli.js.map +1 -1
  31. package/dist/files/BrsFile.js +3 -1
  32. package/dist/files/BrsFile.js.map +1 -1
  33. package/dist/files/BrsFile.spec.js +45 -12
  34. package/dist/files/BrsFile.spec.js.map +1 -1
  35. package/dist/files/XmlFile.spec.js +21 -3
  36. package/dist/files/XmlFile.spec.js.map +1 -1
  37. package/dist/files/tests/optionalChaning.spec.d.ts +1 -0
  38. package/dist/files/tests/optionalChaning.spec.js +88 -0
  39. package/dist/files/tests/optionalChaning.spec.js.map +1 -0
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.js +1 -0
  42. package/dist/index.js.map +1 -1
  43. package/dist/interfaces.d.ts +4 -0
  44. package/dist/lexer/Lexer.d.ts +5 -0
  45. package/dist/lexer/Lexer.js +37 -0
  46. package/dist/lexer/Lexer.js.map +1 -1
  47. package/dist/lexer/Lexer.spec.js +62 -4
  48. package/dist/lexer/Lexer.spec.js.map +1 -1
  49. package/dist/lexer/TokenKind.d.ts +4 -0
  50. package/dist/lexer/TokenKind.js +4 -0
  51. package/dist/lexer/TokenKind.js.map +1 -1
  52. package/dist/parser/Expression.d.ts +37 -8
  53. package/dist/parser/Expression.js +26 -28
  54. package/dist/parser/Expression.js.map +1 -1
  55. package/dist/parser/Parser.d.ts +17 -0
  56. package/dist/parser/Parser.js +141 -107
  57. package/dist/parser/Parser.js.map +1 -1
  58. package/dist/parser/Parser.spec.js +83 -0
  59. package/dist/parser/Parser.spec.js.map +1 -1
  60. package/dist/parser/SGParser.js.map +1 -1
  61. package/dist/parser/SGParser.spec.js +1 -1
  62. package/dist/parser/SGParser.spec.js.map +1 -1
  63. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +1 -1
  64. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  65. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +9 -9
  66. package/dist/parser/tests/expression/TernaryExpression.spec.js +1 -1
  67. package/dist/parser/tests/statement/Enum.spec.js +66 -0
  68. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  69. package/dist/parser/tests/statement/PrintStatement.spec.js +6 -6
  70. package/dist/preprocessor/Manifest.d.ts +5 -5
  71. package/dist/preprocessor/Manifest.js +14 -35
  72. package/dist/preprocessor/Manifest.js.map +1 -1
  73. package/dist/preprocessor/Manifest.spec.d.ts +1 -0
  74. package/dist/preprocessor/Manifest.spec.js +78 -103
  75. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  76. package/dist/roku-types/data.json +21891 -0
  77. package/dist/roku-types/index.d.ts +6776 -0
  78. package/dist/roku-types/index.js +11 -0
  79. package/dist/roku-types/index.js.map +1 -0
  80. package/dist/util.d.ts +8 -5
  81. package/dist/util.js +24 -18
  82. package/dist/util.js.map +1 -1
  83. package/package.json +14 -3
@@ -124,12 +124,12 @@ describe('parser print statements', () => {
124
124
  print ""
125
125
  `, `
126
126
  paramArr = [
127
- "This",
128
- "is",
129
- true,
130
- "and",
131
- "this",
132
- "is",
127
+ "This"
128
+ "is"
129
+ true
130
+ "and"
131
+ "this"
132
+ "is"
133
133
  1
134
134
  ]
135
135
  print "This is one line of stuff:";
@@ -1,7 +1,7 @@
1
- /** The set of possible value types in a `manifest` file's `key=value` pair. */
2
- export declare type ManifestValue = number | string | boolean;
3
- /** A map containing the data from a `manifest` file. */
4
- export declare type Manifest = Map<string, ManifestValue>;
1
+ /**
2
+ * A map containing the data from a `manifest` file.
3
+ */
4
+ export declare type Manifest = Map<string, string>;
5
5
  /**
6
6
  * Attempts to read a `manifest` file, parsing its contents into a map of string to JavaScript
7
7
  * number, string, or boolean.
@@ -17,7 +17,7 @@ export declare function getManifest(rootDir: string): Promise<Manifest>;
17
17
  * @returns a Promise that resolves to a map of string to JavaScript number, string, or boolean,
18
18
  * representing the manifest file's contents
19
19
  */
20
- export declare function parseManifest(contents: string): Map<string, ManifestValue>;
20
+ export declare function parseManifest(contents: string): Map<string, string>;
21
21
  /**
22
22
  * Parses a 'manifest' file's `bs_const` property into a map of key to boolean value.
23
23
  * @param manifest the internal representation of the 'manifest' file to extract `bs_const` from
@@ -30,44 +30,23 @@ exports.getManifest = getManifest;
30
30
  * representing the manifest file's contents
31
31
  */
32
32
  function parseManifest(contents) {
33
- let keyValuePairs = contents
34
- // for each line
35
- .split('\n')
36
- // remove leading/trailing whitespace
37
- .map(line => line.trim())
38
- // separate keys and values
39
- .map((line, index) => {
33
+ const lines = contents.split(/\r?\n/g);
34
+ const result = new Map();
35
+ for (let i = 0; i < lines.length; i++) {
36
+ const line = lines[i];
40
37
  // skip empty lines and comments
41
- if (line === '' || line.startsWith('#')) {
42
- return ['', ''];
43
- }
44
- let equals = line.indexOf('=');
45
- if (equals === -1) {
46
- throw new Error(`[manifest:${index +
47
- 1}] No '=' detected. Manifest attributes must be of the form 'key=value'.`);
48
- }
49
- return [line.slice(0, equals), line.slice(equals + 1)];
50
- })
51
- // keep only non-empty keys and values
52
- .filter(([key, value]) => key && value)
53
- // remove leading/trailing whitespace from keys and values
54
- .map(([key, value]) => [key.trim(), value.trim()])
55
- // convert value to boolean, integer, or leave as string
56
- .map(([key, value]) => {
57
- if (value.toLowerCase() === 'true') {
58
- return [key, true];
59
- }
60
- if (value.toLowerCase() === 'false') {
61
- return [key, false];
38
+ if (line.trim() === '' || line.trim().startsWith('#')) {
39
+ continue;
62
40
  }
63
- let maybeNumber = Number.parseInt(value);
64
- // if it's not a number, it's just a string
65
- if (Number.isNaN(maybeNumber)) {
66
- return [key, value];
41
+ let equalIndex = line.indexOf('=');
42
+ if (equalIndex === -1) {
43
+ throw new Error(`[manifest:${i + 1}] No '=' detected. Manifest attributes must be of the form 'key=value'.`);
67
44
  }
68
- return [key, maybeNumber];
69
- });
70
- return new Map(keyValuePairs);
45
+ const key = line.slice(0, equalIndex);
46
+ const value = line.slice(equalIndex + 1);
47
+ result.set(key, value);
48
+ }
49
+ return result;
71
50
  }
72
51
  exports.parseManifest = parseManifest;
73
52
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Manifest.js","sourceRoot":"","sources":["../../src/preprocessor/Manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Manifest.js","sourceRoot":"","sources":["../../src/preprocessor/Manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,105 +1,80 @@
1
1
  "use strict";
2
- // import * as fsExtra from 'fs';
3
- // import { expect } from 'chai';
4
- // import { getManifest, getBsConst } from './Manifest';
5
- // import { createSandbox, SinonSandbox } from 'sinon';
6
- // let sinon: SinonSandbox;
7
- // describe('manifest support', () => {
8
- // beforeEach(() => {
9
- // sinon = createSandbox();
10
- // });
11
- // afterEach(() => {
12
- // sinon.restore();
13
- // });
14
- // describe('manifest parser', () => {
15
- // it('returns an empty map if manifest not found', async () => {
16
- // // sinon.stub(fsExtra, 'readFile').returns(<any>
17
- // // Promise.reject(
18
- // // new Error('File not found')
19
- // // )
20
- // // );
21
- // sinon.stub(fsExtra, 'readFile').returns(<any>
22
- // Promise.reject(
23
- // new Error('File not found')
24
- // )
25
- // );
26
- // return expect(await getManifest('/no/manifest/here')).to.eql(new Map());
27
- // });
28
- // it('rejects key-value pairs with no \'=\'', () => {
29
- // fs.readFile.mockImplementation((filename, encoding, cb) => cb(/* no error */ null, 'no_equal')
30
- // );
31
- // return expect(getManifest('/has/key/but/no/equal')).rejects.toThrowError(
32
- // 'No \'=\' detected'
33
- // );
34
- // });
35
- // it('ignores comments', () => {
36
- // fs.readFile.mockImplementation((filename, encoding, cb) => cb(/* no error */ null, '# this line is ignored!')
37
- // );
38
- // return expect(getManifest('/has/a/manifest')).resolves.to.eql(new Map());
39
- // });
40
- // it('ignores empty keys and values', () => {
41
- // fs.readFile.mockImplementation((filename, encoding, cb) => cb(/* no error */ null, [' =lorem', 'ipsum= '].join('\n'))
42
- // );
43
- // return expect(getManifest('/has/blank/keys/and/values')).resolves.to.eql(new Map());
44
- // });
45
- // it('trims whitespace from keys and values', () => {
46
- // fs.readFile.mockImplementation((filename, encoding, cb) => cb(/* no error */ null, ' key = value ')
47
- // );
48
- // return expect(getManifest('/has/extra/whitespace')).resolves.to.eql(
49
- // new Map([['key', 'value']])
50
- // );
51
- // });
52
- // it('parses key-value pairs', () => {
53
- // fs.readFile.mockImplementation((filename, encoding, cb) => cb(
54
- // /* no error */ null,
55
- // ['foo=bar=baz', 'lorem=true', 'five=5', 'six=6.000', 'version=1.2.3'].join('\n')
56
- // )
57
- // );
58
- // return expect(getManifest('/has/a/manifest')).resolves.to.eql(
59
- // new Map([
60
- // ['foo', 'bar=baz'],
61
- // ['lorem', true],
62
- // ['five', 5],
63
- // ['six', 6],
64
- // ['version', '1.2.3']
65
- // ])
66
- // );
67
- // });
68
- // });
69
- // describe('bs_const parser', () => {
70
- // it('returns an empty map if \'bs_const\' isn\'t found', () => {
71
- // let manifest = new Map([['containsBsConst', false]]);
72
- // expect(getBsConst(manifest)).to.eql(new Map());
73
- // });
74
- // it('requires a string value for \'bs_const\' attributes', () => {
75
- // let manifest = new Map([['bs_const', 1.2345]]);
76
- // expect(() => getBsConst(manifest)).toThrowError('Invalid bs_const right-hand side');
77
- // });
78
- // it('ignores empty key-value pairs', () => {
79
- // let manifest = new Map([['bs_const', ';;;;']]);
80
- // expect(getBsConst(manifest)).to.eql(new Map());
81
- // });
82
- // it('rejects key-value pairs with no \'=\'', () => {
83
- // let manifest = new Map([['bs_const', 'i-have-no-equal']]);
84
- // expect(() => getBsConst(manifest)).toThrowError('No \'=\' detected');
85
- // });
86
- // it('trims whitespace from keys and values', () => {
87
- // let manifest = new Map([['bs_const', ' key = true ']]);
88
- // expect(getBsConst(manifest)).to.eql(new Map([['key', true]]));
89
- // });
90
- // it('rejects non-boolean values', () => {
91
- // let manifest = new Map([['bs_const', 'string=word']]);
92
- // expect(() => getBsConst(manifest)).to.throw;
93
- // });
94
- // it('allows case-insensitive booleans', () => {
95
- // let manifest = new Map([['bs_const', 'foo=true;bar=FalSE']]);
96
- // expect(getBsConst(manifest)).to.eql(
97
- // new Map([
98
- // ['foo', true],
99
- // ['bar', false]
100
- // ])
101
- // );
102
- // });
103
- // });
104
- // });
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fsExtra = require("fs");
4
+ const chai_1 = require("chai");
5
+ const Manifest_1 = require("./Manifest");
6
+ const sinon_1 = require("sinon");
7
+ const testHelpers_spec_1 = require("../testHelpers.spec");
8
+ const sinon = (0, sinon_1.createSandbox)();
9
+ describe('manifest support', () => {
10
+ beforeEach(() => {
11
+ sinon.restore();
12
+ });
13
+ afterEach(() => {
14
+ sinon.restore();
15
+ });
16
+ describe('manifest parser', () => {
17
+ it('returns an empty map if manifest not found', async () => {
18
+ sinon.stub(fsExtra, 'readFile').returns(Promise.reject(new Error('File not found')));
19
+ return (0, chai_1.expect)(await (0, Manifest_1.getManifest)('/no/manifest/here')).to.eql(new Map());
20
+ });
21
+ it('rejects key-value pairs with no \'=\'', () => {
22
+ (0, testHelpers_spec_1.expectThrows)(() => {
23
+ (0, Manifest_1.parseManifest)('key');
24
+ });
25
+ });
26
+ it('ignores comments', () => {
27
+ return (0, chai_1.expect)((0, Manifest_1.parseManifest)('')).to.eql(new Map());
28
+ });
29
+ it('retains whitespace for keys and values', () => {
30
+ (0, chai_1.expect)((0, testHelpers_spec_1.mapToObject)((0, Manifest_1.parseManifest)(' leading interum and trailing key spaces = value '))).to.eql({
31
+ ' leading interum and trailing key spaces ': ' value '
32
+ });
33
+ });
34
+ it('does not convert values to primitives', () => {
35
+ (0, chai_1.expect)((0, testHelpers_spec_1.mapToObject)((0, Manifest_1.parseManifest)((0, testHelpers_spec_1.trim) `
36
+ name=bob
37
+ age=12
38
+ enabled=true
39
+ height=1.5
40
+ `))).to.eql({
41
+ name: 'bob',
42
+ age: '12',
43
+ enabled: 'true',
44
+ height: '1.5'
45
+ });
46
+ });
47
+ });
48
+ describe('bs_const parser', () => {
49
+ function test(manifest, expected) {
50
+ (0, chai_1.expect)((0, Manifest_1.getBsConst)((0, Manifest_1.parseManifest)(manifest))).to.eql((0, testHelpers_spec_1.objectToMap)(expected));
51
+ }
52
+ it('returns an empty map if \'bs_const\' isn\'t found', () => {
53
+ test('', new Map());
54
+ });
55
+ it('ignores empty key-value pairs', () => {
56
+ test('bs_const=;;;;', new Map());
57
+ });
58
+ it('rejects key-value pairs with no \'=\'', () => {
59
+ (0, testHelpers_spec_1.expectThrows)(() => test(`bs_const=i-have-no-equal`, {}), `No '=' detected for key i-have-no-equal. bs_const constants must be of the form 'key=value'.`);
60
+ });
61
+ it('trims whitespace from keys and values', () => {
62
+ let manifest = new Map([['bs_const', ' key = true ']]);
63
+ (0, chai_1.expect)((0, Manifest_1.getBsConst)(manifest)).to.eql(new Map([['key', true]]));
64
+ });
65
+ it('rejects non-boolean values', () => {
66
+ const manifest = new Map([['bs_const', 'string=word']]);
67
+ (0, testHelpers_spec_1.expectThrows)(() => {
68
+ (0, Manifest_1.getBsConst)(manifest);
69
+ });
70
+ });
71
+ it('allows case-insensitive booleans', () => {
72
+ let manifest = new Map([['bs_const', 'foo=true;bar=FalSE']]);
73
+ (0, chai_1.expect)((0, Manifest_1.getBsConst)(manifest)).to.eql(new Map([
74
+ ['foo', true],
75
+ ['bar', false]
76
+ ]));
77
+ });
78
+ });
79
+ });
105
80
  //# sourceMappingURL=Manifest.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Manifest.spec.js","sourceRoot":"","sources":["../../src/preprocessor/Manifest.spec.ts"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,iCAAiC;AACjC,wDAAwD;AACxD,uDAAuD;AACvD,2BAA2B;AAE3B,uCAAuC;AACvC,yBAAyB;AACzB,mCAAmC;AACnC,UAAU;AACV,wBAAwB;AACxB,2BAA2B;AAC3B,UAAU;AAEV,0CAA0C;AAC1C,yEAAyE;AACzE,+DAA+D;AAC/D,qCAAqC;AACrC,qDAAqD;AACrD,uBAAuB;AACvB,oBAAoB;AACpB,4DAA4D;AAC5D,kCAAkC;AAClC,kDAAkD;AAClD,oBAAoB;AACpB,iBAAiB;AAEjB,uFAAuF;AACvF,cAAc;AAEd,8DAA8D;AAC9D,6GAA6G;AAC7G,iBAAiB;AAEjB,wFAAwF;AACxF,sCAAsC;AACtC,iBAAiB;AACjB,cAAc;AAEd,yCAAyC;AACzC,4HAA4H;AAC5H,iBAAiB;AAEjB,wFAAwF;AACxF,cAAc;AAEd,sDAAsD;AACtD,sIAAsI;AACtI,iBAAiB;AAEjB,mGAAmG;AACnG,cAAc;AAEd,8DAA8D;AAC9D,wHAAwH;AACxH,iBAAiB;AAEjB,mFAAmF;AACnF,8CAA8C;AAC9C,iBAAiB;AACjB,cAAc;AAEd,+CAA+C;AAC/C,6EAA6E;AAC7E,uCAAuC;AACvC,mGAAmG;AACnG,gBAAgB;AAChB,iBAAiB;AAEjB,6EAA6E;AAC7E,4BAA4B;AAC5B,0CAA0C;AAC1C,uCAAuC;AACvC,mCAAmC;AACnC,kCAAkC;AAClC,2CAA2C;AAC3C,qBAAqB;AACrB,iBAAiB;AACjB,cAAc;AACd,UAAU;AAEV,0CAA0C;AAC1C,0EAA0E;AAC1E,oEAAoE;AACpE,8DAA8D;AAC9D,cAAc;AAEd,4EAA4E;AAC5E,8DAA8D;AAC9D,mGAAmG;AACnG,cAAc;AAEd,sDAAsD;AACtD,8DAA8D;AAC9D,8DAA8D;AAC9D,cAAc;AAEd,8DAA8D;AAC9D,yEAAyE;AACzE,oFAAoF;AACpF,cAAc;AAEd,8DAA8D;AAC9D,4EAA4E;AAC5E,6EAA6E;AAC7E,cAAc;AAEd,mDAAmD;AACnD,qEAAqE;AAErE,2DAA2D;AAC3D,cAAc;AAEd,yDAAyD;AACzD,4EAA4E;AAE5E,mDAAmD;AACnD,4BAA4B;AAC5B,qCAAqC;AACrC,qCAAqC;AACrC,qBAAqB;AACrB,iBAAiB;AACjB,cAAc;AACd,UAAU;AACV,MAAM"}
1
+ {"version":3,"file":"Manifest.spec.js","sourceRoot":"","sources":["../../src/preprocessor/Manifest.spec.ts"],"names":[],"mappings":"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"}