@xpert-ai/plugin-motion 0.1.0 → 0.3.0

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 (157) hide show
  1. package/.xpertai-plugin/plugin.json +16 -6
  2. package/README.md +19 -5
  3. package/assets/upstream/UPSTREAM-BASELINE.md +27 -0
  4. package/assets/upstream/app/data/reicon-LICENSE.txt +21 -0
  5. package/dist/assets/upstream/UPSTREAM-BASELINE.md +27 -0
  6. package/dist/assets/upstream/app/data/reicon-LICENSE.txt +21 -0
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +18 -9
  10. package/dist/index.js.map +1 -1
  11. package/dist/lib/constants.d.ts +7 -1
  12. package/dist/lib/constants.d.ts.map +1 -1
  13. package/dist/lib/constants.js +7 -0
  14. package/dist/lib/constants.js.map +1 -1
  15. package/dist/lib/entities/motion-export.entity.d.ts +13 -1
  16. package/dist/lib/entities/motion-export.entity.d.ts.map +1 -1
  17. package/dist/lib/entities/motion-export.entity.js +49 -1
  18. package/dist/lib/entities/motion-export.entity.js.map +1 -1
  19. package/dist/lib/entities/motion-project-version.entity.d.ts +3 -1
  20. package/dist/lib/entities/motion-project-version.entity.d.ts.map +1 -1
  21. package/dist/lib/entities/motion-project-version.entity.js +8 -0
  22. package/dist/lib/entities/motion-project-version.entity.js.map +1 -1
  23. package/dist/lib/entities/motion-project.entity.d.ts +4 -1
  24. package/dist/lib/entities/motion-project.entity.d.ts.map +1 -1
  25. package/dist/lib/entities/motion-project.entity.js +8 -0
  26. package/dist/lib/entities/motion-project.entity.js.map +1 -1
  27. package/dist/lib/hyperframes-composition.d.ts +16 -0
  28. package/dist/lib/hyperframes-composition.d.ts.map +1 -0
  29. package/dist/lib/hyperframes-composition.js +106 -0
  30. package/dist/lib/hyperframes-composition.js.map +1 -0
  31. package/dist/lib/motion-agent-response.d.ts +8 -0
  32. package/dist/lib/motion-agent-response.d.ts.map +1 -1
  33. package/dist/lib/motion-agent-response.js +13 -0
  34. package/dist/lib/motion-agent-response.js.map +1 -1
  35. package/dist/lib/motion-render.processor.d.ts +9 -0
  36. package/dist/lib/motion-render.processor.d.ts.map +1 -0
  37. package/dist/lib/motion-render.processor.js +25 -0
  38. package/dist/lib/motion-render.processor.js.map +1 -0
  39. package/dist/lib/motion-view.provider.d.ts.map +1 -1
  40. package/dist/lib/motion-view.provider.js +31 -2
  41. package/dist/lib/motion-view.provider.js.map +1 -1
  42. package/dist/lib/motion.middleware.d.ts.map +1 -1
  43. package/dist/lib/motion.middleware.js +20 -6
  44. package/dist/lib/motion.middleware.js.map +1 -1
  45. package/dist/lib/motion.plugin.d.ts.map +1 -1
  46. package/dist/lib/motion.plugin.js +2 -1
  47. package/dist/lib/motion.plugin.js.map +1 -1
  48. package/dist/lib/motion.service.d.ts +174 -3
  49. package/dist/lib/motion.service.d.ts.map +1 -1
  50. package/dist/lib/motion.service.js +376 -19
  51. package/dist/lib/motion.service.js.map +1 -1
  52. package/dist/lib/remote-components/motion-workbench/app.css +1 -1
  53. package/dist/lib/remote-components/motion-workbench/app.js +555 -946
  54. package/dist/lib/types.d.ts +26 -1
  55. package/dist/lib/types.d.ts.map +1 -1
  56. package/dist/lib/types.js.map +1 -1
  57. package/dist/sandbox-actions/hyperframes-render/action.json +10 -0
  58. package/dist/sandbox-actions/hyperframes-render/bundle/runner.mjs +188 -0
  59. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@esbuild/darwin-arm64/README.md +3 -0
  60. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@esbuild/darwin-arm64/bin/esbuild +0 -0
  61. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@esbuild/darwin-arm64/package.json +20 -0
  62. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@esbuild/linux-x64/README.md +3 -0
  63. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@esbuild/linux-x64/bin/esbuild +0 -0
  64. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@esbuild/linux-x64/package.json +20 -0
  65. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@hyperframes/producer/LICENSE +190 -0
  66. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@hyperframes/producer/README.md +156 -0
  67. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@hyperframes/producer/dist/distributed.js +156122 -0
  68. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@hyperframes/producer/dist/hyperframe.manifest.json +22 -0
  69. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@hyperframes/producer/dist/hyperframe.runtime.iife.js +356 -0
  70. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@hyperframes/producer/dist/index.js +169375 -0
  71. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@hyperframes/producer/dist/public-server.js +167618 -0
  72. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@hyperframes/producer/dist/services/healthWorkerThread.js +53 -0
  73. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@hyperframes/producer/dist/services/shaderTransitionWorker.js +606 -0
  74. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/@hyperframes/producer/package.json +109 -0
  75. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/esbuild/LICENSE.md +21 -0
  76. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/esbuild/README.md +3 -0
  77. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/esbuild/bin/esbuild +0 -0
  78. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/esbuild/install.js +289 -0
  79. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/esbuild/lib/main.js +2532 -0
  80. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/esbuild/package.json +49 -0
  81. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/LICENSE +20 -0
  82. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/README.md +36 -0
  83. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/async/index.browser.cjs +42 -0
  84. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/async/index.browser.js +42 -0
  85. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/async/index.cjs +44 -0
  86. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/async/index.js +44 -0
  87. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/async/index.native.js +35 -0
  88. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/async/package.json +12 -0
  89. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/bin/nanoid.cjs +55 -0
  90. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/index.browser.cjs +44 -0
  91. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/index.browser.js +44 -0
  92. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/index.cjs +57 -0
  93. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/index.d.cts +91 -0
  94. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/index.js +62 -0
  95. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/nanoid.js +1 -0
  96. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/non-secure/index.cjs +24 -0
  97. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/non-secure/index.js +24 -0
  98. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/non-secure/package.json +6 -0
  99. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/package.json +89 -0
  100. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/url-alphabet/index.cjs +4 -0
  101. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/url-alphabet/index.js +4 -0
  102. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/nanoid/url-alphabet/package.json +6 -0
  103. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/picocolors/LICENSE +15 -0
  104. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/picocolors/README.md +21 -0
  105. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/picocolors/package.json +25 -0
  106. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/picocolors/picocolors.browser.js +4 -0
  107. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/picocolors/picocolors.js +75 -0
  108. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/LICENSE +20 -0
  109. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/README.md +25 -0
  110. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/at-rule.js +25 -0
  111. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/comment.js +13 -0
  112. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/container.js +447 -0
  113. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/css-syntax-error.js +133 -0
  114. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/declaration.js +24 -0
  115. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/document.js +33 -0
  116. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/fromJSON.js +68 -0
  117. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/input.js +276 -0
  118. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/lazy-result.js +563 -0
  119. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/list.js +58 -0
  120. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/map-generator.js +376 -0
  121. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/no-work-result.js +137 -0
  122. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/node.js +456 -0
  123. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/parse.js +42 -0
  124. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/parser.js +618 -0
  125. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/postcss.d.mts +66 -0
  126. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/postcss.js +101 -0
  127. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/postcss.mjs +30 -0
  128. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/previous-map.js +161 -0
  129. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/processor.js +67 -0
  130. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/result.js +42 -0
  131. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/root.js +61 -0
  132. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/rule.js +27 -0
  133. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/stringifier.js +374 -0
  134. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/stringify.js +11 -0
  135. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/symbols.js +5 -0
  136. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/terminal-highlight.js +70 -0
  137. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/tokenize.js +270 -0
  138. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/warn-once.js +13 -0
  139. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/lib/warning.js +37 -0
  140. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/postcss/package.json +88 -0
  141. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/LICENSE +28 -0
  142. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/README.md +765 -0
  143. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/lib/array-set.js +121 -0
  144. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/lib/base64-vlq.js +140 -0
  145. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/lib/base64.js +67 -0
  146. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/lib/binary-search.js +111 -0
  147. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/lib/mapping-list.js +79 -0
  148. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/lib/quick-sort.js +132 -0
  149. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/lib/source-map-consumer.js +1188 -0
  150. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/lib/source-map-generator.js +444 -0
  151. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/lib/source-node.js +413 -0
  152. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/lib/util.js +594 -0
  153. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/package.json +71 -0
  154. package/dist/sandbox-actions/hyperframes-render/bundle/runtime-modules/source-map-js/source-map.js +8 -0
  155. package/dist/xpert-motion-assistant.yaml +240 -37
  156. package/package.json +19 -10
  157. package/skills/motion-agent-skill/SKILL.md +19 -7
