spine-framework 0.2.5 → 0.2.7

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.
@@ -99,52 +99,35 @@ async function migrateCommand(options: MigrateOptions): Promise<void> {
99
99
  // Dollar-quoted strings ($$ ... $$ or $tag$ ... $tag$) can contain semicolons
100
100
  // that are NOT statement terminators.
101
101
  function splitSqlStatements(sql: string): string[] {
102
- const statements: string[] = []
103
- let current = ''
104
- let inDollarQuote = false
105
- let dollarTag = ''
106
- let i = 0
107
-
108
- while (i < sql.length) {
109
- if (!inDollarQuote) {
110
- // Check for start of dollar quote: $tag$ or $$
111
- const dollarMatch = sql.slice(i).match(/^(\$[A-Za-z_]*\$)/)
112
- if (dollarMatch) {
113
- inDollarQuote = true
114
- dollarTag = dollarMatch[1]
115
- current += dollarMatch[1]
116
- i += dollarMatch[1].length
117
- continue
118
- }
119
- // Check for statement terminator (semicolon outside dollar quote)
120
- if (sql[i] === ';') {
121
- const stmt = current.trim()
122
- if (stmt.length > 0 && !stmt.startsWith('--')) {
123
- statements.push(stmt + ';')
124
- }
125
- current = ''
126
- i++
127
- continue
128
- }
129
- } else {
130
- // We're inside a dollar-quoted string
131
- // Check for end of dollar quote
132
- if (sql.slice(i, i + dollarTag.length) === dollarTag) {
133
- inDollarQuote = false
134
- current += dollarTag
135
- i += dollarTag.length
136
- continue
137
- }
138
- }
139
- current += sql[i]
140
- i++
141
- }
142
-
143
- // Don't forget the last statement (might not have trailing semicolon)
144
- const last = current.trim()
145
- if (last.length > 0 && !last.startsWith('--')) {
146
- statements.push(last + (last.endsWith(';') ? '' : ';'))
147
- }
102
+ // Simple approach: use regex to split, but protect dollar-quoted blocks first
103
+ // Replace dollar-quoted blocks with placeholders, split by semicolons, then restore
104
+
105
+ const dollarBlocks: string[] = []
106
+ let blockIndex = 0
107
+
108
+ // Extract dollar-quoted blocks and replace with placeholders
109
+ const protectedSql = sql.replace(/\$[A-Za-z_]*\$[\s\S]*?\$[A-Za-z_]*\$/g, (match) => {
110
+ const placeholder = `__DOLLAR_BLOCK_${blockIndex}__`
111
+ dollarBlocks[blockIndex] = match
112
+ blockIndex++
113
+ return placeholder
114
+ })
115
+
116
+ // Split by semicolons
117
+ const rawStatements = protectedSql.split(';')
118
+
119
+ // Restore dollar blocks and filter
120
+ const statements = rawStatements
121
+ .map(s => {
122
+ let restored = s.trim()
123
+ // Restore dollar blocks
124
+ dollarBlocks.forEach((block, idx) => {
125
+ restored = restored.replace(`__DOLLAR_BLOCK_${idx}__`, block)
126
+ })
127
+ return restored
128
+ })
129
+ .filter(s => s.length > 0 && !s.startsWith('--'))
130
+ .map(s => s + ';')
148
131
 
149
132
  return statements
150
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../.framework/cli/commands/migrate.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkKxC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAevD"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../.framework/cli/commands/migrate.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiJxC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAevD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spine-framework",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "private": false,
5
5
  "description": "Spine — enterprise application framework built on Supabase + Netlify + React",
6
6
  "type": "module",