@yozora/tokenizer-ecma-import 1.2.2 → 2.0.0-alpha.2

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.
package/README.md CHANGED
@@ -105,14 +105,14 @@ so you can use `YozoraParser` directly.
105
105
  registered in *YastParser* as a plugin-in before it can be used.
106
106
 
107
107
  ```typescript {4,9}
108
- import { DefaultYastParser } from '@yozora/core-parser'
108
+ import { DefaultParser } from '@yozora/core-parser'
109
109
  import ParagraphTokenizer from '@yozora/tokenizer-paragraph'
110
110
  import TextTokenizer from '@yozora/tokenizer-text'
111
111
  import EcmaImportTokenizer from '@yozora/tokenizer-ecma-import'
112
112
 
113
- const parser = new DefaultYastParser()
114
- .useBlockFallbackTokenizer(new ParagraphTokenizer())
115
- .useInlineFallbackTokenizer(new TextTokenizer())
113
+ const parser = new DefaultParser()
114
+ .useFallbackTokenizer(new ParagraphTokenizer())
115
+ .useFallbackTokenizer(new TextTokenizer())
116
116
  .useTokenizer(new EcmaImportTokenizer())
117
117
 
118
118
  // parse source markdown content
@@ -248,7 +248,6 @@ Name | Type | Required | Default
248
248
  [@yozora/tokenizer-link]: https://github.com/yozorajs/yozora/tree/main/tokenizers/link#readme
249
249
  [@yozora/tokenizer-link-reference]: https://github.com/yozorajs/yozora/tree/main/tokenizers/link-reference#readme
250
250
  [@yozora/tokenizer-list]: https://github.com/yozorajs/yozora/tree/main/tokenizers/list#readme
251
- [@yozora/tokenizer-list-item]: https://github.com/yozorajs/yozora/tree/main/tokenizers/list-item#readme
252
251
  [@yozora/tokenizer-math]: https://github.com/yozorajs/yozora/tree/main/tokenizers/math#readme
253
252
  [@yozora/tokenizer-paragraph]: https://github.com/yozorajs/yozora/tree/main/tokenizers/paragraph#readme
254
253
  [@yozora/tokenizer-setext-heading]: https://github.com/yozorajs/yozora/tree/main/tokenizers/setext-heading#readme
@@ -308,7 +307,6 @@ Name | Type | Required | Default
308
307
  [doc-@yozora/tokenizer-definition]: https://yozora.guanghechen.com/docs/package/tokenizer-definition
309
308
  [doc-@yozora/tokenizer-link-reference]: https://yozora.guanghechen.com/docs/package/tokenizer-link-reference
310
309
  [doc-@yozora/tokenizer-list]: https://yozora.guanghechen.com/docs/package/tokenizer-list
311
- [doc-@yozora/tokenizer-list-item]: https://yozora.guanghechen.com/docs/package/tokenizer-list-item
312
310
  [doc-@yozora/tokenizer-math]: https://yozora.guanghechen.com/docs/package/tokenizer-math
313
311
  [doc-@yozora/tokenizer-paragraph]: https://yozora.guanghechen.com/docs/package/tokenizer-paragraph
314
312
  [doc-@yozora/tokenizer-setext-heading]: https://yozora.guanghechen.com/docs/package/tokenizer-setext-heading
package/lib/cjs/index.js CHANGED
@@ -6,8 +6,6 @@ var ast = require('@yozora/ast');
6
6
  var character = require('@yozora/character');
7
7
  var coreTokenizer = require('@yozora/core-tokenizer');
8
8
 
9
- const uniqueName = '@yozora/tokenizer-ecma-import';
10
-
11
9
  const namedImportItemRegex = /^(\w+)(?:\s+as\s+(\w+))?$/;
12
10
  const namedImportRegex = /\{\s*((?:[\w]+(?:\s+as\s+[\w]+)?\s*,\s*)*[\w]+(?:\s+as\s+[\w]+)?)\s*\}\s*/;
13
11
  const regex1 = /^import\s+(['"])([^'"]+)\1$/;
@@ -25,16 +23,12 @@ function resolveNameImports(text) {
25
23
  return result;
26
24
  }
27
25
 
28
- class EcmaImportTokenizer extends coreTokenizer.BaseBlockTokenizer {
29
- constructor(props = {}) {
30
- var _a, _b;
31
- super({
32
- name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
33
- priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.ATOMIC,
34
- });
35
- this.isContainingBlock = false;
36
- }
37
- eatOpener(line) {
26
+ const match = function () {
27
+ return {
28
+ isContainingBlock: false,
29
+ eatOpener,
30
+ };
31
+ function eatOpener(line) {
38
32
  if (line.countOfPrecedeSpaces >= 4)
39
33
  return null;
40
34
  const { nodePoints, startIndex, endIndex, firstNonWhitespaceIndex } = line;
@@ -88,21 +82,48 @@ class EcmaImportTokenizer extends coreTokenizer.BaseBlockTokenizer {
88
82
  namedImports: resolveNameImports(m[2]),
89
83
  };
90
84
  }
91
- return token === null
92
- ? null
93
- : { token, nextIndex: endIndex, saturated: true };
85
+ return token === null ? null : { token, nextIndex: endIndex, saturated: true };
94
86
  }
95
- parseBlock(token) {
96
- const node = {
97
- type: ast.EcmaImportType,
98
- moduleName: token.moduleName,
99
- defaultImport: token.defaultImport,
100
- namedImports: token.namedImports,
101
- };
102
- return node;
87
+ };
88
+
89
+ const parse = function (api) {
90
+ return {
91
+ parse: tokens => tokens.map(token => {
92
+ const node = api.shouldReservePosition
93
+ ? {
94
+ type: ast.EcmaImportType,
95
+ position: token.position,
96
+ moduleName: token.moduleName,
97
+ defaultImport: token.defaultImport,
98
+ namedImports: token.namedImports,
99
+ }
100
+ : {
101
+ type: ast.EcmaImportType,
102
+ moduleName: token.moduleName,
103
+ defaultImport: token.defaultImport,
104
+ namedImports: token.namedImports,
105
+ };
106
+ return node;
107
+ }),
108
+ };
109
+ };
110
+
111
+ const uniqueName = '@yozora/tokenizer-ecma-import';
112
+
113
+ class EcmaImportTokenizer extends coreTokenizer.BaseBlockTokenizer {
114
+ constructor(props = {}) {
115
+ var _a, _b;
116
+ super({
117
+ name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
118
+ priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.ATOMIC,
119
+ });
120
+ this.match = match;
121
+ this.parse = parse;
103
122
  }
104
123
  }
105
124
 
106
125
  exports.EcmaImportTokenizer = EcmaImportTokenizer;
107
126
  exports.EcmaImportTokenizerName = uniqueName;
108
- exports['default'] = EcmaImportTokenizer;
127
+ exports["default"] = EcmaImportTokenizer;
128
+ exports.ecmaImportMatch = match;
129
+ exports.ecmaImportParse = parse;
package/lib/esm/index.js CHANGED
@@ -1,8 +1,6 @@
1
1
  import { EcmaImportType } from '@yozora/ast';
2
2
  import { AsciiCodePoint, calcTrimBoundaryOfCodePoints, calcStringFromNodePoints } from '@yozora/character';
3
- import { BaseBlockTokenizer, TokenizerPriority, calcStartYastNodePoint, calcEndYastNodePoint } from '@yozora/core-tokenizer';
4
-
5
- const uniqueName = '@yozora/tokenizer-ecma-import';
3
+ import { calcStartYastNodePoint, calcEndYastNodePoint, BaseBlockTokenizer, TokenizerPriority } from '@yozora/core-tokenizer';
6
4
 
7
5
  const namedImportItemRegex = /^(\w+)(?:\s+as\s+(\w+))?$/;
8
6
  const namedImportRegex = /\{\s*((?:[\w]+(?:\s+as\s+[\w]+)?\s*,\s*)*[\w]+(?:\s+as\s+[\w]+)?)\s*\}\s*/;
@@ -21,16 +19,12 @@ function resolveNameImports(text) {
21
19
  return result;
22
20
  }
23
21
 
24
- class EcmaImportTokenizer extends BaseBlockTokenizer {
25
- constructor(props = {}) {
26
- var _a, _b;
27
- super({
28
- name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
29
- priority: (_b = props.priority) !== null && _b !== void 0 ? _b : TokenizerPriority.ATOMIC,
30
- });
31
- this.isContainingBlock = false;
32
- }
33
- eatOpener(line) {
22
+ const match = function () {
23
+ return {
24
+ isContainingBlock: false,
25
+ eatOpener,
26
+ };
27
+ function eatOpener(line) {
34
28
  if (line.countOfPrecedeSpaces >= 4)
35
29
  return null;
36
30
  const { nodePoints, startIndex, endIndex, firstNonWhitespaceIndex } = line;
@@ -84,19 +78,44 @@ class EcmaImportTokenizer extends BaseBlockTokenizer {
84
78
  namedImports: resolveNameImports(m[2]),
85
79
  };
86
80
  }
87
- return token === null
88
- ? null
89
- : { token, nextIndex: endIndex, saturated: true };
81
+ return token === null ? null : { token, nextIndex: endIndex, saturated: true };
90
82
  }
91
- parseBlock(token) {
92
- const node = {
93
- type: EcmaImportType,
94
- moduleName: token.moduleName,
95
- defaultImport: token.defaultImport,
96
- namedImports: token.namedImports,
97
- };
98
- return node;
83
+ };
84
+
85
+ const parse = function (api) {
86
+ return {
87
+ parse: tokens => tokens.map(token => {
88
+ const node = api.shouldReservePosition
89
+ ? {
90
+ type: EcmaImportType,
91
+ position: token.position,
92
+ moduleName: token.moduleName,
93
+ defaultImport: token.defaultImport,
94
+ namedImports: token.namedImports,
95
+ }
96
+ : {
97
+ type: EcmaImportType,
98
+ moduleName: token.moduleName,
99
+ defaultImport: token.defaultImport,
100
+ namedImports: token.namedImports,
101
+ };
102
+ return node;
103
+ }),
104
+ };
105
+ };
106
+
107
+ const uniqueName = '@yozora/tokenizer-ecma-import';
108
+
109
+ class EcmaImportTokenizer extends BaseBlockTokenizer {
110
+ constructor(props = {}) {
111
+ var _a, _b;
112
+ super({
113
+ name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
114
+ priority: (_b = props.priority) !== null && _b !== void 0 ? _b : TokenizerPriority.ATOMIC,
115
+ });
116
+ this.match = match;
117
+ this.parse = parse;
99
118
  }
100
119
  }
101
120
 
102
- export { EcmaImportTokenizer, uniqueName as EcmaImportTokenizerName, EcmaImportTokenizer as default };
121
+ export { EcmaImportTokenizer, uniqueName as EcmaImportTokenizerName, EcmaImportTokenizer as default, match as ecmaImportMatch, parse as ecmaImportParse };
@@ -1,5 +1,5 @@
1
- import { EcmaImportTokenizer } from './tokenizer';
2
- export { EcmaImportTokenizer } from './tokenizer';
1
+ export { match as ecmaImportMatch } from './match';
2
+ export { parse as ecmaImportParse } from './parse';
3
+ export { EcmaImportTokenizer, EcmaImportTokenizer as default } from './tokenizer';
3
4
  export { uniqueName as EcmaImportTokenizerName } from './types';
4
- export type { Token as EcmaImportToken, TokenizerProps as EcmaImportProps, } from './types';
5
- export default EcmaImportTokenizer;
5
+ export type { IThis as ecmaImportHookContext, IToken as IEcmaImportToken, ITokenizerProps as IEcmaImportProps, } from './types';
@@ -0,0 +1,15 @@
1
+ import type { IMatchBlockHookCreator } from '@yozora/core-tokenizer';
2
+ import type { IThis, IToken, T } from './types';
3
+ /**
4
+ * Examples
5
+ *
6
+ * import '@yozora/parser'
7
+ * import Parser from '@yozora/parser'
8
+ * import Parser, { YozoraParserProps } from '@yozora/parser'
9
+ * import { YozoraParserProps } from '@yozora/parser'
10
+ * import { YozoraParser, YozoraParser as Parser } from '@yozora/parser'
11
+ *
12
+ * @see https://github.com/syntax-tree/mdast#strong
13
+ * @see https://github.github.com/gfm/#emphasis-and-strong-emphasis
14
+ */
15
+ export declare const match: IMatchBlockHookCreator<T, IToken, IThis>;
@@ -0,0 +1,3 @@
1
+ import type { IParseBlockHookCreator } from '@yozora/core-tokenizer';
2
+ import type { INode, IThis, IToken, T } from './types';
3
+ export declare const parse: IParseBlockHookCreator<T, IToken, INode, IThis>;
@@ -1,32 +1,13 @@
1
- import type { PhrasingContentLine, ResultOfEatOpener, ResultOfParse, Tokenizer, TokenizerMatchBlockHook, TokenizerParseBlockHook } from '@yozora/core-tokenizer';
1
+ import type { IBlockTokenizer, IMatchBlockHookCreator, IParseBlockHookCreator } from '@yozora/core-tokenizer';
2
2
  import { BaseBlockTokenizer } from '@yozora/core-tokenizer';
3
- import type { Node, T, Token, TokenizerProps } from './types';
4
- /**
5
- * Params for constructing EcmaImportTokenizer
6
- */
7
- export interface EcmaImportTokenizerProps {
8
- }
3
+ import type { INode, IThis, IToken, ITokenizerProps, T } from './types';
9
4
  /**
10
5
  * Lexical Analyzer for Ecma Import statement
11
- *
12
- * Examples
13
- *
14
- * import '@yozora/parser'
15
- * import Parser from '@yozora/parser'
16
- * import Parser, { YozoraParserProps } from '@yozora/parser'
17
- * import { YozoraParserProps } from '@yozora/parser'
18
- * import { YozoraParser, YozoraParser as Parser } from '@yozora/parser'
19
- *
20
6
  * @see https://github.com/syntax-tree/mdast#strong
21
7
  * @see https://github.github.com/gfm/#emphasis-and-strong-emphasis
22
8
  */
23
- export declare class EcmaImportTokenizer extends BaseBlockTokenizer implements Tokenizer, TokenizerMatchBlockHook<T, Token>, TokenizerParseBlockHook<T, Token, Node> {
24
- readonly isContainingBlock = false;
25
- constructor(props?: TokenizerProps);
26
- eatOpener(line: Readonly<PhrasingContentLine>): ResultOfEatOpener<T, Token>;
27
- /**
28
- * @override
29
- * @see TokenizerParseBlockHook
30
- */
31
- parseBlock(token: Readonly<Token>): ResultOfParse<T, Node>;
9
+ export declare class EcmaImportTokenizer extends BaseBlockTokenizer<T, IToken, INode, IThis> implements IBlockTokenizer<T, IToken, INode, IThis> {
10
+ constructor(props?: ITokenizerProps);
11
+ readonly match: IMatchBlockHookCreator<T, IToken, IThis>;
12
+ readonly parse: IParseBlockHookCreator<T, IToken, INode, IThis>;
32
13
  }
@@ -1,7 +1,8 @@
1
- import type { EcmaImport, EcmaImportType } from '@yozora/ast';
2
- import type { BaseBlockTokenizerProps, PartialYastBlockToken } from '@yozora/core-tokenizer';
1
+ import type { EcmaImportType, IEcmaImport } from '@yozora/ast';
2
+ import type { IBaseBlockTokenizerProps, IPartialYastBlockToken, ITokenizer } from '@yozora/core-tokenizer';
3
3
  export declare type T = EcmaImportType;
4
- export declare type Node = EcmaImport;
4
+ export declare type INode = IEcmaImport;
5
5
  export declare const uniqueName = "@yozora/tokenizer-ecma-import";
6
- export declare type Token = PartialYastBlockToken<T> & Omit<EcmaImport, 'type'>;
7
- export declare type TokenizerProps = Partial<BaseBlockTokenizerProps>;
6
+ export declare type IToken = IPartialYastBlockToken<T> & Omit<IEcmaImport, 'type'>;
7
+ export declare type IThis = ITokenizer;
8
+ export declare type ITokenizerProps = Partial<IBaseBlockTokenizerProps>;
@@ -1,4 +1,4 @@
1
- import type { EcmaImportNamedImport } from '@yozora/ast';
1
+ import type { IEcmaImportNamedImport } from '@yozora/ast';
2
2
  /**
3
3
  * import '@yozora.parser'
4
4
  */
@@ -20,4 +20,4 @@ export declare const regex3: RegExp;
20
20
  *
21
21
  * @param text
22
22
  */
23
- export declare function resolveNameImports(text: string): EcmaImportNamedImport[];
23
+ export declare function resolveNameImports(text: string): IEcmaImportNamedImport[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yozora/tokenizer-ecma-import",
3
- "version": "1.2.2",
3
+ "version": "2.0.0-alpha.2",
4
4
  "author": {
5
5
  "name": "guanghechen",
6
6
  "url": "https://github.com/guanghechen/"
@@ -35,9 +35,9 @@
35
35
  "test": "cross-env TS_NODE_FILES=true jest --config ../../jest.config.js --rootDir ."
36
36
  },
37
37
  "dependencies": {
38
- "@yozora/ast": "^1.2.2",
39
- "@yozora/character": "^1.2.2",
40
- "@yozora/core-tokenizer": "^1.2.2"
38
+ "@yozora/ast": "^2.0.0-alpha.2",
39
+ "@yozora/character": "^2.0.0-alpha.2",
40
+ "@yozora/core-tokenizer": "^2.0.0-alpha.2"
41
41
  },
42
- "gitHead": "fb4b804548592c09259aabcf9cc4dd96176bd024"
42
+ "gitHead": "da59d85520455c59a117a35032ef1a035c10ea21"
43
43
  }