@@ -0,0 +1,563 @@
1
+ 'use strict'
2
+
3
+ let Container = require('./container')
4
+ let Document = require('./document')
5
+ let MapGenerator = require('./map-generator')
6
+ let parse = require('./parse')
7
+ let Result = require('./result')
8
+ let Root = require('./root')
9
+ let stringify = require('./stringify')
10
+ let { isClean, my } = require('./symbols')
11
+ let warnOnce = require('./warn-once')
12
+
13
+ const TYPE_TO_CLASS_NAME = {
14
+ atrule: 'AtRule',
15
+ comment: 'Comment',
16
+ decl: 'Declaration',
17
+ document: 'Document',
18
+ root: 'Root',
19
+ rule: 'Rule'
20
+ }
21
+
22
+ const PLUGIN_PROPS = {
23
+ AtRule: true,
24
+ AtRuleExit: true,
25
+ Comment: true,
26
+ CommentExit: true,
27
+ Declaration: true,
28
+ DeclarationExit: true,
29
+ Document: true,
30
+ DocumentExit: true,
31
+ Once: true,
32
+ OnceExit: true,
33
+ postcssPlugin: true,
34
+ prepare: true,
35
+ Root: true,
36
+ RootExit: true,
37
+ Rule: true,
38
+ RuleExit: true
39
+ }
40
+
41
+ const NOT_VISITORS = {
42
+ Once: true,
43
+ postcssPlugin: true,
44
+ prepare: true
45
+ }
46
+
47
+ const CHILDREN = 0
48
+
49
+ function isPromise(obj) {
50
+ return typeof obj === 'object' && typeof obj.then === 'function'
51
+ }
52
+
53
+ function getEvents(node) {
54
+ let key = false
55
+ let type = TYPE_TO_CLASS_NAME[node.type]
56
+ if (node.type === 'decl') {
57
+ key = node.prop.toLowerCase()
58
+ } else if (node.type === 'atrule') {
59
+ key = node.name.toLowerCase()
60
+ }
61
+
62
+ if (key && node.append) {
63
+ return [
64
+ type,
65
+ type + '-' + key,
66
+ CHILDREN,
67
+ type + 'Exit',
68
+ type + 'Exit-' + key
69
+ ]
70
+ } else if (key) {
71
+ return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]
72
+ } else if (node.append) {
73
+ return [type, CHILDREN, type + 'Exit']
74
+ } else {
75
+ return [type, type + 'Exit']
76
+ }
77
+ }
78
+
79
+ function toStack(node) {
80
+ let events
81
+ if (node.type === 'document') {
82
+ events = ['Document', CHILDREN, 'DocumentExit']
83
+ } else if (node.type === 'root') {
84
+ events = ['Root', CHILDREN, 'RootExit']
85
+ } else {
86
+ events = getEvents(node)
87
+ }
88
+
89
+ return {
90
+ eventIndex: 0,
91
+ events,
92
+ iterator: 0,
93
+ node,
94
+ visitorIndex: 0,
95
+ visitors: []
96
+ }
97
+ }
98
+
99
+ function cleanMarks(node) {
100
+ node[isClean] = false
101
+ if (node.nodes) node.nodes.forEach(i => cleanMarks(i))
102
+ return node
103
+ }
104
+
105
+ let postcss = {}
106
+
107
+ class LazyResult {
108
+ get content() {
109
+ return this.stringify().content
110
+ }
111
+
112
+ get css() {
113
+ return this.stringify().css
114
+ }
115
+
116
+ get map() {
117
+ return this.stringify().map
118
+ }
119
+
120
+ get messages() {
121
+ return this.sync().messages
122
+ }
123
+
124
+ get opts() {
125
+ return this.result.opts
126
+ }
127
+
128
+ get processor() {
129
+ return this.result.processor
130
+ }
131
+
132
+ get root() {
133
+ return this.sync().root
134
+ }
135
+
136
+ get [Symbol.toStringTag]() {
137
+ return 'LazyResult'
138
+ }
139
+
140
+ constructor(processor, css, opts) {
141
+ this.stringified = false
142
+ this.processed = false
143
+
144
+ let root
145
+ if (
146
+ typeof css === 'object' &&
147
+ css !== null &&
148
+ (css.type === 'root' || css.type === 'document')
149
+ ) {
150
+ root = cleanMarks(css)
151
+ } else if (css instanceof LazyResult || css instanceof Result) {
152
+ root = cleanMarks(css.root)
153
+ if (css.map) {
154
+ if (typeof opts.map === 'undefined') opts.map = {}
155
+ if (!opts.map.inline) opts.map.inline = false
156
+ opts.map.prev = css.map
157
+ }
158
+ } else {
159
+ let parser = parse
160
+ if (opts.syntax) parser = opts.syntax.parse
161
+ if (opts.parser) parser = opts.parser
162
+ if (parser.parse) parser = parser.parse
163
+
164
+ try {
165
+ root = parser(css, opts)
166
+ } catch (error) {
167
+ this.processed = true
168
+ this.error = error
169
+ }
170
+
171
+ if (root && !root[my]) {
172
+ /* c8 ignore next 2 */
173
+ Container.rebuild(root)
174
+ }
175
+ }
176
+
177
+ this.result = new Result(processor, root, opts)
178
+ this.helpers = { ...postcss, postcss, result: this.result }
179
+ this.plugins = this.processor.plugins.map(plugin => {
180
+ if (typeof plugin === 'object' && plugin.prepare) {
181
+ return { ...plugin, ...plugin.prepare(this.result) }
182
+ } else {
183
+ return plugin
184
+ }
185
+ })
186
+ }
187
+
188
+ async() {
189
+ if (this.error) return Promise.reject(this.error)
190
+ if (this.processed) return Promise.resolve(this.result)
191
+ if (!this.processing) {
192
+ this.processing = this.runAsync()
193
+ }
194
+ return this.processing
195
+ }
196
+
197
+ catch(onRejected) {
198
+ return this.async().catch(onRejected)
199
+ }
200
+
201
+ finally(onFinally) {
202
+ return this.async().then(onFinally, onFinally)
203
+ }
204
+
205
+ getAsyncError() {
206
+ throw new Error('Use process(css).then(cb) to work with async plugins')
207
+ }
208
+
209
+ handleError(error, node) {
210
+ let plugin = this.result.lastPlugin
211
+ try {
212
+ if (node) node.addToError(error)
213
+ this.error = error
214
+ if (error.name === 'CssSyntaxError' && !error.plugin) {
215
+ error.plugin = plugin.postcssPlugin
216
+ error.setMessage()
217
+ } else if (plugin.postcssVersion) {
218
+ if (process.env.NODE_ENV !== 'production') {
219
+ let pluginName = plugin.postcssPlugin
220
+ let pluginVer = plugin.postcssVersion
221
+ let runtimeVer = this.result.processor.version
222
+ let a = pluginVer.split('.')
223
+ let b = runtimeVer.split('.')
224
+
225
+ if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {
226
+ // eslint-disable-next-line no-console
227
+ console.error(
228
+ 'Unknown error from PostCSS plugin. Your current PostCSS ' +
229
+ 'version is ' +
230
+ runtimeVer +
231
+ ', but ' +
232
+ pluginName +
233
+ ' uses ' +
234
+ pluginVer +
235
+ '. Perhaps this is the source of the error below.'
236
+ )
237
+ }
238
+ }
239
+ }
240
+ } catch (err) {
241
+ /* c8 ignore next 3 */
242
+ // eslint-disable-next-line no-console
243
+ if (console && console.error) console.error(err)
244
+ }
245
+ return error
246
+ }
247
+
248
+ prepareVisitors() {
249
+ this.listeners = {}
250
+ let add = (plugin, type, cb) => {
251
+ if (!this.listeners[type]) this.listeners[type] = []
252
+ this.listeners[type].push([plugin, cb])
253
+ }
254
+ for (let plugin of this.plugins) {
255
+ if (typeof plugin === 'object') {
256
+ for (let event in plugin) {
257
+ if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {
258
+ throw new Error(
259
+ `Unknown event ${event} in ${plugin.postcssPlugin}. ` +
260
+ `Try to update PostCSS (${this.processor.version} now).`
261
+ )
262
+ }
263
+ if (!NOT_VISITORS[event]) {
264
+ if (typeof plugin[event] === 'object') {
265
+ for (let filter in plugin[event]) {
266
+ if (filter === '*') {
267
+ add(plugin, event, plugin[event][filter])
268
+ } else {
269
+ add(
270
+ plugin,
271
+ event + '-' + filter.toLowerCase(),
272
+ plugin[event][filter]
273
+ )
274
+ }
275
+ }
276
+ } else if (typeof plugin[event] === 'function') {
277
+ add(plugin, event, plugin[event])
278
+ }
279
+ }
280
+ }
281
+ }
282
+ }
283
+ this.hasListener = Object.keys(this.listeners).length > 0
284
+ }
285
+
286
+ async runAsync() {
287
+ this.plugin = 0
288
+ for (let i = 0; i < this.plugins.length; i++) {
289
+ let plugin = this.plugins[i]
290
+ let promise = this.runOnRoot(plugin)
291
+ if (isPromise(promise)) {
292
+ try {
293
+ await promise
294
+ } catch (error) {
295
+ throw this.handleError(error)
296
+ }
297
+ }
298
+ }
299
+
300
+ this.prepareVisitors()
301
+ if (this.hasListener) {
302
+ let root = this.result.root
303
+ while (!root[isClean]) {
304
+ root[isClean] = true
305
+ let stack = [toStack(root)]
306
+ while (stack.length > 0) {
307
+ let promise = this.visitTick(stack)
308
+ if (isPromise(promise)) {
309
+ try {
310
+ await promise
311
+ } catch (e) {
312
+ let node = stack[stack.length - 1].node
313
+ throw this.handleError(e, node)
314
+ }
315
+ }
316
+ }
317
+ }
318
+
319
+ if (this.listeners.OnceExit) {
320
+ for (let [plugin, visitor] of this.listeners.OnceExit) {
321
+ this.result.lastPlugin = plugin
322
+ try {
323
+ if (root.type === 'document') {
324
+ let roots = root.nodes.map(subRoot =>
325
+ visitor(subRoot, this.helpers)
326
+ )
327
+
328
+ await Promise.all(roots)
329
+ } else {
330
+ await visitor(root, this.helpers)
331
+ }
332
+ } catch (e) {
333
+ throw this.handleError(e)
334
+ }
335
+ }
336
+ }
337
+ }
338
+
339
+ this.processed = true
340
+ return this.stringify()
341
+ }
342
+
343
+ runOnRoot(plugin) {
344
+ this.result.lastPlugin = plugin
345
+ try {
346
+ if (typeof plugin === 'object' && plugin.Once) {
347
+ if (this.result.root.type === 'document') {
348
+ let roots = this.result.root.nodes.map(root =>
349
+ plugin.Once(root, this.helpers)
350
+ )
351
+
352
+ if (isPromise(roots[0])) {
353
+ return Promise.all(roots)
354
+ }
355
+
356
+ return roots
357
+ }
358
+
359
+ return plugin.Once(this.result.root, this.helpers)
360
+ } else if (typeof plugin === 'function') {
361
+ return plugin(this.result.root, this.result)
362
+ }
363
+ } catch (error) {
364
+ throw this.handleError(error)
365
+ }
366
+ }
367
+
368
+ stringify() {
369
+ if (this.error) throw this.error
370
+ if (this.stringified) return this.result
371
+ this.stringified = true
372
+
373
+ this.sync()
374
+
375
+ let opts = this.result.opts
376
+ let str = stringify
377
+ if (opts.syntax) str = opts.syntax.stringify
378
+ if (opts.stringifier) str = opts.stringifier
379
+ if (str.stringify) str = str.stringify
380
+
381
+ let rootSource = this.result.root.source
382
+ if (
383
+ opts.map === undefined &&
384
+ !(rootSource && rootSource.input && rootSource.input.map)
385
+ ) {
386
+ let result = ''
387
+ str(this.result.root, i => {
388
+ result += i
389
+ })
390
+ this.result.css = result
391
+ return this.result
392
+ }
393
+
394
+ let map = new MapGenerator(str, this.result.root, this.result.opts)
395
+ let data = map.generate()
396
+ this.result.css = data[0]
397
+ this.result.map = data[1]
398
+
399
+ return this.result
400
+ }
401
+
402
+ sync() {
403
+ if (this.error) throw this.error
404
+ if (this.processed) return this.result
405
+ this.processed = true
406
+
407
+ if (this.processing) {
408
+ throw this.getAsyncError()
409
+ }
410
+
411
+ for (let plugin of this.plugins) {
412
+ let promise = this.runOnRoot(plugin)
413
+ if (isPromise(promise)) {
414
+ throw this.getAsyncError()
415
+ }
416
+ }
417
+
418
+ this.prepareVisitors()
419
+ if (this.hasListener) {
420
+ let root = this.result.root
421
+ while (!root[isClean]) {
422
+ root[isClean] = true
423
+ this.walkSync(root)
424
+ }
425
+ if (this.listeners.OnceExit) {
426
+ if (root.type === 'document') {
427
+ for (let subRoot of root.nodes) {
428
+ this.visitSync(this.listeners.OnceExit, subRoot)
429
+ }
430
+ } else {
431
+ this.visitSync(this.listeners.OnceExit, root)
432
+ }
433
+ }
434
+ }
435
+
436
+ return this.result
437
+ }
438
+
439
+ then(onFulfilled, onRejected) {
440
+ if (process.env.NODE_ENV !== 'production') {
441
+ if (!('from' in this.opts)) {
442
+ warnOnce(
443
+ 'Without `from` option PostCSS could generate wrong source map ' +
444
+ 'and will not find Browserslist config. Set it to CSS file path ' +
445
+ 'or to `undefined` to prevent this warning.'
446
+ )
447
+ }
448
+ }
449
+ return this.async().then(onFulfilled, onRejected)
450
+ }
451
+
452
+ toString() {
453
+ return this.css
454
+ }
455
+
456
+ visitSync(visitors, node) {
457
+ for (let [plugin, visitor] of visitors) {
458
+ this.result.lastPlugin = plugin
459
+ let promise
460
+ try {
461
+ promise = visitor(node, this.helpers)
462
+ } catch (e) {
463
+ throw this.handleError(e, node.proxyOf)
464
+ }
465
+ if (node.type !== 'root' && node.type !== 'document' && !node.parent) {
466
+ return true
467
+ }
468
+ if (isPromise(promise)) {
469
+ throw this.getAsyncError()
470
+ }
471
+ }
472
+ }
473
+
474
+ visitTick(stack) {
475
+ let visit = stack[stack.length - 1]
476
+ let { node, visitors } = visit
477
+
478
+ if (node.type !== 'root' && node.type !== 'document' && !node.parent) {
479
+ stack.pop()
480
+ return
481
+ }
482
+
483
+ if (visitors.length > 0 && visit.visitorIndex < visitors.length) {
484
+ let [plugin, visitor] = visitors[visit.visitorIndex]
485
+ visit.visitorIndex += 1
486
+ if (visit.visitorIndex === visitors.length) {
487
+ visit.visitors = []
488
+ visit.visitorIndex = 0
489
+ }
490
+ this.result.lastPlugin = plugin
491
+ try {
492
+ return visitor(node.toProxy(), this.helpers)
493
+ } catch (e) {
494
+ throw this.handleError(e, node)
495
+ }
496
+ }
497
+
498
+ if (visit.iterator !== 0) {
499
+ let iterator = visit.iterator
500
+ let child
501
+ while ((child = node.nodes[node.indexes[iterator]])) {
502
+ node.indexes[iterator] += 1
503
+ if (!child[isClean]) {
504
+ child[isClean] = true
505
+ stack.push(toStack(child))
506
+ return
507
+ }
508
+ }
509
+ visit.iterator = 0
510
+ delete node.indexes[iterator]
511
+ }
512
+
513
+ let events = visit.events
514
+ while (visit.eventIndex < events.length) {
515
+ let event = events[visit.eventIndex]
516
+ visit.eventIndex += 1
517
+ if (event === CHILDREN) {
518
+ if (node.nodes && node.nodes.length) {
519
+ node[isClean] = true
520
+ visit.iterator = node.getIterator()
521
+ }
522
+ return
523
+ } else if (this.listeners[event]) {
524
+ visit.visitors = this.listeners[event]
525
+ return
526
+ }
527
+ }
528
+ stack.pop()
529
+ }
530
+
531
+ walkSync(node) {
532
+ node[isClean] = true
533
+ let events = getEvents(node)
534
+ for (let event of events) {
535
+ if (event === CHILDREN) {
536
+ if (node.nodes) {
537
+ node.each(child => {
538
+ if (!child[isClean]) this.walkSync(child)
539
+ })
540
+ }
541
+ } else {
542
+ let visitors = this.listeners[event]
543
+ if (visitors) {
544
+ if (this.visitSync(visitors, node.toProxy())) return
545
+ }
546
+ }
547
+ }
548
+ }
549
+
550
+ warnings() {
551
+ return this.sync().warnings()
552
+ }
553
+ }
554
+
555
+ LazyResult.registerPostcss = dependant => {
556
+ postcss = dependant
557
+ }
558
+
559
+ module.exports = LazyResult
560
+ LazyResult.default = LazyResult
561
+
562
+ Root.registerLazyResult(LazyResult)
563
+ Document.registerLazyResult(LazyResult)
@@ -0,0 +1,58 @@
1
+ 'use strict'
2
+
3
+ let list = {
4
+ comma(string) {
5
+ return list.split(string, [','], true)
6
+ },
7
+
8
+ space(string) {
9
+ let spaces = [' ', '\n', '\t']
10
+ return list.split(string, spaces)
11
+ },
12
+
13
+ split(string, separators, last) {
14
+ let array = []
15
+ let current = ''
16
+ let split = false
17
+
18
+ let func = 0
19
+ let inQuote = false
20
+ let prevQuote = ''
21
+ let escape = false
22
+
23
+ for (let letter of string) {
24
+ if (escape) {
25
+ escape = false
26
+ } else if (letter === '\\') {
27
+ escape = true
28
+ } else if (inQuote) {
29
+ if (letter === prevQuote) {
30
+ inQuote = false
31
+ }
32
+ } else if (letter === '"' || letter === "'") {
33
+ inQuote = true
34
+ prevQuote = letter
35
+ } else if (letter === '(') {
36
+ func += 1
37
+ } else if (letter === ')') {
38
+ if (func > 0) func -= 1
39
+ } else if (func === 0) {
40
+ if (separators.includes(letter)) split = true
41
+ }
42
+
43
+ if (split) {
44
+ if (current !== '') array.push(current.trim())
45
+ current = ''
46
+ split = false
47
+ } else {
48
+ current += letter
49
+ }
50
+ }
51
+
52
+ if (last || current !== '') array.push(current.trim())
53
+ return array
54
+ }
55
+ }
56
+
57
+ module.exports = list
58
+ list.default = list