create-microact-app 1.0.1

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 (213) hide show
  1. package/index.js +95 -0
  2. package/package.json +21 -0
  3. package/templates/vanilla/.github/workflows/deploy.yml +38 -0
  4. package/templates/vanilla/index.html +13 -0
  5. package/templates/vanilla/node_modules/.package-lock.json +207 -0
  6. package/templates/vanilla/node_modules/@esbuild/darwin-x64/README.md +3 -0
  7. package/templates/vanilla/node_modules/@esbuild/darwin-x64/bin/esbuild +0 -0
  8. package/templates/vanilla/node_modules/@esbuild/darwin-x64/package.json +17 -0
  9. package/templates/vanilla/node_modules/@monygroupcorp/microact/README.md +154 -0
  10. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.cjs.js +1749 -0
  11. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.cjs.js.map +1 -0
  12. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.esm.js +1743 -0
  13. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.esm.js.map +1 -0
  14. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.umd.js +2 -0
  15. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.umd.js.map +1 -0
  16. package/templates/vanilla/node_modules/@monygroupcorp/microact/example/index.html +13 -0
  17. package/templates/vanilla/node_modules/@monygroupcorp/microact/example/index.js +63 -0
  18. package/templates/vanilla/node_modules/@monygroupcorp/microact/package.json +38 -0
  19. package/templates/vanilla/node_modules/@monygroupcorp/microact/rollup.config.cjs +30 -0
  20. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/Component.js +831 -0
  21. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/DOMUpdater.js +320 -0
  22. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/EventBus.js +123 -0
  23. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/Router.js +253 -0
  24. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/UpdateScheduler.js +218 -0
  25. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/index.js +6 -0
  26. package/templates/vanilla/node_modules/esbuild/LICENSE.md +21 -0
  27. package/templates/vanilla/node_modules/esbuild/README.md +3 -0
  28. package/templates/vanilla/node_modules/esbuild/bin/esbuild +0 -0
  29. package/templates/vanilla/node_modules/esbuild/install.js +287 -0
  30. package/templates/vanilla/node_modules/esbuild/lib/main.d.ts +660 -0
  31. package/templates/vanilla/node_modules/esbuild/lib/main.js +2393 -0
  32. package/templates/vanilla/node_modules/esbuild/package.json +42 -0
  33. package/templates/vanilla/node_modules/nanoid/LICENSE +20 -0
  34. package/templates/vanilla/node_modules/nanoid/README.md +39 -0
  35. package/templates/vanilla/node_modules/nanoid/async/index.browser.cjs +69 -0
  36. package/templates/vanilla/node_modules/nanoid/async/index.browser.js +34 -0
  37. package/templates/vanilla/node_modules/nanoid/async/index.cjs +71 -0
  38. package/templates/vanilla/node_modules/nanoid/async/index.d.ts +56 -0
  39. package/templates/vanilla/node_modules/nanoid/async/index.js +35 -0
  40. package/templates/vanilla/node_modules/nanoid/async/index.native.js +26 -0
  41. package/templates/vanilla/node_modules/nanoid/async/package.json +12 -0
  42. package/templates/vanilla/node_modules/nanoid/bin/nanoid.cjs +55 -0
  43. package/templates/vanilla/node_modules/nanoid/index.browser.cjs +72 -0
  44. package/templates/vanilla/node_modules/nanoid/index.browser.js +34 -0
  45. package/templates/vanilla/node_modules/nanoid/index.cjs +85 -0
  46. package/templates/vanilla/node_modules/nanoid/index.d.cts +91 -0
  47. package/templates/vanilla/node_modules/nanoid/index.d.ts +91 -0
  48. package/templates/vanilla/node_modules/nanoid/index.js +45 -0
  49. package/templates/vanilla/node_modules/nanoid/nanoid.js +1 -0
  50. package/templates/vanilla/node_modules/nanoid/non-secure/index.cjs +34 -0
  51. package/templates/vanilla/node_modules/nanoid/non-secure/index.d.ts +33 -0
  52. package/templates/vanilla/node_modules/nanoid/non-secure/index.js +21 -0
  53. package/templates/vanilla/node_modules/nanoid/non-secure/package.json +6 -0
  54. package/templates/vanilla/node_modules/nanoid/package.json +89 -0
  55. package/templates/vanilla/node_modules/nanoid/url-alphabet/index.cjs +7 -0
  56. package/templates/vanilla/node_modules/nanoid/url-alphabet/index.js +3 -0
  57. package/templates/vanilla/node_modules/nanoid/url-alphabet/package.json +6 -0
  58. package/templates/vanilla/node_modules/picocolors/LICENSE +15 -0
  59. package/templates/vanilla/node_modules/picocolors/README.md +21 -0
  60. package/templates/vanilla/node_modules/picocolors/package.json +25 -0
  61. package/templates/vanilla/node_modules/picocolors/picocolors.browser.js +4 -0
  62. package/templates/vanilla/node_modules/picocolors/picocolors.d.ts +5 -0
  63. package/templates/vanilla/node_modules/picocolors/picocolors.js +75 -0
  64. package/templates/vanilla/node_modules/picocolors/types.d.ts +51 -0
  65. package/templates/vanilla/node_modules/postcss/LICENSE +20 -0
  66. package/templates/vanilla/node_modules/postcss/README.md +29 -0
  67. package/templates/vanilla/node_modules/postcss/lib/at-rule.d.ts +140 -0
  68. package/templates/vanilla/node_modules/postcss/lib/at-rule.js +25 -0
  69. package/templates/vanilla/node_modules/postcss/lib/comment.d.ts +68 -0
  70. package/templates/vanilla/node_modules/postcss/lib/comment.js +13 -0
  71. package/templates/vanilla/node_modules/postcss/lib/container.d.ts +483 -0
  72. package/templates/vanilla/node_modules/postcss/lib/container.js +447 -0
  73. package/templates/vanilla/node_modules/postcss/lib/css-syntax-error.d.ts +248 -0
  74. package/templates/vanilla/node_modules/postcss/lib/css-syntax-error.js +133 -0
  75. package/templates/vanilla/node_modules/postcss/lib/declaration.d.ts +151 -0
  76. package/templates/vanilla/node_modules/postcss/lib/declaration.js +24 -0
  77. package/templates/vanilla/node_modules/postcss/lib/document.d.ts +69 -0
  78. package/templates/vanilla/node_modules/postcss/lib/document.js +33 -0
  79. package/templates/vanilla/node_modules/postcss/lib/fromJSON.d.ts +9 -0
  80. package/templates/vanilla/node_modules/postcss/lib/fromJSON.js +54 -0
  81. package/templates/vanilla/node_modules/postcss/lib/input.d.ts +227 -0
  82. package/templates/vanilla/node_modules/postcss/lib/input.js +265 -0
  83. package/templates/vanilla/node_modules/postcss/lib/lazy-result.d.ts +190 -0
  84. package/templates/vanilla/node_modules/postcss/lib/lazy-result.js +550 -0
  85. package/templates/vanilla/node_modules/postcss/lib/list.d.ts +60 -0
  86. package/templates/vanilla/node_modules/postcss/lib/list.js +58 -0
  87. package/templates/vanilla/node_modules/postcss/lib/map-generator.js +368 -0
  88. package/templates/vanilla/node_modules/postcss/lib/no-work-result.d.ts +46 -0
  89. package/templates/vanilla/node_modules/postcss/lib/no-work-result.js +138 -0
  90. package/templates/vanilla/node_modules/postcss/lib/node.d.ts +556 -0
  91. package/templates/vanilla/node_modules/postcss/lib/node.js +449 -0
  92. package/templates/vanilla/node_modules/postcss/lib/parse.d.ts +9 -0
  93. package/templates/vanilla/node_modules/postcss/lib/parse.js +42 -0
  94. package/templates/vanilla/node_modules/postcss/lib/parser.js +611 -0
  95. package/templates/vanilla/node_modules/postcss/lib/postcss.d.mts +69 -0
  96. package/templates/vanilla/node_modules/postcss/lib/postcss.d.ts +458 -0
  97. package/templates/vanilla/node_modules/postcss/lib/postcss.js +101 -0
  98. package/templates/vanilla/node_modules/postcss/lib/postcss.mjs +30 -0
  99. package/templates/vanilla/node_modules/postcss/lib/previous-map.d.ts +81 -0
  100. package/templates/vanilla/node_modules/postcss/lib/previous-map.js +144 -0
  101. package/templates/vanilla/node_modules/postcss/lib/processor.d.ts +115 -0
  102. package/templates/vanilla/node_modules/postcss/lib/processor.js +67 -0
  103. package/templates/vanilla/node_modules/postcss/lib/result.d.ts +205 -0
  104. package/templates/vanilla/node_modules/postcss/lib/result.js +42 -0
  105. package/templates/vanilla/node_modules/postcss/lib/root.d.ts +87 -0
  106. package/templates/vanilla/node_modules/postcss/lib/root.js +61 -0
  107. package/templates/vanilla/node_modules/postcss/lib/rule.d.ts +126 -0
  108. package/templates/vanilla/node_modules/postcss/lib/rule.js +27 -0
  109. package/templates/vanilla/node_modules/postcss/lib/stringifier.d.ts +46 -0
  110. package/templates/vanilla/node_modules/postcss/lib/stringifier.js +353 -0
  111. package/templates/vanilla/node_modules/postcss/lib/stringify.d.ts +9 -0
  112. package/templates/vanilla/node_modules/postcss/lib/stringify.js +11 -0
  113. package/templates/vanilla/node_modules/postcss/lib/symbols.js +5 -0
  114. package/templates/vanilla/node_modules/postcss/lib/terminal-highlight.js +70 -0
  115. package/templates/vanilla/node_modules/postcss/lib/tokenize.js +266 -0
  116. package/templates/vanilla/node_modules/postcss/lib/warn-once.js +13 -0
  117. package/templates/vanilla/node_modules/postcss/lib/warning.d.ts +147 -0
  118. package/templates/vanilla/node_modules/postcss/lib/warning.js +37 -0
  119. package/templates/vanilla/node_modules/postcss/package.json +88 -0
  120. package/templates/vanilla/node_modules/rollup/LICENSE.md +695 -0
  121. package/templates/vanilla/node_modules/rollup/README.md +125 -0
  122. package/templates/vanilla/node_modules/rollup/dist/bin/rollup +1715 -0
  123. package/templates/vanilla/node_modules/rollup/dist/es/getLogFilter.js +64 -0
  124. package/templates/vanilla/node_modules/rollup/dist/es/package.json +1 -0
  125. package/templates/vanilla/node_modules/rollup/dist/es/rollup.js +17 -0
  126. package/templates/vanilla/node_modules/rollup/dist/es/shared/node-entry.js +27273 -0
  127. package/templates/vanilla/node_modules/rollup/dist/es/shared/watch.js +4857 -0
  128. package/templates/vanilla/node_modules/rollup/dist/getLogFilter.d.ts +5 -0
  129. package/templates/vanilla/node_modules/rollup/dist/getLogFilter.js +69 -0
  130. package/templates/vanilla/node_modules/rollup/dist/loadConfigFile.d.ts +20 -0
  131. package/templates/vanilla/node_modules/rollup/dist/loadConfigFile.js +29 -0
  132. package/templates/vanilla/node_modules/rollup/dist/rollup.d.ts +1012 -0
  133. package/templates/vanilla/node_modules/rollup/dist/rollup.js +31 -0
  134. package/templates/vanilla/node_modules/rollup/dist/shared/fsevents-importer.js +37 -0
  135. package/templates/vanilla/node_modules/rollup/dist/shared/index.js +4571 -0
  136. package/templates/vanilla/node_modules/rollup/dist/shared/loadConfigFile.js +546 -0
  137. package/templates/vanilla/node_modules/rollup/dist/shared/rollup.js +27351 -0
  138. package/templates/vanilla/node_modules/rollup/dist/shared/watch-cli.js +561 -0
  139. package/templates/vanilla/node_modules/rollup/dist/shared/watch-proxy.js +87 -0
  140. package/templates/vanilla/node_modules/rollup/dist/shared/watch.js +316 -0
  141. package/templates/vanilla/node_modules/rollup/package.json +181 -0
  142. package/templates/vanilla/node_modules/source-map-js/LICENSE +28 -0
  143. package/templates/vanilla/node_modules/source-map-js/README.md +765 -0
  144. package/templates/vanilla/node_modules/source-map-js/lib/array-set.js +121 -0
  145. package/templates/vanilla/node_modules/source-map-js/lib/base64-vlq.js +140 -0
  146. package/templates/vanilla/node_modules/source-map-js/lib/base64.js +67 -0
  147. package/templates/vanilla/node_modules/source-map-js/lib/binary-search.js +111 -0
  148. package/templates/vanilla/node_modules/source-map-js/lib/mapping-list.js +79 -0
  149. package/templates/vanilla/node_modules/source-map-js/lib/quick-sort.js +132 -0
  150. package/templates/vanilla/node_modules/source-map-js/lib/source-map-consumer.d.ts +1 -0
  151. package/templates/vanilla/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
  152. package/templates/vanilla/node_modules/source-map-js/lib/source-map-generator.d.ts +1 -0
  153. package/templates/vanilla/node_modules/source-map-js/lib/source-map-generator.js +444 -0
  154. package/templates/vanilla/node_modules/source-map-js/lib/source-node.d.ts +1 -0
  155. package/templates/vanilla/node_modules/source-map-js/lib/source-node.js +413 -0
  156. package/templates/vanilla/node_modules/source-map-js/lib/util.js +594 -0
  157. package/templates/vanilla/node_modules/source-map-js/package.json +71 -0
  158. package/templates/vanilla/node_modules/source-map-js/source-map.d.ts +104 -0
  159. package/templates/vanilla/node_modules/source-map-js/source-map.js +8 -0
  160. package/templates/vanilla/node_modules/vite/LICENSE.md +3396 -0
  161. package/templates/vanilla/node_modules/vite/README.md +20 -0
  162. package/templates/vanilla/node_modules/vite/bin/openChrome.applescript +95 -0
  163. package/templates/vanilla/node_modules/vite/bin/vite.js +61 -0
  164. package/templates/vanilla/node_modules/vite/client.d.ts +281 -0
  165. package/templates/vanilla/node_modules/vite/dist/client/client.mjs +725 -0
  166. package/templates/vanilla/node_modules/vite/dist/client/client.mjs.map +1 -0
  167. package/templates/vanilla/node_modules/vite/dist/client/env.mjs +30 -0
  168. package/templates/vanilla/node_modules/vite/dist/client/env.mjs.map +1 -0
  169. package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-7ec6f216.js +914 -0
  170. package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-827b23df.js +66713 -0
  171. package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-c423598f.js +561 -0
  172. package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-f0c7dae0.js +7930 -0
  173. package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-f1e8587f.js +7646 -0
  174. package/templates/vanilla/node_modules/vite/dist/node/cli.js +929 -0
  175. package/templates/vanilla/node_modules/vite/dist/node/constants.js +130 -0
  176. package/templates/vanilla/node_modules/vite/dist/node/index.d.ts +3548 -0
  177. package/templates/vanilla/node_modules/vite/dist/node/index.js +158 -0
  178. package/templates/vanilla/node_modules/vite/dist/node-cjs/publicUtils.cjs +4555 -0
  179. package/templates/vanilla/node_modules/vite/index.cjs +34 -0
  180. package/templates/vanilla/node_modules/vite/package.json +173 -0
  181. package/templates/vanilla/node_modules/vite/types/customEvent.d.ts +35 -0
  182. package/templates/vanilla/node_modules/vite/types/hmrPayload.d.ts +61 -0
  183. package/templates/vanilla/node_modules/vite/types/hot.d.ts +32 -0
  184. package/templates/vanilla/node_modules/vite/types/importGlob.d.ts +97 -0
  185. package/templates/vanilla/node_modules/vite/types/importMeta.d.ts +26 -0
  186. package/templates/vanilla/node_modules/vite/types/metadata.d.ts +10 -0
  187. package/templates/vanilla/node_modules/vite/types/package.json +4 -0
  188. package/templates/vanilla/package-lock.json +589 -0
  189. package/templates/vanilla/package.json +17 -0
  190. package/templates/vanilla/src/components/App.js +60 -0
  191. package/templates/vanilla/src/components/Card.js +21 -0
  192. package/templates/vanilla/src/components/Hero.js +15 -0
  193. package/templates/vanilla/src/components/InteractiveDemo.js +59 -0
  194. package/templates/vanilla/src/main.js +9 -0
  195. package/templates/vanilla/src/style/main.css +172 -0
  196. package/templates/vanilla/vite.config.js +8 -0
  197. package/templates/web3/.env.example +15 -0
  198. package/templates/web3/.github/workflows/deploy.yml +38 -0
  199. package/templates/web3/README.md +33 -0
  200. package/templates/web3/contracts/foundry.toml +11 -0
  201. package/templates/web3/contracts/script/Deploy.s.sol +13 -0
  202. package/templates/web3/contracts/src/Counter.sol +21 -0
  203. package/templates/web3/index.html +13 -0
  204. package/templates/web3/package.json +25 -0
  205. package/templates/web3/scripts/chain-start.mjs +305 -0
  206. package/templates/web3/scripts/chain-stop.mjs +34 -0
  207. package/templates/web3/scripts/deploy.mjs +155 -0
  208. package/templates/web3/scripts/setup.mjs +42 -0
  209. package/templates/web3/src/components/App.js +49 -0
  210. package/templates/web3/src/components/CounterCard.js +111 -0
  211. package/templates/web3/src/main.js +54 -0
  212. package/templates/web3/src/style/main.css +345 -0
  213. package/templates/web3/vite.config.js +29 -0
@@ -0,0 +1,611 @@
1
+ 'use strict'
2
+
3
+ let AtRule = require('./at-rule')
4
+ let Comment = require('./comment')
5
+ let Declaration = require('./declaration')
6
+ let Root = require('./root')
7
+ let Rule = require('./rule')
8
+ let tokenizer = require('./tokenize')
9
+
10
+ const SAFE_COMMENT_NEIGHBOR = {
11
+ empty: true,
12
+ space: true
13
+ }
14
+
15
+ function findLastWithPosition(tokens) {
16
+ for (let i = tokens.length - 1; i >= 0; i--) {
17
+ let token = tokens[i]
18
+ let pos = token[3] || token[2]
19
+ if (pos) return pos
20
+ }
21
+ }
22
+
23
+ class Parser {
24
+ constructor(input) {
25
+ this.input = input
26
+
27
+ this.root = new Root()
28
+ this.current = this.root
29
+ this.spaces = ''
30
+ this.semicolon = false
31
+
32
+ this.createTokenizer()
33
+ this.root.source = { input, start: { column: 1, line: 1, offset: 0 } }
34
+ }
35
+
36
+ atrule(token) {
37
+ let node = new AtRule()
38
+ node.name = token[1].slice(1)
39
+ if (node.name === '') {
40
+ this.unnamedAtrule(node, token)
41
+ }
42
+ this.init(node, token[2])
43
+
44
+ let type
45
+ let prev
46
+ let shift
47
+ let last = false
48
+ let open = false
49
+ let params = []
50
+ let brackets = []
51
+
52
+ while (!this.tokenizer.endOfFile()) {
53
+ token = this.tokenizer.nextToken()
54
+ type = token[0]
55
+
56
+ if (type === '(' || type === '[') {
57
+ brackets.push(type === '(' ? ')' : ']')
58
+ } else if (type === '{' && brackets.length > 0) {
59
+ brackets.push('}')
60
+ } else if (type === brackets[brackets.length - 1]) {
61
+ brackets.pop()
62
+ }
63
+
64
+ if (brackets.length === 0) {
65
+ if (type === ';') {
66
+ node.source.end = this.getPosition(token[2])
67
+ node.source.end.offset++
68
+ this.semicolon = true
69
+ break
70
+ } else if (type === '{') {
71
+ open = true
72
+ break
73
+ } else if (type === '}') {
74
+ if (params.length > 0) {
75
+ shift = params.length - 1
76
+ prev = params[shift]
77
+ while (prev && prev[0] === 'space') {
78
+ prev = params[--shift]
79
+ }
80
+ if (prev) {
81
+ node.source.end = this.getPosition(prev[3] || prev[2])
82
+ node.source.end.offset++
83
+ }
84
+ }
85
+ this.end(token)
86
+ break
87
+ } else {
88
+ params.push(token)
89
+ }
90
+ } else {
91
+ params.push(token)
92
+ }
93
+
94
+ if (this.tokenizer.endOfFile()) {
95
+ last = true
96
+ break
97
+ }
98
+ }
99
+
100
+ node.raws.between = this.spacesAndCommentsFromEnd(params)
101
+ if (params.length) {
102
+ node.raws.afterName = this.spacesAndCommentsFromStart(params)
103
+ this.raw(node, 'params', params)
104
+ if (last) {
105
+ token = params[params.length - 1]
106
+ node.source.end = this.getPosition(token[3] || token[2])
107
+ node.source.end.offset++
108
+ this.spaces = node.raws.between
109
+ node.raws.between = ''
110
+ }
111
+ } else {
112
+ node.raws.afterName = ''
113
+ node.params = ''
114
+ }
115
+
116
+ if (open) {
117
+ node.nodes = []
118
+ this.current = node
119
+ }
120
+ }
121
+
122
+ checkMissedSemicolon(tokens) {
123
+ let colon = this.colon(tokens)
124
+ if (colon === false) return
125
+
126
+ let founded = 0
127
+ let token
128
+ for (let j = colon - 1; j >= 0; j--) {
129
+ token = tokens[j]
130
+ if (token[0] !== 'space') {
131
+ founded += 1
132
+ if (founded === 2) break
133
+ }
134
+ }
135
+ // If the token is a word, e.g. `!important`, `red` or any other valid property's value.
136
+ // Then we need to return the colon after that word token. [3] is the "end" colon of that word.
137
+ // And because we need it after that one we do +1 to get the next one.
138
+ throw this.input.error(
139
+ 'Missed semicolon',
140
+ token[0] === 'word' ? token[3] + 1 : token[2]
141
+ )
142
+ }
143
+
144
+ colon(tokens) {
145
+ let brackets = 0
146
+ let prev, token, type
147
+ for (let [i, element] of tokens.entries()) {
148
+ token = element
149
+ type = token[0]
150
+
151
+ if (type === '(') {
152
+ brackets += 1
153
+ }
154
+ if (type === ')') {
155
+ brackets -= 1
156
+ }
157
+ if (brackets === 0 && type === ':') {
158
+ if (!prev) {
159
+ this.doubleColon(token)
160
+ } else if (prev[0] === 'word' && prev[1] === 'progid') {
161
+ continue
162
+ } else {
163
+ return i
164
+ }
165
+ }
166
+
167
+ prev = token
168
+ }
169
+ return false
170
+ }
171
+
172
+ comment(token) {
173
+ let node = new Comment()
174
+ this.init(node, token[2])
175
+ node.source.end = this.getPosition(token[3] || token[2])
176
+ node.source.end.offset++
177
+
178
+ let text = token[1].slice(2, -2)
179
+ if (/^\s*$/.test(text)) {
180
+ node.text = ''
181
+ node.raws.left = text
182
+ node.raws.right = ''
183
+ } else {
184
+ let match = text.match(/^(\s*)([^]*\S)(\s*)$/)
185
+ node.text = match[2]
186
+ node.raws.left = match[1]
187
+ node.raws.right = match[3]
188
+ }
189
+ }
190
+
191
+ createTokenizer() {
192
+ this.tokenizer = tokenizer(this.input)
193
+ }
194
+
195
+ decl(tokens, customProperty) {
196
+ let node = new Declaration()
197
+ this.init(node, tokens[0][2])
198
+
199
+ let last = tokens[tokens.length - 1]
200
+ if (last[0] === ';') {
201
+ this.semicolon = true
202
+ tokens.pop()
203
+ }
204
+
205
+ node.source.end = this.getPosition(
206
+ last[3] || last[2] || findLastWithPosition(tokens)
207
+ )
208
+ node.source.end.offset++
209
+
210
+ while (tokens[0][0] !== 'word') {
211
+ if (tokens.length === 1) this.unknownWord(tokens)
212
+ node.raws.before += tokens.shift()[1]
213
+ }
214
+ node.source.start = this.getPosition(tokens[0][2])
215
+
216
+ node.prop = ''
217
+ while (tokens.length) {
218
+ let type = tokens[0][0]
219
+ if (type === ':' || type === 'space' || type === 'comment') {
220
+ break
221
+ }
222
+ node.prop += tokens.shift()[1]
223
+ }
224
+
225
+ node.raws.between = ''
226
+
227
+ let token
228
+ while (tokens.length) {
229
+ token = tokens.shift()
230
+
231
+ if (token[0] === ':') {
232
+ node.raws.between += token[1]
233
+ break
234
+ } else {
235
+ if (token[0] === 'word' && /\w/.test(token[1])) {
236
+ this.unknownWord([token])
237
+ }
238
+ node.raws.between += token[1]
239
+ }
240
+ }
241
+
242
+ if (node.prop[0] === '_' || node.prop[0] === '*') {
243
+ node.raws.before += node.prop[0]
244
+ node.prop = node.prop.slice(1)
245
+ }
246
+
247
+ let firstSpaces = []
248
+ let next
249
+ while (tokens.length) {
250
+ next = tokens[0][0]
251
+ if (next !== 'space' && next !== 'comment') break
252
+ firstSpaces.push(tokens.shift())
253
+ }
254
+
255
+ this.precheckMissedSemicolon(tokens)
256
+
257
+ for (let i = tokens.length - 1; i >= 0; i--) {
258
+ token = tokens[i]
259
+ if (token[1].toLowerCase() === '!important') {
260
+ node.important = true
261
+ let string = this.stringFrom(tokens, i)
262
+ string = this.spacesFromEnd(tokens) + string
263
+ if (string !== ' !important') node.raws.important = string
264
+ break
265
+ } else if (token[1].toLowerCase() === 'important') {
266
+ let cache = tokens.slice(0)
267
+ let str = ''
268
+ for (let j = i; j > 0; j--) {
269
+ let type = cache[j][0]
270
+ if (str.trim().startsWith('!') && type !== 'space') {
271
+ break
272
+ }
273
+ str = cache.pop()[1] + str
274
+ }
275
+ if (str.trim().startsWith('!')) {
276
+ node.important = true
277
+ node.raws.important = str
278
+ tokens = cache
279
+ }
280
+ }
281
+
282
+ if (token[0] !== 'space' && token[0] !== 'comment') {
283
+ break
284
+ }
285
+ }
286
+
287
+ let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment')
288
+
289
+ if (hasWord) {
290
+ node.raws.between += firstSpaces.map(i => i[1]).join('')
291
+ firstSpaces = []
292
+ }
293
+ this.raw(node, 'value', firstSpaces.concat(tokens), customProperty)
294
+
295
+ if (node.value.includes(':') && !customProperty) {
296
+ this.checkMissedSemicolon(tokens)
297
+ }
298
+ }
299
+
300
+ doubleColon(token) {
301
+ throw this.input.error(
302
+ 'Double colon',
303
+ { offset: token[2] },
304
+ { offset: token[2] + token[1].length }
305
+ )
306
+ }
307
+
308
+ emptyRule(token) {
309
+ let node = new Rule()
310
+ this.init(node, token[2])
311
+ node.selector = ''
312
+ node.raws.between = ''
313
+ this.current = node
314
+ }
315
+
316
+ end(token) {
317
+ if (this.current.nodes && this.current.nodes.length) {
318
+ this.current.raws.semicolon = this.semicolon
319
+ }
320
+ this.semicolon = false
321
+
322
+ this.current.raws.after = (this.current.raws.after || '') + this.spaces
323
+ this.spaces = ''
324
+
325
+ if (this.current.parent) {
326
+ this.current.source.end = this.getPosition(token[2])
327
+ this.current.source.end.offset++
328
+ this.current = this.current.parent
329
+ } else {
330
+ this.unexpectedClose(token)
331
+ }
332
+ }
333
+
334
+ endFile() {
335
+ if (this.current.parent) this.unclosedBlock()
336
+ if (this.current.nodes && this.current.nodes.length) {
337
+ this.current.raws.semicolon = this.semicolon
338
+ }
339
+ this.current.raws.after = (this.current.raws.after || '') + this.spaces
340
+ this.root.source.end = this.getPosition(this.tokenizer.position())
341
+ }
342
+
343
+ freeSemicolon(token) {
344
+ this.spaces += token[1]
345
+ if (this.current.nodes) {
346
+ let prev = this.current.nodes[this.current.nodes.length - 1]
347
+ if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {
348
+ prev.raws.ownSemicolon = this.spaces
349
+ this.spaces = ''
350
+ prev.source.end = this.getPosition(token[2])
351
+ prev.source.end.offset += prev.raws.ownSemicolon.length
352
+ }
353
+ }
354
+ }
355
+
356
+ // Helpers
357
+
358
+ getPosition(offset) {
359
+ let pos = this.input.fromOffset(offset)
360
+ return {
361
+ column: pos.col,
362
+ line: pos.line,
363
+ offset
364
+ }
365
+ }
366
+
367
+ init(node, offset) {
368
+ this.current.push(node)
369
+ node.source = {
370
+ input: this.input,
371
+ start: this.getPosition(offset)
372
+ }
373
+ node.raws.before = this.spaces
374
+ this.spaces = ''
375
+ if (node.type !== 'comment') this.semicolon = false
376
+ }
377
+
378
+ other(start) {
379
+ let end = false
380
+ let type = null
381
+ let colon = false
382
+ let bracket = null
383
+ let brackets = []
384
+ let customProperty = start[1].startsWith('--')
385
+
386
+ let tokens = []
387
+ let token = start
388
+ while (token) {
389
+ type = token[0]
390
+ tokens.push(token)
391
+
392
+ if (type === '(' || type === '[') {
393
+ if (!bracket) bracket = token
394
+ brackets.push(type === '(' ? ')' : ']')
395
+ } else if (customProperty && colon && type === '{') {
396
+ if (!bracket) bracket = token
397
+ brackets.push('}')
398
+ } else if (brackets.length === 0) {
399
+ if (type === ';') {
400
+ if (colon) {
401
+ this.decl(tokens, customProperty)
402
+ return
403
+ } else {
404
+ break
405
+ }
406
+ } else if (type === '{') {
407
+ this.rule(tokens)
408
+ return
409
+ } else if (type === '}') {
410
+ this.tokenizer.back(tokens.pop())
411
+ end = true
412
+ break
413
+ } else if (type === ':') {
414
+ colon = true
415
+ }
416
+ } else if (type === brackets[brackets.length - 1]) {
417
+ brackets.pop()
418
+ if (brackets.length === 0) bracket = null
419
+ }
420
+
421
+ token = this.tokenizer.nextToken()
422
+ }
423
+
424
+ if (this.tokenizer.endOfFile()) end = true
425
+ if (brackets.length > 0) this.unclosedBracket(bracket)
426
+
427
+ if (end && colon) {
428
+ if (!customProperty) {
429
+ while (tokens.length) {
430
+ token = tokens[tokens.length - 1][0]
431
+ if (token !== 'space' && token !== 'comment') break
432
+ this.tokenizer.back(tokens.pop())
433
+ }
434
+ }
435
+ this.decl(tokens, customProperty)
436
+ } else {
437
+ this.unknownWord(tokens)
438
+ }
439
+ }
440
+
441
+ parse() {
442
+ let token
443
+ while (!this.tokenizer.endOfFile()) {
444
+ token = this.tokenizer.nextToken()
445
+
446
+ switch (token[0]) {
447
+ case 'space':
448
+ this.spaces += token[1]
449
+ break
450
+
451
+ case ';':
452
+ this.freeSemicolon(token)
453
+ break
454
+
455
+ case '}':
456
+ this.end(token)
457
+ break
458
+
459
+ case 'comment':
460
+ this.comment(token)
461
+ break
462
+
463
+ case 'at-word':
464
+ this.atrule(token)
465
+ break
466
+
467
+ case '{':
468
+ this.emptyRule(token)
469
+ break
470
+
471
+ default:
472
+ this.other(token)
473
+ break
474
+ }
475
+ }
476
+ this.endFile()
477
+ }
478
+
479
+ precheckMissedSemicolon(/* tokens */) {
480
+ // Hook for Safe Parser
481
+ }
482
+
483
+ raw(node, prop, tokens, customProperty) {
484
+ let token, type
485
+ let length = tokens.length
486
+ let value = ''
487
+ let clean = true
488
+ let next, prev
489
+
490
+ for (let i = 0; i < length; i += 1) {
491
+ token = tokens[i]
492
+ type = token[0]
493
+ if (type === 'space' && i === length - 1 && !customProperty) {
494
+ clean = false
495
+ } else if (type === 'comment') {
496
+ prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty'
497
+ next = tokens[i + 1] ? tokens[i + 1][0] : 'empty'
498
+ if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {
499
+ if (value.slice(-1) === ',') {
500
+ clean = false
501
+ } else {
502
+ value += token[1]
503
+ }
504
+ } else {
505
+ clean = false
506
+ }
507
+ } else {
508
+ value += token[1]
509
+ }
510
+ }
511
+ if (!clean) {
512
+ let raw = tokens.reduce((all, i) => all + i[1], '')
513
+ node.raws[prop] = { raw, value }
514
+ }
515
+ node[prop] = value
516
+ }
517
+
518
+ rule(tokens) {
519
+ tokens.pop()
520
+
521
+ let node = new Rule()
522
+ this.init(node, tokens[0][2])
523
+
524
+ node.raws.between = this.spacesAndCommentsFromEnd(tokens)
525
+ this.raw(node, 'selector', tokens)
526
+ this.current = node
527
+ }
528
+
529
+ spacesAndCommentsFromEnd(tokens) {
530
+ let lastTokenType
531
+ let spaces = ''
532
+ while (tokens.length) {
533
+ lastTokenType = tokens[tokens.length - 1][0]
534
+ if (lastTokenType !== 'space' && lastTokenType !== 'comment') break
535
+ spaces = tokens.pop()[1] + spaces
536
+ }
537
+ return spaces
538
+ }
539
+
540
+ // Errors
541
+
542
+ spacesAndCommentsFromStart(tokens) {
543
+ let next
544
+ let spaces = ''
545
+ while (tokens.length) {
546
+ next = tokens[0][0]
547
+ if (next !== 'space' && next !== 'comment') break
548
+ spaces += tokens.shift()[1]
549
+ }
550
+ return spaces
551
+ }
552
+
553
+ spacesFromEnd(tokens) {
554
+ let lastTokenType
555
+ let spaces = ''
556
+ while (tokens.length) {
557
+ lastTokenType = tokens[tokens.length - 1][0]
558
+ if (lastTokenType !== 'space') break
559
+ spaces = tokens.pop()[1] + spaces
560
+ }
561
+ return spaces
562
+ }
563
+
564
+ stringFrom(tokens, from) {
565
+ let result = ''
566
+ for (let i = from; i < tokens.length; i++) {
567
+ result += tokens[i][1]
568
+ }
569
+ tokens.splice(from, tokens.length - from)
570
+ return result
571
+ }
572
+
573
+ unclosedBlock() {
574
+ let pos = this.current.source.start
575
+ throw this.input.error('Unclosed block', pos.line, pos.column)
576
+ }
577
+
578
+ unclosedBracket(bracket) {
579
+ throw this.input.error(
580
+ 'Unclosed bracket',
581
+ { offset: bracket[2] },
582
+ { offset: bracket[2] + 1 }
583
+ )
584
+ }
585
+
586
+ unexpectedClose(token) {
587
+ throw this.input.error(
588
+ 'Unexpected }',
589
+ { offset: token[2] },
590
+ { offset: token[2] + 1 }
591
+ )
592
+ }
593
+
594
+ unknownWord(tokens) {
595
+ throw this.input.error(
596
+ 'Unknown word ' + tokens[0][1],
597
+ { offset: tokens[0][2] },
598
+ { offset: tokens[0][2] + tokens[0][1].length }
599
+ )
600
+ }
601
+
602
+ unnamedAtrule(node, token) {
603
+ throw this.input.error(
604
+ 'At-rule without name',
605
+ { offset: token[2] },
606
+ { offset: token[2] + token[1].length }
607
+ )
608
+ }
609
+ }
610
+
611
+ module.exports = Parser
@@ -0,0 +1,69 @@
1
+ export {
2
+ // Type-only exports
3
+ AcceptedPlugin,
4
+
5
+ AnyNode,
6
+ atRule,
7
+ AtRule,
8
+ AtRuleProps,
9
+ Builder,
10
+ ChildNode,
11
+ ChildProps,
12
+ comment,
13
+ Comment,
14
+ CommentProps,
15
+ Container,
16
+ ContainerProps,
17
+ CssSyntaxError,
18
+ decl,
19
+ Declaration,
20
+ DeclarationProps,
21
+ // postcss function / namespace
22
+ default,
23
+ document,
24
+ Document,
25
+ DocumentProps,
26
+ FilePosition,
27
+ fromJSON,
28
+ Helpers,
29
+ Input,
30
+
31
+ JSONHydrator,
32
+ // This is a class, but it’s not re-exported. That’s why it’s exported as type-only here.
33
+ type LazyResult,
34
+ list,
35
+ Message,
36
+ Node,
37
+ NodeErrorOptions,
38
+ NodeProps,
39
+ OldPlugin,
40
+ parse,
41
+ Parser,
42
+ // @ts-expect-error This value exists, but it’s untyped.
43
+ plugin,
44
+ Plugin,
45
+ PluginCreator,
46
+ Position,
47
+ Postcss,
48
+ ProcessOptions,
49
+ Processor,
50
+ Result,
51
+ root,
52
+ Root,
53
+ RootProps,
54
+ rule,
55
+ Rule,
56
+ RuleProps,
57
+ Source,
58
+ SourceMap,
59
+ SourceMapOptions,
60
+ Stringifier,
61
+ // Value exports from postcss.mjs
62
+ stringify,
63
+ Syntax,
64
+ TransformCallback,
65
+ Transformer,
66
+ Warning,
67
+
68
+ WarningOptions
69
+ } from './postcss.js'